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,6 +1,6 @@
|
|
|
1
|
-
import Node, {
|
|
2
|
-
import {
|
|
3
|
-
import { ShaderNode, nodeProxy, getCurrentStack, setCurrentStack } from '../
|
|
1
|
+
import Node, { registerNode } from './Node.js';
|
|
2
|
+
import { select } from '../math/ConditionalNode.js';
|
|
3
|
+
import { ShaderNode, nodeProxy, getCurrentStack, setCurrentStack } from '../tsl/TSLBase.js';
|
|
4
4
|
|
|
5
5
|
class StackNode extends Node {
|
|
6
6
|
|
|
@@ -33,19 +33,19 @@ class StackNode extends Node {
|
|
|
33
33
|
|
|
34
34
|
}
|
|
35
35
|
|
|
36
|
-
|
|
36
|
+
If( boolNode, method ) {
|
|
37
37
|
|
|
38
38
|
const methodNode = new ShaderNode( method );
|
|
39
|
-
this._currentCond =
|
|
39
|
+
this._currentCond = select( boolNode, methodNode );
|
|
40
40
|
|
|
41
41
|
return this.add( this._currentCond );
|
|
42
42
|
|
|
43
43
|
}
|
|
44
44
|
|
|
45
|
-
|
|
45
|
+
ElseIf( boolNode, method ) {
|
|
46
46
|
|
|
47
47
|
const methodNode = new ShaderNode( method );
|
|
48
|
-
const ifNode =
|
|
48
|
+
const ifNode = select( boolNode, methodNode );
|
|
49
49
|
|
|
50
50
|
this._currentCond.elseNode = ifNode;
|
|
51
51
|
this._currentCond = ifNode;
|
|
@@ -54,7 +54,7 @@ class StackNode extends Node {
|
|
|
54
54
|
|
|
55
55
|
}
|
|
56
56
|
|
|
57
|
-
|
|
57
|
+
Else( method ) {
|
|
58
58
|
|
|
59
59
|
this._currentCond.elseNode = new ShaderNode( method );
|
|
60
60
|
|
|
@@ -80,10 +80,26 @@ class StackNode extends Node {
|
|
|
80
80
|
|
|
81
81
|
}
|
|
82
82
|
|
|
83
|
+
//
|
|
84
|
+
|
|
85
|
+
else( ...params ) { // @deprecated, r168
|
|
86
|
+
|
|
87
|
+
console.warn( 'TSL.StackNode: .else() has been renamed to .Else().' );
|
|
88
|
+
return this.Else( ...params );
|
|
89
|
+
|
|
90
|
+
}
|
|
91
|
+
|
|
92
|
+
elseif( ...params ) { // @deprecated, r168
|
|
93
|
+
|
|
94
|
+
console.warn( 'TSL.StackNode: .elseif() has been renamed to .ElseIf().' );
|
|
95
|
+
return this.ElseIf( ...params );
|
|
96
|
+
|
|
97
|
+
}
|
|
98
|
+
|
|
83
99
|
}
|
|
84
100
|
|
|
85
101
|
export default StackNode;
|
|
86
102
|
|
|
87
|
-
|
|
103
|
+
StackNode.type = /*@__PURE__*/ registerNode( 'Stack', StackNode );
|
|
88
104
|
|
|
89
|
-
|
|
105
|
+
export const stack = /*@__PURE__*/ nodeProxy( StackNode );
|
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
import Node, {
|
|
1
|
+
import Node, { registerNode } from './Node.js';
|
|
2
2
|
|
|
3
3
|
class StructTypeNode extends Node {
|
|
4
4
|
|
|
@@ -21,4 +21,4 @@ class StructTypeNode extends Node {
|
|
|
21
21
|
|
|
22
22
|
export default StructTypeNode;
|
|
23
23
|
|
|
24
|
-
|
|
24
|
+
StructTypeNode.type = /*@__PURE__*/ registerNode( 'StructType', StructTypeNode );
|
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
import Node, {
|
|
1
|
+
import Node, { registerNode } from './Node.js';
|
|
2
2
|
|
|
3
3
|
class TempNode extends Node {
|
|
4
4
|
|
|
@@ -55,4 +55,4 @@ class TempNode extends Node {
|
|
|
55
55
|
|
|
56
56
|
export default TempNode;
|
|
57
57
|
|
|
58
|
-
|
|
58
|
+
TempNode.type = /*@__PURE__*/ registerNode( 'Temp', TempNode );
|
|
@@ -1,5 +1,4 @@
|
|
|
1
|
-
import Node from './Node.js';
|
|
2
|
-
import { addNodeClass } from './Node.js';
|
|
1
|
+
import Node, { registerNode } from './Node.js';
|
|
3
2
|
|
|
4
3
|
class UniformGroupNode extends Node {
|
|
5
4
|
|
|
@@ -44,13 +43,13 @@ class UniformGroupNode extends Node {
|
|
|
44
43
|
|
|
45
44
|
}
|
|
46
45
|
|
|
47
|
-
export
|
|
48
|
-
export const sharedUniformGroup = ( name ) => new UniformGroupNode( name, true );
|
|
46
|
+
export default UniformGroupNode;
|
|
49
47
|
|
|
50
|
-
|
|
51
|
-
export const renderGroup = sharedUniformGroup( 'render' );
|
|
52
|
-
export const objectGroup = uniformGroup( 'object' );
|
|
48
|
+
UniformGroupNode.type = /*@__PURE__*/ registerNode( 'UniformGroup', UniformGroupNode );
|
|
53
49
|
|
|
54
|
-
export
|
|
50
|
+
export const uniformGroup = ( name ) => new UniformGroupNode( name );
|
|
51
|
+
export const sharedUniformGroup = ( name ) => new UniformGroupNode( name, true );
|
|
55
52
|
|
|
56
|
-
|
|
53
|
+
export const frameGroup = /*@__PURE__*/ sharedUniformGroup( 'frame' );
|
|
54
|
+
export const renderGroup = /*@__PURE__*/ sharedUniformGroup( 'render' );
|
|
55
|
+
export const objectGroup = /*@__PURE__*/ uniformGroup( 'object' );
|
|
@@ -1,7 +1,7 @@
|
|
|
1
|
+
import { registerNode } from './Node.js';
|
|
1
2
|
import InputNode from './InputNode.js';
|
|
2
3
|
import { objectGroup } from './UniformGroupNode.js';
|
|
3
|
-
import {
|
|
4
|
-
import { nodeObject, getConstNodeType } from '../shadernode/ShaderNode.js';
|
|
4
|
+
import { nodeObject, getConstNodeType } from '../tsl/TSLCore.js';
|
|
5
5
|
|
|
6
6
|
class UniformNode extends InputNode {
|
|
7
7
|
|
|
@@ -95,6 +95,8 @@ class UniformNode extends InputNode {
|
|
|
95
95
|
|
|
96
96
|
export default UniformNode;
|
|
97
97
|
|
|
98
|
+
UniformNode.type = /*@__PURE__*/ registerNode( 'Uniform', UniformNode );
|
|
99
|
+
|
|
98
100
|
export const uniform = ( arg1, arg2 ) => {
|
|
99
101
|
|
|
100
102
|
const nodeType = getConstNodeType( arg2 || arg1 );
|
|
@@ -105,5 +107,3 @@ export const uniform = ( arg1, arg2 ) => {
|
|
|
105
107
|
return nodeObject( new UniformNode( value, nodeType ) );
|
|
106
108
|
|
|
107
109
|
};
|
|
108
|
-
|
|
109
|
-
addNodeClass( 'UniformNode', UniformNode );
|
|
@@ -1,5 +1,5 @@
|
|
|
1
|
-
import Node, {
|
|
2
|
-
import {
|
|
1
|
+
import Node, { registerNode } from './Node.js';
|
|
2
|
+
import { addMethodChaining, nodeProxy } from '../tsl/TSLCore.js';
|
|
3
3
|
|
|
4
4
|
class VarNode extends Node {
|
|
5
5
|
|
|
@@ -48,9 +48,9 @@ class VarNode extends Node {
|
|
|
48
48
|
|
|
49
49
|
export default VarNode;
|
|
50
50
|
|
|
51
|
-
|
|
51
|
+
VarNode.type = /*@__PURE__*/ registerNode( 'Var', VarNode );
|
|
52
52
|
|
|
53
|
-
|
|
54
|
-
addNodeElement( 'toVar', ( ...params ) => temp( ...params ).append() );
|
|
53
|
+
export const temp = /*@__PURE__*/ nodeProxy( VarNode );
|
|
55
54
|
|
|
56
|
-
|
|
55
|
+
addMethodChaining( 'temp', temp ); // @TODO: Will be removed in the future
|
|
56
|
+
addMethodChaining( 'toVar', ( ...params ) => temp( ...params ).append() );
|
|
@@ -1,6 +1,6 @@
|
|
|
1
|
-
import Node, {
|
|
1
|
+
import Node, { registerNode } from './Node.js';
|
|
2
2
|
import { NodeShaderStage } from './constants.js';
|
|
3
|
-
import {
|
|
3
|
+
import { addMethodChaining, nodeProxy } from '../tsl/TSLCore.js';
|
|
4
4
|
|
|
5
5
|
class VaryingNode extends Node {
|
|
6
6
|
|
|
@@ -97,8 +97,8 @@ class VaryingNode extends Node {
|
|
|
97
97
|
|
|
98
98
|
export default VaryingNode;
|
|
99
99
|
|
|
100
|
-
|
|
100
|
+
VaryingNode.type = /*@__PURE__*/ registerNode( 'Varying', VaryingNode );
|
|
101
101
|
|
|
102
|
-
|
|
102
|
+
export const varying = /*@__PURE__*/ nodeProxy( VaryingNode );
|
|
103
103
|
|
|
104
|
-
|
|
104
|
+
addMethodChaining( 'varying', varying );
|
|
@@ -1,12 +1,14 @@
|
|
|
1
1
|
import TempNode from '../core/TempNode.js';
|
|
2
|
-
import { nodeObject,
|
|
2
|
+
import { nodeObject, Fn, float, vec4 } from '../tsl/TSLBase.js';
|
|
3
3
|
import { NodeUpdateType } from '../core/constants.js';
|
|
4
|
-
import { uv } from '../accessors/
|
|
4
|
+
import { uv } from '../accessors/UV.js';
|
|
5
5
|
import { texture } from '../accessors/TextureNode.js';
|
|
6
6
|
import { passTexture } from './PassNode.js';
|
|
7
7
|
import { uniform } from '../core/UniformNode.js';
|
|
8
8
|
import { sign, max } from '../math/MathNode.js';
|
|
9
|
+
import { convertToTexture } from '../utils/RTTNode.js';
|
|
9
10
|
import QuadMesh from '../../renderers/common/QuadMesh.js';
|
|
11
|
+
import NodeMaterial from '../../materials/nodes/NodeMaterial.js';
|
|
10
12
|
|
|
11
13
|
import { Vector2 } from '../../math/Vector2.js';
|
|
12
14
|
import { RenderTarget } from '../../core/RenderTarget.js';
|
|
@@ -98,7 +100,7 @@ class AfterImageNode extends TempNode {
|
|
|
98
100
|
|
|
99
101
|
const sampleTexture = ( uv ) => textureNode.uv( uv );
|
|
100
102
|
|
|
101
|
-
const when_gt =
|
|
103
|
+
const when_gt = Fn( ( [ x_immutable, y_immutable ] ) => {
|
|
102
104
|
|
|
103
105
|
const y = float( y_immutable ).toVar();
|
|
104
106
|
const x = vec4( x_immutable ).toVar();
|
|
@@ -107,7 +109,7 @@ class AfterImageNode extends TempNode {
|
|
|
107
109
|
|
|
108
110
|
} );
|
|
109
111
|
|
|
110
|
-
const afterImg =
|
|
112
|
+
const afterImg = Fn( () => {
|
|
111
113
|
|
|
112
114
|
const texelOld = vec4( textureNodeOld );
|
|
113
115
|
const texelNew = vec4( sampleTexture( uvNode ) );
|
|
@@ -119,7 +121,8 @@ class AfterImageNode extends TempNode {
|
|
|
119
121
|
|
|
120
122
|
//
|
|
121
123
|
|
|
122
|
-
const materialComposed = this._materialComposed || ( this._materialComposed =
|
|
124
|
+
const materialComposed = this._materialComposed || ( this._materialComposed = new NodeMaterial() );
|
|
125
|
+
materialComposed.name = 'AfterImage';
|
|
123
126
|
materialComposed.fragmentNode = afterImg();
|
|
124
127
|
|
|
125
128
|
_quadMeshComp.material = materialComposed;
|
|
@@ -144,9 +147,6 @@ class AfterImageNode extends TempNode {
|
|
|
144
147
|
|
|
145
148
|
}
|
|
146
149
|
|
|
147
|
-
export const afterImage = ( node, damp ) => nodeObject( new AfterImageNode(
|
|
148
|
-
|
|
149
|
-
addNodeElement( 'afterImage', afterImage );
|
|
150
|
+
export const afterImage = ( node, damp ) => nodeObject( new AfterImageNode( convertToTexture( node ), damp ) );
|
|
150
151
|
|
|
151
152
|
export default AfterImageNode;
|
|
152
|
-
|
|
@@ -0,0 +1,61 @@
|
|
|
1
|
+
import { Fn, nodeObject, vec4 } from '../tsl/TSLBase.js';
|
|
2
|
+
import { Matrix3 } from '../../math/Matrix3.js';
|
|
3
|
+
import { uniform } from '../core/UniformNode.js';
|
|
4
|
+
import { uv } from '../accessors/UV.js';
|
|
5
|
+
import { clamp, max } from '../math/MathNode.js';
|
|
6
|
+
import StereoCompositePassNode from './StereoCompositePassNode.js';
|
|
7
|
+
import NodeMaterial from '../../materials/nodes/NodeMaterial.js';
|
|
8
|
+
|
|
9
|
+
class AnaglyphPassNode extends StereoCompositePassNode {
|
|
10
|
+
|
|
11
|
+
constructor( scene, camera ) {
|
|
12
|
+
|
|
13
|
+
super( scene, camera );
|
|
14
|
+
|
|
15
|
+
this.isAnaglyphPassNode = true;
|
|
16
|
+
|
|
17
|
+
// Dubois matrices from https://citeseerx.ist.psu.edu/viewdoc/download?doi=10.1.1.7.6968&rep=rep1&type=pdf#page=4
|
|
18
|
+
|
|
19
|
+
this._colorMatrixLeft = uniform( new Matrix3().fromArray( [
|
|
20
|
+
0.456100, - 0.0400822, - 0.0152161,
|
|
21
|
+
0.500484, - 0.0378246, - 0.0205971,
|
|
22
|
+
0.176381, - 0.0157589, - 0.00546856
|
|
23
|
+
] ) );
|
|
24
|
+
|
|
25
|
+
this._colorMatrixRight = uniform( new Matrix3().fromArray( [
|
|
26
|
+
- 0.0434706, 0.378476, - 0.0721527,
|
|
27
|
+
- 0.0879388, 0.73364, - 0.112961,
|
|
28
|
+
- 0.00155529, - 0.0184503, 1.2264
|
|
29
|
+
] ) );
|
|
30
|
+
|
|
31
|
+
}
|
|
32
|
+
|
|
33
|
+
setup( builder ) {
|
|
34
|
+
|
|
35
|
+
const uvNode = uv();
|
|
36
|
+
|
|
37
|
+
const anaglyph = Fn( () => {
|
|
38
|
+
|
|
39
|
+
const colorL = this._mapLeft.uv( uvNode );
|
|
40
|
+
const colorR = this._mapRight.uv( uvNode );
|
|
41
|
+
|
|
42
|
+
const color = clamp( this._colorMatrixLeft.mul( colorL.rgb ).add( this._colorMatrixRight.mul( colorR.rgb ) ) );
|
|
43
|
+
|
|
44
|
+
return vec4( color.rgb, max( colorL.a, colorR.a ) );
|
|
45
|
+
|
|
46
|
+
} );
|
|
47
|
+
|
|
48
|
+
const material = this._material || ( this._material = new NodeMaterial() );
|
|
49
|
+
material.fragmentNode = anaglyph().context( builder.getSharedContext() );
|
|
50
|
+
material.name = 'Anaglyph';
|
|
51
|
+
material.needsUpdate = true;
|
|
52
|
+
|
|
53
|
+
return super.setup( builder );
|
|
54
|
+
|
|
55
|
+
}
|
|
56
|
+
|
|
57
|
+
}
|
|
58
|
+
|
|
59
|
+
export default AnaglyphPassNode;
|
|
60
|
+
|
|
61
|
+
export const anaglyphPass = ( scene, camera ) => nodeObject( new AnaglyphPassNode( scene, camera ) );
|
|
@@ -1,12 +1,14 @@
|
|
|
1
1
|
import TempNode from '../core/TempNode.js';
|
|
2
|
-
import { nodeObject,
|
|
3
|
-
import {
|
|
2
|
+
import { nodeObject, Fn, float, vec2, vec3 } from '../tsl/TSLBase.js';
|
|
3
|
+
import { Loop } from '../utils/LoopNode.js';
|
|
4
4
|
import { uniform } from '../core/UniformNode.js';
|
|
5
5
|
import { NodeUpdateType } from '../core/constants.js';
|
|
6
|
-
import { threshold } from './
|
|
7
|
-
import { uv } from '../accessors/
|
|
6
|
+
import { threshold } from './ColorAdjustment.js';
|
|
7
|
+
import { uv } from '../accessors/UV.js';
|
|
8
8
|
import { passTexture } from './PassNode.js';
|
|
9
|
+
import { convertToTexture } from '../utils/RTTNode.js';
|
|
9
10
|
import QuadMesh from '../../renderers/common/QuadMesh.js';
|
|
11
|
+
import NodeMaterial from '../../materials/nodes/NodeMaterial.js';
|
|
10
12
|
|
|
11
13
|
import { Vector2 } from '../../math/Vector2.js';
|
|
12
14
|
import { RenderTarget } from '../../core/RenderTarget.js';
|
|
@@ -90,14 +92,14 @@ class AnamorphicNode extends TempNode {
|
|
|
90
92
|
|
|
91
93
|
const sampleTexture = ( uv ) => textureNode.uv( uv );
|
|
92
94
|
|
|
93
|
-
const anamorph =
|
|
95
|
+
const anamorph = Fn( () => {
|
|
94
96
|
|
|
95
97
|
const samples = this.samples;
|
|
96
98
|
const halfSamples = Math.floor( samples / 2 );
|
|
97
99
|
|
|
98
100
|
const total = vec3( 0 ).toVar();
|
|
99
101
|
|
|
100
|
-
|
|
102
|
+
Loop( { start: - halfSamples, end: halfSamples }, ( { i } ) => {
|
|
101
103
|
|
|
102
104
|
const softness = float( i ).abs().div( halfSamples ).oneMinus();
|
|
103
105
|
|
|
@@ -115,7 +117,8 @@ class AnamorphicNode extends TempNode {
|
|
|
115
117
|
|
|
116
118
|
//
|
|
117
119
|
|
|
118
|
-
const material = this._material || ( this._material =
|
|
120
|
+
const material = this._material || ( this._material = new NodeMaterial() );
|
|
121
|
+
material.name = 'Anamorphic';
|
|
119
122
|
material.fragmentNode = anamorph();
|
|
120
123
|
|
|
121
124
|
//
|
|
@@ -137,9 +140,6 @@ class AnamorphicNode extends TempNode {
|
|
|
137
140
|
|
|
138
141
|
}
|
|
139
142
|
|
|
140
|
-
export const anamorphic = ( node, threshold = .9, scale = 3, samples = 32 ) => nodeObject( new AnamorphicNode(
|
|
141
|
-
|
|
142
|
-
addNodeElement( 'anamorphic', anamorphic );
|
|
143
|
+
export const anamorphic = ( node, threshold = .9, scale = 3, samples = 32 ) => nodeObject( new AnamorphicNode( convertToTexture( node ), nodeObject( threshold ), nodeObject( scale ), samples ) );
|
|
143
144
|
|
|
144
145
|
export default AnamorphicNode;
|
|
145
|
-
|
|
@@ -0,0 +1,26 @@
|
|
|
1
|
+
import { float, Fn, vec3, vec4 } from '../tsl/TSLBase.js';
|
|
2
|
+
import { min, max, mix } from '../math/MathNode.js';
|
|
3
|
+
import { luminance } from './ColorAdjustment.js';
|
|
4
|
+
|
|
5
|
+
export const bleach = /*@__PURE__*/ Fn( ( [ color, opacity = 1 ] ) => {
|
|
6
|
+
|
|
7
|
+
const base = color;
|
|
8
|
+
const lum = luminance( base.rgb );
|
|
9
|
+
const blend = vec3( lum );
|
|
10
|
+
|
|
11
|
+
const L = min( 1.0, max( 0.0, float( 10.0 ).mul( lum.sub( 0.45 ) ) ) );
|
|
12
|
+
|
|
13
|
+
const result1 = blend.mul( base.rgb ).mul( 2.0 );
|
|
14
|
+
const result2 = float( 2.0 ).mul( blend.oneMinus() ).mul( base.rgb.oneMinus() ).oneMinus();
|
|
15
|
+
|
|
16
|
+
const newColor = mix( result1, result2, L );
|
|
17
|
+
|
|
18
|
+
const A2 = base.a.mul( opacity );
|
|
19
|
+
|
|
20
|
+
const mixRGB = A2.mul( newColor.rgb );
|
|
21
|
+
|
|
22
|
+
mixRGB.addAssign( base.rgb.mul( A2.oneMinus() ) );
|
|
23
|
+
|
|
24
|
+
return vec4( mixRGB, base.a );
|
|
25
|
+
|
|
26
|
+
} );
|
|
@@ -0,0 +1,54 @@
|
|
|
1
|
+
import { Fn } from '../tsl/TSLBase.js';
|
|
2
|
+
import { mix, min, step } from '../math/MathNode.js';
|
|
3
|
+
|
|
4
|
+
export const burn = /*@__PURE__*/ Fn( ( [ base, blend ] ) => {
|
|
5
|
+
|
|
6
|
+
return min( 1.0, base.oneMinus().div( blend ) ).oneMinus();
|
|
7
|
+
|
|
8
|
+
} ).setLayout( {
|
|
9
|
+
name: 'burnBlend',
|
|
10
|
+
type: 'vec3',
|
|
11
|
+
inputs: [
|
|
12
|
+
{ name: 'base', type: 'vec3' },
|
|
13
|
+
{ name: 'blend', type: 'vec3' }
|
|
14
|
+
]
|
|
15
|
+
} );
|
|
16
|
+
|
|
17
|
+
export const dodge = /*@__PURE__*/ Fn( ( [ base, blend ] ) => {
|
|
18
|
+
|
|
19
|
+
return min( base.div( blend.oneMinus() ), 1.0 );
|
|
20
|
+
|
|
21
|
+
} ).setLayout( {
|
|
22
|
+
name: 'dodgeBlend',
|
|
23
|
+
type: 'vec3',
|
|
24
|
+
inputs: [
|
|
25
|
+
{ name: 'base', type: 'vec3' },
|
|
26
|
+
{ name: 'blend', type: 'vec3' }
|
|
27
|
+
]
|
|
28
|
+
} );
|
|
29
|
+
|
|
30
|
+
export const screen = /*@__PURE__*/ Fn( ( [ base, blend ] ) => {
|
|
31
|
+
|
|
32
|
+
return base.oneMinus().mul( blend.oneMinus() ).oneMinus();
|
|
33
|
+
|
|
34
|
+
} ).setLayout( {
|
|
35
|
+
name: 'screenBlend',
|
|
36
|
+
type: 'vec3',
|
|
37
|
+
inputs: [
|
|
38
|
+
{ name: 'base', type: 'vec3' },
|
|
39
|
+
{ name: 'blend', type: 'vec3' }
|
|
40
|
+
]
|
|
41
|
+
} );
|
|
42
|
+
|
|
43
|
+
export const overlay = /*@__PURE__*/ Fn( ( [ base, blend ] ) => {
|
|
44
|
+
|
|
45
|
+
return mix( base.mul( 2.0 ).mul( blend ), base.oneMinus().mul( 2.0 ).mul( blend.oneMinus() ).oneMinus(), step( 0.5, base ) );
|
|
46
|
+
|
|
47
|
+
} ).setLayout( {
|
|
48
|
+
name: 'overlayBlend',
|
|
49
|
+
type: 'vec3',
|
|
50
|
+
inputs: [
|
|
51
|
+
{ name: 'base', type: 'vec3' },
|
|
52
|
+
{ name: 'blend', type: 'vec3' }
|
|
53
|
+
]
|
|
54
|
+
} );
|
|
@@ -1,21 +1,22 @@
|
|
|
1
1
|
import TempNode from '../core/TempNode.js';
|
|
2
|
-
import {
|
|
2
|
+
import { Fn, nodeObject, float, vec4, int } from '../tsl/TSLBase.js';
|
|
3
3
|
import { mix, smoothstep } from '../math/MathNode.js';
|
|
4
|
-
import { luminance } from './
|
|
4
|
+
import { luminance } from './ColorAdjustment.js';
|
|
5
5
|
import { uniform } from '../core/UniformNode.js';
|
|
6
|
-
import {
|
|
7
|
-
import { uv } from '../accessors/
|
|
6
|
+
import { uniformArray } from '../accessors/UniformArrayNode.js';
|
|
7
|
+
import { uv } from '../accessors/UV.js';
|
|
8
8
|
import { Color } from '../../math/Color.js';
|
|
9
9
|
import { passTexture } from './PassNode.js';
|
|
10
10
|
import { RenderTarget } from '../../core/RenderTarget.js';
|
|
11
11
|
import { HalfFloatType } from '../../constants.js';
|
|
12
12
|
import { NodeUpdateType } from '../core/constants.js';
|
|
13
13
|
import { Vector2 } from '../../math/Vector2.js';
|
|
14
|
-
import {
|
|
14
|
+
import { Loop } from '../utils/LoopNode.js';
|
|
15
15
|
import { add } from '../math/OperatorNode.js';
|
|
16
16
|
import QuadMesh from '../../renderers/common/QuadMesh.js';
|
|
17
17
|
import { texture } from '../accessors/TextureNode.js';
|
|
18
18
|
import { Vector3 } from '../../math/Vector3.js';
|
|
19
|
+
import NodeMaterial from '../../materials/nodes/NodeMaterial.js';
|
|
19
20
|
|
|
20
21
|
const _quadMesh = /*@__PURE__*/ new QuadMesh();
|
|
21
22
|
|
|
@@ -183,7 +184,7 @@ class BloomNode extends TempNode {
|
|
|
183
184
|
|
|
184
185
|
// luminosity high pass material
|
|
185
186
|
|
|
186
|
-
const luminosityHighPass =
|
|
187
|
+
const luminosityHighPass = Fn( () => {
|
|
187
188
|
|
|
188
189
|
const texel = this.inputNode;
|
|
189
190
|
const v = luminance( texel.rgb );
|
|
@@ -194,8 +195,9 @@ class BloomNode extends TempNode {
|
|
|
194
195
|
|
|
195
196
|
} );
|
|
196
197
|
|
|
197
|
-
this._highPassFilterMaterial = this._highPassFilterMaterial ||
|
|
198
|
+
this._highPassFilterMaterial = this._highPassFilterMaterial || new NodeMaterial();
|
|
198
199
|
this._highPassFilterMaterial.fragmentNode = luminosityHighPass().context( builder.getSharedContext() );
|
|
200
|
+
this._highPassFilterMaterial.name = 'Bloom_highPass';
|
|
199
201
|
this._highPassFilterMaterial.needsUpdate = true;
|
|
200
202
|
|
|
201
203
|
// gaussian blur materials
|
|
@@ -210,10 +212,10 @@ class BloomNode extends TempNode {
|
|
|
210
212
|
|
|
211
213
|
// composite material
|
|
212
214
|
|
|
213
|
-
const bloomFactors =
|
|
214
|
-
const bloomTintColors =
|
|
215
|
+
const bloomFactors = uniformArray( [ 1.0, 0.8, 0.6, 0.4, 0.2 ] );
|
|
216
|
+
const bloomTintColors = uniformArray( [ new Vector3( 1, 1, 1 ), new Vector3( 1, 1, 1 ), new Vector3( 1, 1, 1 ), new Vector3( 1, 1, 1 ), new Vector3( 1, 1, 1 ) ] );
|
|
215
217
|
|
|
216
|
-
const lerpBloomFactor =
|
|
218
|
+
const lerpBloomFactor = Fn( ( [ factor, radius ] ) => {
|
|
217
219
|
|
|
218
220
|
const mirrorFactor = float( 1.2 ).sub( factor );
|
|
219
221
|
return mix( factor, mirrorFactor, radius );
|
|
@@ -228,7 +230,7 @@ class BloomNode extends TempNode {
|
|
|
228
230
|
} );
|
|
229
231
|
|
|
230
232
|
|
|
231
|
-
const compositePass =
|
|
233
|
+
const compositePass = Fn( () => {
|
|
232
234
|
|
|
233
235
|
const color0 = lerpBloomFactor( bloomFactors.element( 0 ), this.radius ).mul( vec4( bloomTintColors.element( 0 ), 1.0 ) ).mul( this._textureNodeBlur0 );
|
|
234
236
|
const color1 = lerpBloomFactor( bloomFactors.element( 1 ), this.radius ).mul( vec4( bloomTintColors.element( 1 ), 1.0 ) ).mul( this._textureNodeBlur1 );
|
|
@@ -242,8 +244,9 @@ class BloomNode extends TempNode {
|
|
|
242
244
|
|
|
243
245
|
} );
|
|
244
246
|
|
|
245
|
-
this._compositeMaterial = this._compositeMaterial ||
|
|
247
|
+
this._compositeMaterial = this._compositeMaterial || new NodeMaterial();
|
|
246
248
|
this._compositeMaterial.fragmentNode = compositePass().context( builder.getSharedContext() );
|
|
249
|
+
this._compositeMaterial.name = 'Bloom_comp';
|
|
247
250
|
this._compositeMaterial.needsUpdate = true;
|
|
248
251
|
|
|
249
252
|
//
|
|
@@ -283,19 +286,19 @@ class BloomNode extends TempNode {
|
|
|
283
286
|
//
|
|
284
287
|
|
|
285
288
|
const colorTexture = texture();
|
|
286
|
-
const gaussianCoefficients =
|
|
289
|
+
const gaussianCoefficients = uniformArray( coefficients );
|
|
287
290
|
const invSize = uniform( new Vector2() );
|
|
288
291
|
const direction = uniform( new Vector2( 0.5, 0.5 ) );
|
|
289
292
|
|
|
290
293
|
const uvNode = uv();
|
|
291
294
|
const sampleTexel = ( uv ) => colorTexture.uv( uv );
|
|
292
295
|
|
|
293
|
-
const seperableBlurPass =
|
|
296
|
+
const seperableBlurPass = Fn( () => {
|
|
294
297
|
|
|
295
298
|
const weightSum = gaussianCoefficients.element( 0 ).toVar();
|
|
296
299
|
const diffuseSum = sampleTexel( uvNode ).rgb.mul( weightSum ).toVar();
|
|
297
300
|
|
|
298
|
-
|
|
301
|
+
Loop( { start: int( 1 ), end: int( kernelRadius ), type: 'int', condition: '<' }, ( { i } ) => {
|
|
299
302
|
|
|
300
303
|
const x = float( i );
|
|
301
304
|
const w = gaussianCoefficients.element( i );
|
|
@@ -305,14 +308,15 @@ class BloomNode extends TempNode {
|
|
|
305
308
|
diffuseSum.addAssign( add( sample1, sample2 ).mul( w ) );
|
|
306
309
|
weightSum.addAssign( float( 2.0 ).mul( w ) );
|
|
307
310
|
|
|
308
|
-
}
|
|
311
|
+
} );
|
|
309
312
|
|
|
310
313
|
return vec4( diffuseSum.div( weightSum ), 1.0 );
|
|
311
314
|
|
|
312
315
|
} );
|
|
313
316
|
|
|
314
|
-
const seperableBlurMaterial =
|
|
317
|
+
const seperableBlurMaterial = new NodeMaterial();
|
|
315
318
|
seperableBlurMaterial.fragmentNode = seperableBlurPass().context( builder.getSharedContext() );
|
|
319
|
+
seperableBlurMaterial.name = 'Bloom_seperable';
|
|
316
320
|
seperableBlurMaterial.needsUpdate = true;
|
|
317
321
|
|
|
318
322
|
// uniforms
|
|
@@ -328,6 +332,4 @@ class BloomNode extends TempNode {
|
|
|
328
332
|
|
|
329
333
|
export const bloom = ( node, strength, radius, threshold ) => nodeObject( new BloomNode( nodeObject( node ), strength, radius, threshold ) );
|
|
330
334
|
|
|
331
|
-
addNodeElement( 'bloom', bloom );
|
|
332
|
-
|
|
333
335
|
export default BloomNode;
|
|
@@ -1,15 +1,14 @@
|
|
|
1
1
|
import TempNode from '../core/TempNode.js';
|
|
2
|
-
import {
|
|
3
|
-
import {
|
|
4
|
-
import {
|
|
5
|
-
import { positionView } from '../accessors/PositionNode.js';
|
|
2
|
+
import { uv } from '../accessors/UV.js';
|
|
3
|
+
import { normalView } from '../accessors/Normal.js';
|
|
4
|
+
import { positionView } from '../accessors/Position.js';
|
|
6
5
|
import { faceDirection } from './FrontFacingNode.js';
|
|
7
|
-
import {
|
|
6
|
+
import { Fn, nodeProxy, float, vec2 } from '../tsl/TSLBase.js';
|
|
8
7
|
|
|
9
8
|
// Bump Mapping Unparametrized Surfaces on the GPU by Morten S. Mikkelsen
|
|
10
9
|
// https://mmikk.github.io/papers3d/mm_sfgrad_bump.pdf
|
|
11
10
|
|
|
12
|
-
const dHdxy_fwd =
|
|
11
|
+
const dHdxy_fwd = Fn( ( { textureNode, bumpScale } ) => {
|
|
13
12
|
|
|
14
13
|
// It's used to preserve the same TextureNode instance
|
|
15
14
|
const sampleTexture = ( callback ) => textureNode.cache().context( { getUV: ( texNode ) => callback( texNode.uvNode || uv() ), forceUVContext: true } );
|
|
@@ -25,7 +24,7 @@ const dHdxy_fwd = tslFn( ( { textureNode, bumpScale } ) => {
|
|
|
25
24
|
|
|
26
25
|
// Evaluate the derivative of the height w.r.t. screen-space using forward differencing (listing 2)
|
|
27
26
|
|
|
28
|
-
const perturbNormalArb =
|
|
27
|
+
const perturbNormalArb = Fn( ( inputs ) => {
|
|
29
28
|
|
|
30
29
|
const { surf_pos, surf_norm, dHdxy } = inputs;
|
|
31
30
|
|
|
@@ -73,8 +72,4 @@ class BumpMapNode extends TempNode {
|
|
|
73
72
|
|
|
74
73
|
export default BumpMapNode;
|
|
75
74
|
|
|
76
|
-
export const bumpMap = nodeProxy( BumpMapNode );
|
|
77
|
-
|
|
78
|
-
addNodeElement( 'bumpMap', bumpMap );
|
|
79
|
-
|
|
80
|
-
addNodeClass( 'BumpMapNode', BumpMapNode );
|
|
75
|
+
export const bumpMap = /*@__PURE__*/ nodeProxy( BumpMapNode );
|
|
@@ -0,0 +1,46 @@
|
|
|
1
|
+
import { dot, mix } from '../math/MathNode.js';
|
|
2
|
+
import { add } from '../math/OperatorNode.js';
|
|
3
|
+
import { Fn, float, vec3 } from '../tsl/TSLBase.js';
|
|
4
|
+
import { ColorManagement } from '../../math/ColorManagement.js';
|
|
5
|
+
import { Vector3 } from '../../math/Vector3.js';
|
|
6
|
+
|
|
7
|
+
export const grayscale = /*@__PURE__*/ Fn( ( [ color ] ) => {
|
|
8
|
+
|
|
9
|
+
return luminance( color.rgb );
|
|
10
|
+
|
|
11
|
+
} );
|
|
12
|
+
|
|
13
|
+
export const saturation = /*@__PURE__*/ Fn( ( [ color, adjustment = float( 1 ) ] ) => {
|
|
14
|
+
|
|
15
|
+
return adjustment.mix( luminance( color.rgb ), color.rgb );
|
|
16
|
+
|
|
17
|
+
} );
|
|
18
|
+
|
|
19
|
+
export const vibrance = /*@__PURE__*/ Fn( ( [ color, adjustment = float( 1 ) ] ) => {
|
|
20
|
+
|
|
21
|
+
const average = add( color.r, color.g, color.b ).div( 3.0 );
|
|
22
|
+
|
|
23
|
+
const mx = color.r.max( color.g.max( color.b ) );
|
|
24
|
+
const amt = mx.sub( average ).mul( adjustment ).mul( - 3.0 );
|
|
25
|
+
|
|
26
|
+
return mix( color.rgb, mx, amt );
|
|
27
|
+
|
|
28
|
+
} );
|
|
29
|
+
|
|
30
|
+
export const hue = /*@__PURE__*/ Fn( ( [ color, adjustment = float( 1 ) ] ) => {
|
|
31
|
+
|
|
32
|
+
const k = vec3( 0.57735, 0.57735, 0.57735 );
|
|
33
|
+
|
|
34
|
+
const cosAngle = adjustment.cos();
|
|
35
|
+
|
|
36
|
+
return vec3( color.rgb.mul( cosAngle ).add( k.cross( color.rgb ).mul( adjustment.sin() ).add( k.mul( dot( k, color.rgb ).mul( cosAngle.oneMinus() ) ) ) ) );
|
|
37
|
+
|
|
38
|
+
} );
|
|
39
|
+
|
|
40
|
+
const _luminanceCoefficients = /*@__PURE__*/ new Vector3();
|
|
41
|
+
export const luminance = (
|
|
42
|
+
color,
|
|
43
|
+
luminanceCoefficients = vec3( ... ColorManagement.getLuminanceCoefficients( _luminanceCoefficients ) )
|
|
44
|
+
) => dot( color, luminanceCoefficients );
|
|
45
|
+
|
|
46
|
+
export const threshold = ( color, threshold ) => mix( vec3( 0.0 ), color, luminance( color ).sub( threshold ).max( 0 ) );
|