@plastic-software/three 0.183.4 → 0.184.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 +773 -286
- package/build/three.core.js +372 -110
- package/build/three.core.min.js +1 -1
- package/build/three.module.js +426 -180
- 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 +19 -3
- 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
|
@@ -30,7 +30,7 @@ import { Vector2 } from '../../math/Vector2.js';
|
|
|
30
30
|
import { Vector3 } from '../../math/Vector3.js';
|
|
31
31
|
import { Vector4 } from '../../math/Vector4.js';
|
|
32
32
|
import { Float16BufferAttribute } from '../../core/BufferAttribute.js';
|
|
33
|
-
import { warn, error } from '../../utils.js';
|
|
33
|
+
import { warn, error, yieldToMain } from '../../utils.js';
|
|
34
34
|
|
|
35
35
|
let _id = 0;
|
|
36
36
|
|
|
@@ -621,7 +621,7 @@ class NodeBuilder {
|
|
|
621
621
|
|
|
622
622
|
if ( bindGroup === undefined ) {
|
|
623
623
|
|
|
624
|
-
bindGroup = new BindGroup( groupName, bindings
|
|
624
|
+
bindGroup = new BindGroup( groupName, bindings );
|
|
625
625
|
|
|
626
626
|
bindingGroupsCache.set( cacheKey, bindGroup );
|
|
627
627
|
|
|
@@ -629,7 +629,7 @@ class NodeBuilder {
|
|
|
629
629
|
|
|
630
630
|
} else {
|
|
631
631
|
|
|
632
|
-
bindGroup = new BindGroup( groupName, bindings
|
|
632
|
+
bindGroup = new BindGroup( groupName, bindings );
|
|
633
633
|
|
|
634
634
|
}
|
|
635
635
|
|
|
@@ -736,8 +736,6 @@ class NodeBuilder {
|
|
|
736
736
|
const bindingGroup = bindingsGroups[ i ];
|
|
737
737
|
this.bindingsIndexes[ bindingGroup.name ].group = i;
|
|
738
738
|
|
|
739
|
-
bindingGroup.index = i;
|
|
740
|
-
|
|
741
739
|
}
|
|
742
740
|
|
|
743
741
|
}
|
|
@@ -866,7 +864,7 @@ class NodeBuilder {
|
|
|
866
864
|
*/
|
|
867
865
|
getUniformBufferLimit() {
|
|
868
866
|
|
|
869
|
-
return
|
|
867
|
+
return this.renderer.backend.capabilities.getUniformBufferLimit();
|
|
870
868
|
|
|
871
869
|
}
|
|
872
870
|
|
|
@@ -2674,11 +2672,12 @@ class NodeBuilder {
|
|
|
2674
2672
|
* Returns the variable definitions as a shader string for the given shader stage.
|
|
2675
2673
|
*
|
|
2676
2674
|
* @param {('vertex'|'fragment'|'compute'|'any')} shaderStage - The shader stage.
|
|
2675
|
+
* @param {boolean} [global=false] - Whether the variables are global.
|
|
2677
2676
|
* @return {string} The variable code section.
|
|
2678
2677
|
*/
|
|
2679
|
-
getVars( shaderStage ) {
|
|
2678
|
+
getVars( shaderStage, global = false ) {
|
|
2680
2679
|
|
|
2681
|
-
|
|
2680
|
+
const snippets = [];
|
|
2682
2681
|
|
|
2683
2682
|
const vars = this.vars[ shaderStage ];
|
|
2684
2683
|
|
|
@@ -2686,13 +2685,13 @@ class NodeBuilder {
|
|
|
2686
2685
|
|
|
2687
2686
|
for ( const variable of vars ) {
|
|
2688
2687
|
|
|
2689
|
-
|
|
2688
|
+
snippets.push( `${ this.getVar( variable.type, variable.name, variable.count ) };` );
|
|
2690
2689
|
|
|
2691
2690
|
}
|
|
2692
2691
|
|
|
2693
2692
|
}
|
|
2694
2693
|
|
|
2695
|
-
return
|
|
2694
|
+
return snippets.join( global ? '\n' : '\n\t' );
|
|
2696
2695
|
|
|
2697
2696
|
}
|
|
2698
2697
|
|
|
@@ -2941,13 +2940,41 @@ class NodeBuilder {
|
|
|
2941
2940
|
}
|
|
2942
2941
|
|
|
2943
2942
|
/**
|
|
2944
|
-
*
|
|
2945
|
-
*
|
|
2946
|
-
* @return {NodeBuilder} A reference to this node builder.
|
|
2943
|
+
* Prebuild the node builder.
|
|
2947
2944
|
*/
|
|
2948
|
-
|
|
2945
|
+
prebuild() {
|
|
2946
|
+
|
|
2947
|
+
const { object, renderer, material } = this;
|
|
2948
|
+
|
|
2949
|
+
// < renderer.contextNode >
|
|
2950
|
+
|
|
2951
|
+
if ( renderer.contextNode.isContextNode === true ) {
|
|
2952
|
+
|
|
2953
|
+
this.context = { ...this.context, ...renderer.contextNode.getFlowContextData() };
|
|
2954
|
+
|
|
2955
|
+
} else {
|
|
2956
|
+
|
|
2957
|
+
error( 'NodeBuilder: "renderer.contextNode" must be an instance of `context()`.' );
|
|
2958
|
+
|
|
2959
|
+
}
|
|
2960
|
+
|
|
2961
|
+
// < material.contextNode >
|
|
2962
|
+
|
|
2963
|
+
if ( material && material.contextNode ) {
|
|
2949
2964
|
|
|
2950
|
-
|
|
2965
|
+
if ( material.contextNode.isContextNode === true ) {
|
|
2966
|
+
|
|
2967
|
+
this.context = { ...this.context, ...material.contextNode.getFlowContextData() };
|
|
2968
|
+
|
|
2969
|
+
} else {
|
|
2970
|
+
|
|
2971
|
+
error( 'NodeBuilder: "material.contextNode" must be an instance of `context()`.' );
|
|
2972
|
+
|
|
2973
|
+
}
|
|
2974
|
+
|
|
2975
|
+
}
|
|
2976
|
+
|
|
2977
|
+
// < nodeMaterial >
|
|
2951
2978
|
|
|
2952
2979
|
if ( material !== null ) {
|
|
2953
2980
|
|
|
@@ -2955,7 +2982,7 @@ class NodeBuilder {
|
|
|
2955
2982
|
|
|
2956
2983
|
if ( nodeMaterial === null ) {
|
|
2957
2984
|
|
|
2958
|
-
error( `
|
|
2985
|
+
error( `NodeBuilder: Material "${ material.type }" is not compatible.` );
|
|
2959
2986
|
|
|
2960
2987
|
nodeMaterial = new NodeMaterial();
|
|
2961
2988
|
|
|
@@ -2969,6 +2996,17 @@ class NodeBuilder {
|
|
|
2969
2996
|
|
|
2970
2997
|
}
|
|
2971
2998
|
|
|
2999
|
+
}
|
|
3000
|
+
|
|
3001
|
+
/**
|
|
3002
|
+
* Central build method which controls the build for the given object.
|
|
3003
|
+
*
|
|
3004
|
+
* @return {NodeBuilder} A reference to this node builder.
|
|
3005
|
+
*/
|
|
3006
|
+
build() {
|
|
3007
|
+
|
|
3008
|
+
this.prebuild();
|
|
3009
|
+
|
|
2972
3010
|
// setup() -> stage 1: create possible new nodes and/or return an output reference node
|
|
2973
3011
|
// analyze() -> stage 2: analyze nodes to possible optimization and validation
|
|
2974
3012
|
// generate() -> stage 3: generate shader
|
|
@@ -3019,6 +3057,69 @@ class NodeBuilder {
|
|
|
3019
3057
|
|
|
3020
3058
|
}
|
|
3021
3059
|
|
|
3060
|
+
/**
|
|
3061
|
+
* Async version of build() that yields to main thread between shader stages.
|
|
3062
|
+
* Use this in compileAsync() to prevent blocking the main thread.
|
|
3063
|
+
*
|
|
3064
|
+
* @return {Promise<NodeBuilder>} A promise that resolves to this node builder.
|
|
3065
|
+
*/
|
|
3066
|
+
async buildAsync() {
|
|
3067
|
+
|
|
3068
|
+
this.prebuild();
|
|
3069
|
+
|
|
3070
|
+
// setup() -> stage 1: create possible new nodes and/or return an output reference node
|
|
3071
|
+
// analyze() -> stage 2: analyze nodes to possible optimization and validation
|
|
3072
|
+
// generate() -> stage 3: generate shader
|
|
3073
|
+
|
|
3074
|
+
for ( const buildStage of defaultBuildStages ) {
|
|
3075
|
+
|
|
3076
|
+
this.setBuildStage( buildStage );
|
|
3077
|
+
|
|
3078
|
+
if ( this.context.position && this.context.position.isNode ) {
|
|
3079
|
+
|
|
3080
|
+
this.flowNodeFromShaderStage( 'vertex', this.context.position );
|
|
3081
|
+
|
|
3082
|
+
}
|
|
3083
|
+
|
|
3084
|
+
for ( const shaderStage of shaderStages ) {
|
|
3085
|
+
|
|
3086
|
+
this.setShaderStage( shaderStage );
|
|
3087
|
+
|
|
3088
|
+
const flowNodes = this.flowNodes[ shaderStage ];
|
|
3089
|
+
|
|
3090
|
+
for ( const node of flowNodes ) {
|
|
3091
|
+
|
|
3092
|
+
if ( buildStage === 'generate' ) {
|
|
3093
|
+
|
|
3094
|
+
this.flowNode( node );
|
|
3095
|
+
|
|
3096
|
+
} else {
|
|
3097
|
+
|
|
3098
|
+
node.build( this );
|
|
3099
|
+
|
|
3100
|
+
}
|
|
3101
|
+
|
|
3102
|
+
}
|
|
3103
|
+
|
|
3104
|
+
// Yield to main thread after each shader stage to prevent blocking
|
|
3105
|
+
await yieldToMain();
|
|
3106
|
+
|
|
3107
|
+
}
|
|
3108
|
+
|
|
3109
|
+
}
|
|
3110
|
+
|
|
3111
|
+
this.setBuildStage( null );
|
|
3112
|
+
this.setShaderStage( null );
|
|
3113
|
+
|
|
3114
|
+
// stage 4: build code for a specific output
|
|
3115
|
+
|
|
3116
|
+
this.buildCode();
|
|
3117
|
+
this.buildUpdateNodes();
|
|
3118
|
+
|
|
3119
|
+
return this;
|
|
3120
|
+
|
|
3121
|
+
}
|
|
3122
|
+
|
|
3022
3123
|
/**
|
|
3023
3124
|
* Returns shared data object for the given node.
|
|
3024
3125
|
*
|
|
@@ -1,4 +1,5 @@
|
|
|
1
1
|
import Node from './Node.js';
|
|
2
|
+
import { NodeUpdateType } from './constants.js';
|
|
2
3
|
|
|
3
4
|
/**
|
|
4
5
|
* This node can be used to group single instances of {@link UniformNode}
|
|
@@ -27,8 +28,9 @@ class UniformGroupNode extends Node {
|
|
|
27
28
|
* @param {string} name - The name of the uniform group node.
|
|
28
29
|
* @param {boolean} [shared=false] - Whether this uniform group node is shared or not.
|
|
29
30
|
* @param {number} [order=1] - Influences the internal sorting.
|
|
31
|
+
* @param {string|null} [updateType=null] - The update type of the uniform group node.
|
|
30
32
|
*/
|
|
31
|
-
constructor( name, shared = false, order = 1 ) {
|
|
33
|
+
constructor( name, shared = false, order = 1, updateType = null ) {
|
|
32
34
|
|
|
33
35
|
super( 'string' );
|
|
34
36
|
|
|
@@ -56,6 +58,14 @@ class UniformGroupNode extends Node {
|
|
|
56
58
|
*/
|
|
57
59
|
this.order = order;
|
|
58
60
|
|
|
61
|
+
/**
|
|
62
|
+
* The update type of the uniform group node.
|
|
63
|
+
*
|
|
64
|
+
* @type {string|null}
|
|
65
|
+
* @default null
|
|
66
|
+
*/
|
|
67
|
+
this.updateType = updateType;
|
|
68
|
+
|
|
59
69
|
/**
|
|
60
70
|
* This flag can be used for type testing.
|
|
61
71
|
*
|
|
@@ -67,6 +77,21 @@ class UniformGroupNode extends Node {
|
|
|
67
77
|
|
|
68
78
|
}
|
|
69
79
|
|
|
80
|
+
/**
|
|
81
|
+
* Marks the uniform group node as needing an update.
|
|
82
|
+
* This will trigger the necessary updates in the rendering process.
|
|
83
|
+
*/
|
|
84
|
+
update() {
|
|
85
|
+
|
|
86
|
+
this.needsUpdate = true;
|
|
87
|
+
|
|
88
|
+
}
|
|
89
|
+
|
|
90
|
+
/**
|
|
91
|
+
* Serializes the uniform group node to a JSON object.
|
|
92
|
+
*
|
|
93
|
+
* @param {Object} data - The object to store the serialized data.
|
|
94
|
+
*/
|
|
70
95
|
serialize( data ) {
|
|
71
96
|
|
|
72
97
|
super.serialize( data );
|
|
@@ -77,6 +102,11 @@ class UniformGroupNode extends Node {
|
|
|
77
102
|
|
|
78
103
|
}
|
|
79
104
|
|
|
105
|
+
/**
|
|
106
|
+
* Deserializes the uniform group node from a JSON object.
|
|
107
|
+
*
|
|
108
|
+
* @param {Object} data - The object containing the serialized data.
|
|
109
|
+
*/
|
|
80
110
|
deserialize( data ) {
|
|
81
111
|
|
|
82
112
|
super.deserialize( data );
|
|
@@ -99,7 +129,7 @@ export default UniformGroupNode;
|
|
|
99
129
|
* @param {string} name - The name of the uniform group node.
|
|
100
130
|
* @returns {UniformGroupNode}
|
|
101
131
|
*/
|
|
102
|
-
export const uniformGroup = ( name ) => new UniformGroupNode( name );
|
|
132
|
+
export const uniformGroup = ( name, order = 1, updateType = null ) => new UniformGroupNode( name, false, order, updateType );
|
|
103
133
|
|
|
104
134
|
/**
|
|
105
135
|
* TSL function for creating a shared uniform group node with the given name and order.
|
|
@@ -110,7 +140,7 @@ export const uniformGroup = ( name ) => new UniformGroupNode( name );
|
|
|
110
140
|
* @param {number} [order=0] - Influences the internal sorting.
|
|
111
141
|
* @returns {UniformGroupNode}
|
|
112
142
|
*/
|
|
113
|
-
export const sharedUniformGroup = ( name, order = 0 ) => new UniformGroupNode( name, true, order );
|
|
143
|
+
export const sharedUniformGroup = ( name, order = 0, updateType = null ) => new UniformGroupNode( name, true, order, updateType );
|
|
114
144
|
|
|
115
145
|
/**
|
|
116
146
|
* TSL object that represents a shared uniform group node which is updated once per frame.
|
|
@@ -118,7 +148,7 @@ export const sharedUniformGroup = ( name, order = 0 ) => new UniformGroupNode( n
|
|
|
118
148
|
* @tsl
|
|
119
149
|
* @type {UniformGroupNode}
|
|
120
150
|
*/
|
|
121
|
-
export const frameGroup = /*@__PURE__*/ sharedUniformGroup( 'frame' );
|
|
151
|
+
export const frameGroup = /*@__PURE__*/ sharedUniformGroup( 'frame', 0, NodeUpdateType.FRAME );
|
|
122
152
|
|
|
123
153
|
/**
|
|
124
154
|
* TSL object that represents a shared uniform group node which is updated once per render.
|
|
@@ -126,7 +156,7 @@ export const frameGroup = /*@__PURE__*/ sharedUniformGroup( 'frame' );
|
|
|
126
156
|
* @tsl
|
|
127
157
|
* @type {UniformGroupNode}
|
|
128
158
|
*/
|
|
129
|
-
export const renderGroup = /*@__PURE__*/ sharedUniformGroup( 'render' );
|
|
159
|
+
export const renderGroup = /*@__PURE__*/ sharedUniformGroup( 'render', 0, NodeUpdateType.RENDER );
|
|
130
160
|
|
|
131
161
|
/**
|
|
132
162
|
* TSL object that represents a uniform group node which is updated once per object.
|
|
@@ -134,4 +164,4 @@ export const renderGroup = /*@__PURE__*/ sharedUniformGroup( 'render' );
|
|
|
134
164
|
* @tsl
|
|
135
165
|
* @type {UniformGroupNode}
|
|
136
166
|
*/
|
|
137
|
-
export const objectGroup = /*@__PURE__*/ uniformGroup( 'object' );
|
|
167
|
+
export const objectGroup = /*@__PURE__*/ uniformGroup( 'object', 1, NodeUpdateType.OBJECT );
|
|
@@ -87,7 +87,7 @@ class NormalMapNode extends TempNode {
|
|
|
87
87
|
|
|
88
88
|
} else if ( unpackNormalMode !== NoNormalPacking ) {
|
|
89
89
|
|
|
90
|
-
|
|
90
|
+
error( `THREE.NodeMaterial: Unexpected unpack normal mode: ${ unpackNormalMode }` );
|
|
91
91
|
|
|
92
92
|
}
|
|
93
93
|
|
|
@@ -95,7 +95,7 @@ class NormalMapNode extends TempNode {
|
|
|
95
95
|
|
|
96
96
|
if ( unpackNormalMode !== NoNormalPacking ) {
|
|
97
97
|
|
|
98
|
-
|
|
98
|
+
error( `THREE.NodeMaterial: Normal map type '${ normalMapType }' is not compatible with unpack normal mode '${ unpackNormalMode }'` );
|
|
99
99
|
|
|
100
100
|
}
|
|
101
101
|
|
|
@@ -5,7 +5,7 @@ import { context } from '../tsl/TSLBase.js';
|
|
|
5
5
|
import { uniform } from '../core/UniformNode.js';
|
|
6
6
|
import { viewZToOrthographicDepth, perspectiveDepthToViewZ } from './ViewportDepthNode.js';
|
|
7
7
|
|
|
8
|
-
import { HalfFloatType
|
|
8
|
+
import { HalfFloatType, FloatType } from '../../constants.js';
|
|
9
9
|
import { Vector2 } from '../../math/Vector2.js';
|
|
10
10
|
import { Vector4 } from '../../math/Vector4.js';
|
|
11
11
|
import { DepthTexture } from '../../textures/DepthTexture.js';
|
|
@@ -757,6 +757,12 @@ class PassNode extends TempNode {
|
|
|
757
757
|
|
|
758
758
|
this.renderTarget.texture.type = renderer.getOutputBufferType();
|
|
759
759
|
|
|
760
|
+
if ( renderer.reversedDepthBuffer === true ) {
|
|
761
|
+
|
|
762
|
+
this.renderTarget.depthTexture.type = FloatType;
|
|
763
|
+
|
|
764
|
+
}
|
|
765
|
+
|
|
760
766
|
return this.scope === PassNode.COLOR ? this.getTextureNode() : this.getLinearDepthNode();
|
|
761
767
|
|
|
762
768
|
}
|
|
@@ -880,8 +886,26 @@ class PassNode extends TempNode {
|
|
|
880
886
|
|
|
881
887
|
this.renderTarget.setSize( effectiveWidth, effectiveHeight );
|
|
882
888
|
|
|
883
|
-
|
|
884
|
-
|
|
889
|
+
// scissor
|
|
890
|
+
|
|
891
|
+
if ( this._scissor !== null ) {
|
|
892
|
+
|
|
893
|
+
this.renderTarget.scissor.copy( this._scissor ).multiplyScalar( this._pixelRatio * this._resolutionScale ).floor();
|
|
894
|
+
this.renderTarget.scissorTest = true;
|
|
895
|
+
|
|
896
|
+
} else {
|
|
897
|
+
|
|
898
|
+
this.renderTarget.scissorTest = false;
|
|
899
|
+
|
|
900
|
+
}
|
|
901
|
+
|
|
902
|
+
// viewport
|
|
903
|
+
|
|
904
|
+
if ( this._viewport !== null ) {
|
|
905
|
+
|
|
906
|
+
this.renderTarget.viewport.copy( this._viewport ).multiplyScalar( this._pixelRatio * this._resolutionScale ).floor();
|
|
907
|
+
|
|
908
|
+
}
|
|
885
909
|
|
|
886
910
|
}
|
|
887
911
|
|
|
@@ -916,8 +940,6 @@ class PassNode extends TempNode {
|
|
|
916
940
|
|
|
917
941
|
}
|
|
918
942
|
|
|
919
|
-
this._scissor.multiplyScalar( this._pixelRatio * this._resolutionScale ).floor();
|
|
920
|
-
|
|
921
943
|
}
|
|
922
944
|
|
|
923
945
|
}
|
|
@@ -952,8 +974,6 @@ class PassNode extends TempNode {
|
|
|
952
974
|
|
|
953
975
|
}
|
|
954
976
|
|
|
955
|
-
this._viewport.multiplyScalar( this._pixelRatio * this._resolutionScale ).floor();
|
|
956
|
-
|
|
957
977
|
}
|
|
958
978
|
|
|
959
979
|
}
|
|
@@ -5,9 +5,9 @@ import { NoColorSpace, NoToneMapping } from '../../constants.js';
|
|
|
5
5
|
import { ColorManagement } from '../../math/ColorManagement.js';
|
|
6
6
|
|
|
7
7
|
/**
|
|
8
|
-
* Normally, tone mapping and color conversion happens automatically
|
|
9
|
-
* before outputting pixel
|
|
10
|
-
* post processing setups this
|
|
8
|
+
* Normally, tone mapping and color conversion happens automatically just
|
|
9
|
+
* before outputting a pixel to the default (screen) framebuffer. In certain
|
|
10
|
+
* post processing setups this is too late because some effects such as FXAA
|
|
11
11
|
* require e.g. sRGB input. For such scenarios, `RenderOutputNode` can be used
|
|
12
12
|
* to apply tone mapping and color space conversion at an arbitrary point
|
|
13
13
|
* in the effect chain.
|
|
@@ -136,7 +136,7 @@ class RenderOutputNode extends TempNode {
|
|
|
136
136
|
export default RenderOutputNode;
|
|
137
137
|
|
|
138
138
|
/**
|
|
139
|
-
* TSL function for creating a
|
|
139
|
+
* TSL function for creating a render output node.
|
|
140
140
|
*
|
|
141
141
|
* @tsl
|
|
142
142
|
* @function
|
|
@@ -26,28 +26,23 @@ class ViewportDepthTextureNode extends ViewportTextureNode {
|
|
|
26
26
|
*
|
|
27
27
|
* @param {Node} [uvNode=screenUV] - The uv node.
|
|
28
28
|
* @param {?Node} [levelNode=null] - The level node.
|
|
29
|
+
* @param {?DepthTexture} [depthTexture=null] - A depth texture. If not provided, uses a shared depth texture.
|
|
29
30
|
*/
|
|
30
|
-
constructor( uvNode = screenUV, levelNode = null ) {
|
|
31
|
+
constructor( uvNode = screenUV, levelNode = null, depthTexture = null ) {
|
|
31
32
|
|
|
32
|
-
if (
|
|
33
|
+
if ( depthTexture === null ) {
|
|
33
34
|
|
|
34
|
-
_sharedDepthbuffer
|
|
35
|
+
if ( _sharedDepthbuffer === null ) {
|
|
35
36
|
|
|
36
|
-
|
|
37
|
+
_sharedDepthbuffer = new DepthTexture();
|
|
37
38
|
|
|
38
|
-
|
|
39
|
+
}
|
|
39
40
|
|
|
40
|
-
|
|
41
|
+
depthTexture = _sharedDepthbuffer;
|
|
41
42
|
|
|
42
|
-
|
|
43
|
-
* Overwritten so the method always returns the unique shared
|
|
44
|
-
* depth texture.
|
|
45
|
-
*
|
|
46
|
-
* @return {DepthTexture} The shared depth texture.
|
|
47
|
-
*/
|
|
48
|
-
getTextureForReference() {
|
|
43
|
+
}
|
|
49
44
|
|
|
50
|
-
|
|
45
|
+
super( uvNode, levelNode, depthTexture );
|
|
51
46
|
|
|
52
47
|
}
|
|
53
48
|
|
|
@@ -62,6 +57,7 @@ export default ViewportDepthTextureNode;
|
|
|
62
57
|
* @function
|
|
63
58
|
* @param {?Node} [uvNode=screenUV] - The uv node.
|
|
64
59
|
* @param {?Node} [levelNode=null] - The level node.
|
|
60
|
+
* @param {?DepthTexture} [depthTexture=null] - A depth texture. If not provided, a depth texture is created automatically.
|
|
65
61
|
* @returns {ViewportDepthTextureNode}
|
|
66
62
|
*/
|
|
67
|
-
export const viewportDepthTexture = /*@__PURE__*/ nodeProxy( ViewportDepthTextureNode ).setParameterLength( 0,
|
|
63
|
+
export const viewportDepthTexture = /*@__PURE__*/ nodeProxy( ViewportDepthTextureNode ).setParameterLength( 0, 3 );
|
|
@@ -99,12 +99,12 @@ class ViewportTextureNode extends TextureNode {
|
|
|
99
99
|
}
|
|
100
100
|
|
|
101
101
|
/**
|
|
102
|
-
* This methods returns a texture for the given render target reference.
|
|
102
|
+
* This methods returns a texture for the given render target or canvas target reference.
|
|
103
103
|
*
|
|
104
104
|
* To avoid rendering errors, `ViewportTextureNode` must use unique framebuffer textures
|
|
105
105
|
* for different render contexts.
|
|
106
106
|
*
|
|
107
|
-
* @param {?RenderTarget} [reference=null] - The render target reference.
|
|
107
|
+
* @param {?(RenderTarget|CanvasTarget)} [reference=null] - The render target or canvas target reference.
|
|
108
108
|
* @return {Texture} The framebuffer texture.
|
|
109
109
|
*/
|
|
110
110
|
getTextureForReference( reference = null ) {
|
|
@@ -144,9 +144,13 @@ class ViewportTextureNode extends TextureNode {
|
|
|
144
144
|
|
|
145
145
|
updateReference( frame ) {
|
|
146
146
|
|
|
147
|
-
const
|
|
147
|
+
const renderer = frame.renderer;
|
|
148
|
+
const renderTarget = renderer.getRenderTarget();
|
|
149
|
+
const canvasTarget = renderer.getCanvasTarget();
|
|
148
150
|
|
|
149
|
-
|
|
151
|
+
const reference = renderTarget ? renderTarget : canvasTarget;
|
|
152
|
+
|
|
153
|
+
this.value = this.getTextureForReference( reference );
|
|
150
154
|
|
|
151
155
|
return this.value;
|
|
152
156
|
|
|
@@ -156,20 +160,27 @@ class ViewportTextureNode extends TextureNode {
|
|
|
156
160
|
|
|
157
161
|
const renderer = frame.renderer;
|
|
158
162
|
const renderTarget = renderer.getRenderTarget();
|
|
163
|
+
const canvasTarget = renderer.getCanvasTarget();
|
|
159
164
|
|
|
160
|
-
|
|
165
|
+
const reference = renderTarget ? renderTarget : canvasTarget;
|
|
166
|
+
|
|
167
|
+
if ( reference === null ) {
|
|
161
168
|
|
|
162
169
|
renderer.getDrawingBufferSize( _size );
|
|
163
170
|
|
|
171
|
+
} else if ( reference.getDrawingBufferSize ) {
|
|
172
|
+
|
|
173
|
+
reference.getDrawingBufferSize( _size );
|
|
174
|
+
|
|
164
175
|
} else {
|
|
165
176
|
|
|
166
|
-
_size.set(
|
|
177
|
+
_size.set( reference.width, reference.height );
|
|
167
178
|
|
|
168
179
|
}
|
|
169
180
|
|
|
170
181
|
//
|
|
171
182
|
|
|
172
|
-
const framebufferTexture = this.getTextureForReference(
|
|
183
|
+
const framebufferTexture = this.getTextureForReference( reference );
|
|
173
184
|
|
|
174
185
|
if ( framebufferTexture.image.width !== _size.width || framebufferTexture.image.height !== _size.height ) {
|
|
175
186
|
|
|
@@ -1,4 +1,5 @@
|
|
|
1
1
|
import { div } from '../../math/OperatorNode.js';
|
|
2
|
+
import { EPSILON } from '../../math/MathNode.js';
|
|
2
3
|
import { Fn, vec3 } from '../../tsl/TSLBase.js';
|
|
3
4
|
|
|
4
5
|
// https://google.github.io/filament/Filament.md.html#materialsystem/anisotropicmodel/anisotropicspecularbrdf
|
|
@@ -7,9 +8,8 @@ const V_GGX_SmithCorrelated_Anisotropic = /*@__PURE__*/ Fn( ( { alphaT, alphaB,
|
|
|
7
8
|
|
|
8
9
|
const gv = dotNL.mul( vec3( alphaT.mul( dotTV ), alphaB.mul( dotBV ), dotNV ).length() );
|
|
9
10
|
const gl = dotNV.mul( vec3( alphaT.mul( dotTL ), alphaB.mul( dotBL ), dotNL ).length() );
|
|
10
|
-
const v = div( 0.5, gv.add( gl ) );
|
|
11
11
|
|
|
12
|
-
return
|
|
12
|
+
return div( 0.5, gv.add( gl ).max( EPSILON ) );
|
|
13
13
|
|
|
14
14
|
} ).setLayout( {
|
|
15
15
|
name: 'V_GGX_SmithCorrelated_Anisotropic',
|
|
@@ -84,7 +84,7 @@ class RangeNode extends Node {
|
|
|
84
84
|
* @param {NodeBuilder} builder - The current node builder.
|
|
85
85
|
* @return {string} The node type.
|
|
86
86
|
*/
|
|
87
|
-
|
|
87
|
+
generateNodeType( builder ) {
|
|
88
88
|
|
|
89
89
|
return builder.object.count > 1 ? builder.getTypeFromLength( this.getVectorLength( builder ) ) : 'float';
|
|
90
90
|
|