three-stdlib 2.8.9 → 2.8.10
Sign up to get free protection for your applications and to get access to all the features.
- package/Nodes-607e9ed8.js +471 -0
- package/Nodes-627a8bdf.js +1 -0
- package/index.cjs.js +1 -1
- package/index.d.ts +0 -75
- package/index.js +70 -76
- package/loaders/NodeMaterialLoader.cjs.js +1 -1
- package/loaders/NodeMaterialLoader.js +2 -136
- package/nodes/Nodes.cjs.js +1 -1
- package/nodes/Nodes.js +203 -76
- package/nodes/ShaderNode.cjs.js +1 -0
- package/nodes/ShaderNode.js +308 -0
- package/nodes/accessors/BufferNode.cjs.js +1 -0
- package/nodes/accessors/BufferNode.js +18 -0
- package/nodes/accessors/CameraNode.cjs.js +1 -1
- package/nodes/accessors/CameraNode.js +32 -138
- package/nodes/accessors/CubeTextureNode.cjs.js +1 -0
- package/nodes/accessors/CubeTextureNode.js +53 -0
- package/nodes/accessors/MaterialNode.cjs.js +1 -0
- package/nodes/accessors/MaterialNode.js +80 -0
- package/nodes/accessors/MaterialReferenceNode.cjs.js +1 -0
- package/nodes/accessors/MaterialReferenceNode.js +16 -0
- package/nodes/accessors/ModelNode.cjs.js +1 -0
- package/nodes/accessors/ModelNode.js +10 -0
- package/nodes/accessors/ModelViewProjectionNode.cjs.js +1 -0
- package/nodes/accessors/ModelViewProjectionNode.js +22 -0
- package/nodes/accessors/NormalNode.cjs.js +1 -1
- package/nodes/accessors/NormalNode.js +48 -78
- package/nodes/accessors/Object3DNode.cjs.js +1 -0
- package/nodes/accessors/Object3DNode.js +85 -0
- package/nodes/accessors/PointUVNode.cjs.js +1 -0
- package/nodes/accessors/PointUVNode.js +16 -0
- package/nodes/accessors/PositionNode.cjs.js +1 -1
- package/nodes/accessors/PositionNode.js +49 -87
- package/nodes/accessors/ReferenceNode.cjs.js +1 -0
- package/nodes/accessors/ReferenceNode.js +43 -0
- package/nodes/accessors/ReflectNode.cjs.js +1 -1
- package/nodes/accessors/ReflectNode.js +35 -98
- package/nodes/accessors/SkinningNode.cjs.js +1 -0
- package/nodes/accessors/SkinningNode.js +59 -0
- package/nodes/accessors/TextureNode.cjs.js +1 -0
- package/nodes/accessors/TextureNode.js +68 -0
- package/nodes/accessors/UVNode.cjs.js +1 -1
- package/nodes/accessors/UVNode.js +20 -38
- package/nodes/core/ArrayUniformNode.cjs.js +1 -0
- package/nodes/core/ArrayUniformNode.js +17 -0
- package/nodes/core/AttributeNode.cjs.js +1 -1
- package/nodes/core/AttributeNode.js +31 -40
- package/nodes/core/BypassNode.cjs.js +1 -0
- package/nodes/core/BypassNode.js +28 -0
- package/nodes/core/CodeNode.cjs.js +1 -0
- package/nodes/core/CodeNode.js +35 -0
- package/nodes/core/ConstNode.cjs.js +1 -1
- package/nodes/core/ConstNode.js +10 -78
- package/nodes/core/ContextNode.cjs.js +1 -0
- package/nodes/core/ContextNode.js +26 -0
- package/nodes/core/ExpressionNode.cjs.js +1 -1
- package/nodes/core/ExpressionNode.js +19 -8
- package/nodes/core/FunctionCallNode.cjs.js +1 -1
- package/nodes/core/FunctionCallNode.js +31 -60
- package/nodes/core/FunctionNode.cjs.js +1 -1
- package/nodes/core/FunctionNode.js +45 -166
- package/nodes/core/InputNode.cjs.js +1 -1
- package/nodes/core/InputNode.js +43 -57
- package/nodes/core/Node.cjs.js +1 -1
- package/nodes/core/Node.js +155 -113
- package/nodes/core/NodeAttribute.cjs.js +1 -0
- package/nodes/core/NodeAttribute.js +11 -0
- package/nodes/core/NodeBuilder.cjs.js +1 -1
- package/nodes/core/NodeBuilder.js +422 -548
- package/nodes/core/NodeCode.cjs.js +1 -0
- package/nodes/core/NodeCode.js +13 -0
- package/nodes/core/NodeFrame.cjs.js +1 -1
- package/nodes/core/NodeFrame.js +34 -27
- package/nodes/core/NodeFunction.cjs.js +1 -0
- package/nodes/core/NodeFunction.js +17 -0
- package/nodes/core/NodeFunctionInput.cjs.js +1 -0
- package/nodes/core/NodeFunctionInput.js +14 -0
- package/nodes/core/NodeKeywords.cjs.js +1 -0
- package/nodes/core/NodeKeywords.js +54 -0
- package/nodes/core/NodeParser.cjs.js +1 -0
- package/nodes/core/NodeParser.js +8 -0
- package/nodes/core/NodeUniform.cjs.js +1 -1
- package/nodes/core/NodeUniform.js +18 -17
- package/nodes/core/NodeUtils.cjs.js +1 -1
- package/nodes/core/NodeUtils.js +55 -35
- package/nodes/core/NodeVar.cjs.js +1 -0
- package/nodes/core/NodeVar.js +11 -0
- package/nodes/core/NodeVary.cjs.js +1 -0
- package/nodes/core/NodeVary.js +11 -0
- package/nodes/core/PropertyNode.cjs.js +1 -0
- package/nodes/core/PropertyNode.js +26 -0
- package/nodes/core/TempNode.cjs.js +1 -1
- package/nodes/core/TempNode.js +21 -88
- package/nodes/core/UniformNode.cjs.js +1 -0
- package/nodes/core/UniformNode.js +28 -0
- package/nodes/core/VarNode.cjs.js +1 -1
- package/nodes/core/VarNode.js +28 -35
- package/nodes/core/VaryNode.cjs.js +1 -0
- package/nodes/core/VaryNode.js +38 -0
- package/nodes/core/constants.cjs.js +1 -0
- package/nodes/core/constants.js +11 -0
- package/nodes/display/ColorSpaceNode.cjs.js +1 -0
- package/nodes/display/ColorSpaceNode.js +67 -0
- package/nodes/display/NormalMapNode.cjs.js +1 -0
- package/nodes/display/NormalMapNode.js +71 -0
- package/nodes/fog/FogNode.cjs.js +1 -0
- package/nodes/fog/FogNode.js +18 -0
- package/nodes/fog/FogRangeNode.cjs.js +1 -0
- package/nodes/fog/FogRangeNode.js +20 -0
- package/nodes/functions/BSDFs.cjs.js +1 -0
- package/nodes/functions/BSDFs.js +121 -0
- package/nodes/functions/PhysicalMaterialFunctions.cjs.js +1 -0
- package/nodes/functions/PhysicalMaterialFunctions.js +57 -0
- package/nodes/lights/LightContextNode.cjs.js +1 -0
- package/nodes/lights/LightContextNode.js +43 -0
- package/nodes/lights/LightNode.cjs.js +1 -0
- package/nodes/lights/LightNode.js +61 -0
- package/nodes/lights/LightsNode.cjs.js +1 -0
- package/nodes/lights/LightsNode.js +77 -0
- package/nodes/loaders/NodeLoader.cjs.js +1 -0
- package/nodes/loaders/NodeLoader.js +80 -0
- package/nodes/loaders/NodeMaterialLoader.cjs.js +1 -0
- package/nodes/loaders/NodeMaterialLoader.js +29 -0
- package/nodes/loaders/NodeObjectLoader.cjs.js +1 -0
- package/nodes/loaders/NodeObjectLoader.js +49 -0
- package/nodes/materials/LineBasicNodeMaterial.cjs.js +1 -0
- package/nodes/materials/LineBasicNodeMaterial.js +31 -0
- package/nodes/materials/Materials.cjs.js +1 -0
- package/nodes/materials/Materials.js +27 -0
- package/nodes/materials/MeshBasicNodeMaterial.cjs.js +1 -0
- package/nodes/materials/MeshBasicNodeMaterial.js +32 -0
- package/nodes/materials/MeshStandardNodeMaterial.cjs.js +1 -1
- package/nodes/materials/MeshStandardNodeMaterial.js +41 -13
- package/nodes/materials/NodeMaterial.cjs.js +1 -1
- package/nodes/materials/NodeMaterial.js +67 -140
- package/nodes/materials/PointsNodeMaterial.cjs.js +1 -0
- package/nodes/materials/PointsNodeMaterial.js +34 -0
- package/nodes/math/CondNode.cjs.js +1 -1
- package/nodes/math/CondNode.js +33 -74
- package/nodes/math/MathNode.cjs.js +1 -1
- package/nodes/math/MathNode.js +193 -193
- package/nodes/math/OperatorNode.cjs.js +1 -1
- package/nodes/math/OperatorNode.js +116 -52
- package/nodes/parsers/GLSLNodeFunction.cjs.js +1 -0
- package/nodes/parsers/GLSLNodeFunction.js +101 -0
- package/nodes/parsers/GLSLNodeParser.cjs.js +1 -0
- package/nodes/parsers/GLSLNodeParser.js +13 -0
- package/nodes/parsers/WGSLNodeFunction.cjs.js +1 -0
- package/nodes/parsers/WGSLNodeFunction.js +71 -0
- package/nodes/parsers/WGSLNodeParser.cjs.js +1 -0
- package/nodes/parsers/WGSLNodeParser.js +13 -0
- package/nodes/procedural/CheckerNode.cjs.js +1 -1
- package/nodes/procedural/CheckerNode.js +22 -40
- package/nodes/utils/ArrayElementNode.cjs.js +1 -0
- package/nodes/utils/ArrayElementNode.js +22 -0
- package/nodes/utils/ConvertNode.cjs.js +1 -0
- package/nodes/utils/ConvertNode.js +29 -0
- package/nodes/utils/JoinNode.cjs.js +1 -1
- package/nodes/utils/JoinNode.js +19 -69
- package/nodes/utils/MatcapUVNode.cjs.js +1 -0
- package/nodes/utils/MatcapUVNode.js +18 -0
- package/nodes/utils/OscNode.cjs.js +1 -0
- package/nodes/utils/OscNode.js +55 -0
- package/nodes/utils/SplitNode.cjs.js +1 -0
- package/nodes/utils/SplitNode.js +58 -0
- package/nodes/utils/SpriteSheetUVNode.cjs.js +1 -0
- package/nodes/utils/SpriteSheetUVNode.js +39 -0
- package/nodes/utils/TimerNode.cjs.js +1 -1
- package/nodes/utils/TimerNode.js +38 -56
- package/package.json +1 -1
- package/Nodes-894ac9dc.js +0 -1
- package/Nodes-af575af7.js +0 -157
- package/nodes/accessors/ColorsNode.cjs.js +0 -1
- package/nodes/accessors/ColorsNode.d.ts +0 -10
- package/nodes/accessors/ColorsNode.js +0 -40
- package/nodes/accessors/LightNode.cjs.js +0 -1
- package/nodes/accessors/LightNode.d.ts +0 -12
- package/nodes/accessors/LightNode.js +0 -41
- package/nodes/accessors/ResolutionNode.cjs.js +0 -1
- package/nodes/accessors/ResolutionNode.d.ts +0 -14
- package/nodes/accessors/ResolutionNode.js +0 -41
- package/nodes/accessors/ScreenUVNode.cjs.js +0 -1
- package/nodes/accessors/ScreenUVNode.d.ts +0 -11
- package/nodes/accessors/ScreenUVNode.js +0 -43
- package/nodes/core/NodeLib.cjs.js +0 -1
- package/nodes/core/NodeLib.d.ts +0 -22
- package/nodes/core/NodeLib.js +0 -37
- package/nodes/core/StructNode.cjs.js +0 -1
- package/nodes/core/StructNode.d.ts +0 -19
- package/nodes/core/StructNode.js +0 -72
- package/nodes/effects/BlurNode.cjs.js +0 -1
- package/nodes/effects/BlurNode.d.ts +0 -31
- package/nodes/effects/BlurNode.js +0 -100
- package/nodes/effects/ColorAdjustmentNode.cjs.js +0 -1
- package/nodes/effects/ColorAdjustmentNode.d.ts +0 -27
- package/nodes/effects/ColorAdjustmentNode.js +0 -73
- package/nodes/effects/LuminanceNode.cjs.js +0 -1
- package/nodes/effects/LuminanceNode.d.ts +0 -18
- package/nodes/effects/LuminanceNode.js +0 -46
- package/nodes/inputs/BoolNode.cjs.js +0 -1
- package/nodes/inputs/BoolNode.d.ts +0 -19
- package/nodes/inputs/BoolNode.js +0 -36
- package/nodes/inputs/ColorNode.cjs.js +0 -1
- package/nodes/inputs/ColorNode.d.ts +0 -21
- package/nodes/inputs/ColorNode.js +0 -41
- package/nodes/inputs/CubeTextureNode.cjs.js +0 -1
- package/nodes/inputs/CubeTextureNode.d.ts +0 -17
- package/nodes/inputs/CubeTextureNode.js +0 -79
- package/nodes/inputs/FloatNode.cjs.js +0 -1
- package/nodes/inputs/FloatNode.d.ts +0 -19
- package/nodes/inputs/FloatNode.js +0 -36
- package/nodes/inputs/IntNode.cjs.js +0 -1
- package/nodes/inputs/IntNode.d.ts +0 -19
- package/nodes/inputs/IntNode.js +0 -36
- package/nodes/inputs/Matrix3Node.cjs.js +0 -1
- package/nodes/inputs/Matrix3Node.d.ts +0 -22
- package/nodes/inputs/Matrix3Node.js +0 -46
- package/nodes/inputs/Matrix4Node.cjs.js +0 -1
- package/nodes/inputs/Matrix4Node.d.ts +0 -22
- package/nodes/inputs/Matrix4Node.js +0 -46
- package/nodes/inputs/PropertyNode.cjs.js +0 -1
- package/nodes/inputs/PropertyNode.d.ts +0 -10
- package/nodes/inputs/PropertyNode.js +0 -35
- package/nodes/inputs/RTTNode.cjs.js +0 -1
- package/nodes/inputs/RTTNode.d.ts +0 -27
- package/nodes/inputs/RTTNode.js +0 -103
- package/nodes/inputs/ReflectorNode.cjs.js +0 -1
- package/nodes/inputs/ReflectorNode.d.ts +0 -21
- package/nodes/inputs/ReflectorNode.js +0 -60
- package/nodes/inputs/ScreenNode.cjs.js +0 -1
- package/nodes/inputs/ScreenNode.d.ts +0 -11
- package/nodes/inputs/ScreenNode.js +0 -20
- package/nodes/inputs/TextureNode.cjs.js +0 -1
- package/nodes/inputs/TextureNode.d.ts +0 -20
- package/nodes/inputs/TextureNode.js +0 -83
- package/nodes/inputs/Vector2Node.cjs.js +0 -1
- package/nodes/inputs/Vector2Node.d.ts +0 -21
- package/nodes/inputs/Vector2Node.js +0 -40
- package/nodes/inputs/Vector3Node.cjs.js +0 -1
- package/nodes/inputs/Vector3Node.d.ts +0 -21
- package/nodes/inputs/Vector3Node.js +0 -41
- package/nodes/inputs/Vector4Node.cjs.js +0 -1
- package/nodes/inputs/Vector4Node.d.ts +0 -21
- package/nodes/inputs/Vector4Node.js +0 -42
- package/nodes/materials/BasicNodeMaterial.cjs.js +0 -1
- package/nodes/materials/BasicNodeMaterial.d.ts +0 -11
- package/nodes/materials/BasicNodeMaterial.js +0 -15
- package/nodes/materials/PhongNodeMaterial.cjs.js +0 -1
- package/nodes/materials/PhongNodeMaterial.d.ts +0 -21
- package/nodes/materials/PhongNodeMaterial.js +0 -15
- package/nodes/materials/SpriteNodeMaterial.cjs.js +0 -1
- package/nodes/materials/SpriteNodeMaterial.d.ts +0 -12
- package/nodes/materials/SpriteNodeMaterial.js +0 -15
- package/nodes/materials/StandardNodeMaterial.cjs.js +0 -1
- package/nodes/materials/StandardNodeMaterial.d.ts +0 -25
- package/nodes/materials/StandardNodeMaterial.js +0 -15
- package/nodes/materials/nodes/BasicNode.cjs.js +0 -1
- package/nodes/materials/nodes/BasicNode.d.ts +0 -15
- package/nodes/materials/nodes/BasicNode.js +0 -91
- package/nodes/materials/nodes/MeshStandardNode.cjs.js +0 -1
- package/nodes/materials/nodes/MeshStandardNode.d.ts +0 -25
- package/nodes/materials/nodes/MeshStandardNode.js +0 -81
- package/nodes/materials/nodes/PhongNode.cjs.js +0 -1
- package/nodes/materials/nodes/PhongNode.d.ts +0 -14
- package/nodes/materials/nodes/PhongNode.js +0 -212
- package/nodes/materials/nodes/RawNode.cjs.js +0 -1
- package/nodes/materials/nodes/RawNode.d.ts +0 -10
- package/nodes/materials/nodes/RawNode.js +0 -42
- package/nodes/materials/nodes/SpriteNode.cjs.js +0 -1
- package/nodes/materials/nodes/SpriteNode.d.ts +0 -13
- package/nodes/materials/nodes/SpriteNode.js +0 -113
- package/nodes/materials/nodes/StandardNode.cjs.js +0 -1
- package/nodes/materials/nodes/StandardNode.d.ts +0 -15
- package/nodes/materials/nodes/StandardNode.js +0 -336
- package/nodes/misc/BumpMapNode.cjs.js +0 -1
- package/nodes/misc/BumpMapNode.d.ts +0 -21
- package/nodes/misc/BumpMapNode.js +0 -80
- package/nodes/misc/NormalMapNode.cjs.js +0 -1
- package/nodes/misc/NormalMapNode.d.ts +0 -19
- package/nodes/misc/NormalMapNode.js +0 -102
- package/nodes/misc/TextureCubeNode.cjs.js +0 -1
- package/nodes/misc/TextureCubeNode.d.ts +0 -21
- package/nodes/misc/TextureCubeNode.js +0 -52
- package/nodes/misc/TextureCubeUVNode.cjs.js +0 -1
- package/nodes/misc/TextureCubeUVNode.d.ts +0 -18
- package/nodes/misc/TextureCubeUVNode.js +0 -229
- package/nodes/postprocessing/NodePass.cjs.js +0 -1
- package/nodes/postprocessing/NodePass.d.ts +0 -15
- package/nodes/postprocessing/NodePass.js +0 -61
- package/nodes/postprocessing/NodePostProcessing.cjs.js +0 -1
- package/nodes/postprocessing/NodePostProcessing.d.ts +0 -26
- package/nodes/postprocessing/NodePostProcessing.js +0 -91
- package/nodes/procedural/NoiseNode.cjs.js +0 -1
- package/nodes/procedural/NoiseNode.d.ts +0 -17
- package/nodes/procedural/NoiseNode.js +0 -43
- package/nodes/utils/BypassNode.cjs.js +0 -1
- package/nodes/utils/BypassNode.d.ts +0 -11
- package/nodes/utils/BypassNode.js +0 -55
- package/nodes/utils/ColorSpaceNode.cjs.js +0 -1
- package/nodes/utils/ColorSpaceNode.d.ts +0 -55
- package/nodes/utils/ColorSpaceNode.js +0 -106
- package/nodes/utils/MaxMIPLevelNode.cjs.js +0 -1
- package/nodes/utils/MaxMIPLevelNode.d.ts +0 -11
- package/nodes/utils/MaxMIPLevelNode.js +0 -38
- package/nodes/utils/SpecularMIPLevelNode.cjs.js +0 -1
- package/nodes/utils/SpecularMIPLevelNode.d.ts +0 -17
- package/nodes/utils/SpecularMIPLevelNode.js +0 -61
- package/nodes/utils/SubSlotNode.cjs.js +0 -1
- package/nodes/utils/SubSlotNode.js +0 -53
- package/nodes/utils/SwitchNode.cjs.js +0 -1
- package/nodes/utils/SwitchNode.d.ts +0 -11
- package/nodes/utils/SwitchNode.js +0 -69
- package/nodes/utils/UVTransformNode.cjs.js +0 -1
- package/nodes/utils/UVTransformNode.d.ts +0 -15
- package/nodes/utils/UVTransformNode.js +0 -46
- package/nodes/utils/VelocityNode.cjs.js +0 -1
- package/nodes/utils/VelocityNode.d.ts +0 -28
- package/nodes/utils/VelocityNode.js +0 -115
package/nodes/core/VarNode.js
CHANGED
@@ -1,45 +1,38 @@
|
|
1
|
-
import
|
1
|
+
import Node from './Node.js';
|
2
2
|
|
3
|
-
|
4
|
-
|
5
|
-
|
6
|
-
|
7
|
-
|
8
|
-
|
9
|
-
VarNode.prototype.constructor = VarNode;
|
10
|
-
VarNode.prototype.nodeType = 'Var';
|
11
|
-
|
12
|
-
VarNode.prototype.getType = function (builder) {
|
13
|
-
return builder.getTypeByFormat(this.type);
|
14
|
-
};
|
15
|
-
|
16
|
-
VarNode.prototype.generate = function (builder, output) {
|
17
|
-
var varying = builder.getVar(this.uuid, this.type);
|
3
|
+
class VarNode extends Node {
|
4
|
+
constructor(node, name = null, nodeType = null) {
|
5
|
+
super(nodeType);
|
6
|
+
this.node = node;
|
7
|
+
this.name = name;
|
8
|
+
}
|
18
9
|
|
19
|
-
|
20
|
-
|
10
|
+
getHash(builder) {
|
11
|
+
return this.name || super.getHash(builder);
|
21
12
|
}
|
22
13
|
|
23
|
-
|
24
|
-
|
14
|
+
getNodeType(builder) {
|
15
|
+
return super.getNodeType(builder) || this.node.getNodeType(builder);
|
16
|
+
}
|
25
17
|
|
26
|
-
|
27
|
-
|
28
|
-
|
29
|
-
|
30
|
-
|
31
|
-
|
18
|
+
generate(builder) {
|
19
|
+
const type = builder.getVectorType(this.getNodeType(builder));
|
20
|
+
const node = this.node;
|
21
|
+
const name = this.name;
|
22
|
+
const snippet = node.build(builder, type);
|
23
|
+
const nodeVar = builder.getVarFromNode(this, type);
|
32
24
|
|
33
|
-
|
34
|
-
|
25
|
+
if (name !== null) {
|
26
|
+
nodeVar.name = name;
|
27
|
+
}
|
35
28
|
|
36
|
-
|
37
|
-
|
38
|
-
|
39
|
-
if (this.value) data.value = this.value.toJSON(meta).uuid;
|
29
|
+
const propertyName = builder.getPropertyName(nodeVar);
|
30
|
+
builder.addFlowCode(`${propertyName} = ${snippet}`);
|
31
|
+
return propertyName;
|
40
32
|
}
|
41
33
|
|
42
|
-
|
43
|
-
|
34
|
+
}
|
35
|
+
|
36
|
+
VarNode.prototype.isVarNode = true;
|
44
37
|
|
45
|
-
export
|
38
|
+
export default VarNode;
|
@@ -0,0 +1 @@
|
|
1
|
+
"use strict";var e=require("./Node.cjs.js"),t=require("./constants.cjs.js");require("./NodeUtils.cjs.js"),require("three");module.exports=class extends e{constructor(e,t=null){super(),this.node=e,this.name=t}getHash(e){return this.name||super.getHash(e)}getNodeType(e){return this.node.getNodeType(e)}generate(e){const r=this.getNodeType(e),s=this.node,o=this.name,a=e.getVaryFromNode(this,r);null!==o&&(a.name=o);const n=e.getPropertyName(a,t.NodeShaderStage.Vertex);return e.flowNodeFromShaderStage(t.NodeShaderStage.Vertex,s,r,n),e.getPropertyName(a)}};
|
@@ -0,0 +1,38 @@
|
|
1
|
+
import Node from './Node.js';
|
2
|
+
import { NodeShaderStage } from './constants.js';
|
3
|
+
|
4
|
+
class VaryNode extends Node {
|
5
|
+
constructor(node, name = null) {
|
6
|
+
super();
|
7
|
+
this.node = node;
|
8
|
+
this.name = name;
|
9
|
+
}
|
10
|
+
|
11
|
+
getHash(builder) {
|
12
|
+
return this.name || super.getHash(builder);
|
13
|
+
}
|
14
|
+
|
15
|
+
getNodeType(builder) {
|
16
|
+
// VaryNode is auto type
|
17
|
+
return this.node.getNodeType(builder);
|
18
|
+
}
|
19
|
+
|
20
|
+
generate(builder) {
|
21
|
+
const type = this.getNodeType(builder);
|
22
|
+
const node = this.node;
|
23
|
+
const name = this.name;
|
24
|
+
const nodeVary = builder.getVaryFromNode(this, type);
|
25
|
+
|
26
|
+
if (name !== null) {
|
27
|
+
nodeVary.name = name;
|
28
|
+
}
|
29
|
+
|
30
|
+
const propertyName = builder.getPropertyName(nodeVary, NodeShaderStage.Vertex); // force node run in vertex stage
|
31
|
+
|
32
|
+
builder.flowNodeFromShaderStage(NodeShaderStage.Vertex, node, type, propertyName);
|
33
|
+
return builder.getPropertyName(nodeVary);
|
34
|
+
}
|
35
|
+
|
36
|
+
}
|
37
|
+
|
38
|
+
export default VaryNode;
|
@@ -0,0 +1 @@
|
|
1
|
+
"use strict";Object.defineProperty(exports,"__esModule",{value:!0});exports.NodeShaderStage={Vertex:"vertex",Fragment:"fragment"},exports.NodeType={Boolean:"bool",Integer:"int",Float:"float",Vector2:"vec2",Vector3:"vec3",Vector4:"vec4",Matrix3:"mat3",Matrix4:"mat4"},exports.NodeUpdateType={None:"none",Frame:"frame",Object:"object"};
|
@@ -0,0 +1 @@
|
|
1
|
+
"use strict";Object.defineProperty(exports,"__esModule",{value:!0});var e=require("@babel/runtime/helpers/defineProperty"),r=require("../core/Node.cjs.js"),s=require("../ShaderNode.cjs.js"),o=require("three");function c(e){return e&&"object"==typeof e&&"default"in e?e:{default:e}}require("../core/constants.cjs.js"),require("../core/NodeUtils.cjs.js"),require("../core/PropertyNode.cjs.js"),require("../core/VarNode.cjs.js"),require("../core/AttributeNode.cjs.js"),require("../core/VaryNode.cjs.js"),require("../core/ConstNode.cjs.js"),require("../core/InputNode.cjs.js"),require("../core/UniformNode.cjs.js"),require("../accessors/BufferNode.cjs.js"),require("../accessors/PositionNode.cjs.js"),require("../accessors/ModelNode.cjs.js"),require("../accessors/Object3DNode.cjs.js"),require("../math/MathNode.cjs.js"),require("../core/TempNode.cjs.js"),require("../core/ExpressionNode.cjs.js"),require("../utils/JoinNode.cjs.js"),require("../utils/SplitNode.cjs.js"),require("../core/NodeBuilder.cjs.js"),require("../core/NodeUniform.cjs.js"),require("../core/NodeAttribute.cjs.js"),require("../core/NodeVary.cjs.js"),require("../core/NodeVar.cjs.js"),require("../core/NodeCode.cjs.js"),require("../core/NodeKeywords.cjs.js"),require("../math/OperatorNode.cjs.js"),require("../accessors/NormalNode.cjs.js"),require("../accessors/CameraNode.cjs.js"),require("../accessors/TextureNode.cjs.js"),require("../accessors/UVNode.cjs.js"),require("../math/CondNode.cjs.js"),require("../core/ContextNode.cjs.js"),require("../utils/ArrayElementNode.cjs.js"),require("../utils/ConvertNode.cjs.js");var i=c(e);const j=new s.ShaderNode((e=>e.value)),u=new s.ShaderNode((e=>{const{value:r}=e,o=r.rgb,c=s.sub(s.mul(s.pow(r.rgb,s.vec3(.41666)),1.055),s.vec3(.055)),i=s.mul(o,12.92),j=s.vec3(s.lessThanEqual(o,s.vec3(.0031308))),u=s.mix(c,i,j);return s.join(u.r,u.g,u.b,r.a)})),t={LinearToLinear:j,LinearTosRGB:u};class d extends r{constructor(e,r){super("vec4"),this.method=e,this.node=r}fromEncoding(e){let r=null;return e===o.LinearEncoding?r="Linear":e===o.sRGBEncoding&&(r="sRGB"),this.method="LinearTo"+r,this}generate(e){const r=this.getNodeType(e),s=this.method,o=this.node;if(s!==d.LINEAR_TO_LINEAR){return(0,t[s])({value:o}).build(e,r)}return o.build(e,r)}}i.default(d,"LINEAR_TO_LINEAR","LinearToLinear"),i.default(d,"LINEAR_TO_SRGB","LinearTosRGB"),exports.LinearToLinear=j,exports.LinearTosRGB=u,exports.default=d;
|
@@ -0,0 +1,67 @@
|
|
1
|
+
import _defineProperty from '@babel/runtime/helpers/esm/defineProperty';
|
2
|
+
import Node from '../core/Node.js';
|
3
|
+
import { ShaderNode, sub, mul, pow, vec3, lessThanEqual, mix, join } from '../ShaderNode.js';
|
4
|
+
import { LinearEncoding, sRGBEncoding } from 'three';
|
5
|
+
|
6
|
+
const LinearToLinear = new ShaderNode(inputs => {
|
7
|
+
return inputs.value;
|
8
|
+
});
|
9
|
+
const LinearTosRGB = new ShaderNode(inputs => {
|
10
|
+
const {
|
11
|
+
value
|
12
|
+
} = inputs;
|
13
|
+
const rgb = value.rgb;
|
14
|
+
const a = sub(mul(pow(value.rgb, vec3(0.41666)), 1.055), vec3(0.055));
|
15
|
+
const b = mul(rgb, 12.92);
|
16
|
+
const factor = vec3(lessThanEqual(rgb, vec3(0.0031308)));
|
17
|
+
const rgbResult = mix(a, b, factor);
|
18
|
+
return join(rgbResult.r, rgbResult.g, rgbResult.b, value.a);
|
19
|
+
});
|
20
|
+
const EncodingLib = {
|
21
|
+
LinearToLinear,
|
22
|
+
LinearTosRGB
|
23
|
+
};
|
24
|
+
|
25
|
+
class ColorSpaceNode extends Node {
|
26
|
+
constructor(method, node) {
|
27
|
+
super('vec4');
|
28
|
+
this.method = method;
|
29
|
+
this.node = node;
|
30
|
+
}
|
31
|
+
|
32
|
+
fromEncoding(encoding) {
|
33
|
+
let method = null;
|
34
|
+
|
35
|
+
if (encoding === LinearEncoding) {
|
36
|
+
method = 'Linear';
|
37
|
+
} else if (encoding === sRGBEncoding) {
|
38
|
+
method = 'sRGB';
|
39
|
+
}
|
40
|
+
|
41
|
+
this.method = 'LinearTo' + method;
|
42
|
+
return this;
|
43
|
+
}
|
44
|
+
|
45
|
+
generate(builder) {
|
46
|
+
const type = this.getNodeType(builder);
|
47
|
+
const method = this.method;
|
48
|
+
const node = this.node;
|
49
|
+
|
50
|
+
if (method !== ColorSpaceNode.LINEAR_TO_LINEAR) {
|
51
|
+
const encodingFunctionNode = EncodingLib[method];
|
52
|
+
return encodingFunctionNode({
|
53
|
+
value: node
|
54
|
+
}).build(builder, type);
|
55
|
+
} else {
|
56
|
+
return node.build(builder, type);
|
57
|
+
}
|
58
|
+
}
|
59
|
+
|
60
|
+
}
|
61
|
+
|
62
|
+
_defineProperty(ColorSpaceNode, "LINEAR_TO_LINEAR", 'LinearToLinear');
|
63
|
+
|
64
|
+
_defineProperty(ColorSpaceNode, "LINEAR_TO_SRGB", 'LinearTosRGB');
|
65
|
+
|
66
|
+
export default ColorSpaceNode;
|
67
|
+
export { LinearToLinear, LinearTosRGB };
|
@@ -0,0 +1 @@
|
|
1
|
+
"use strict";var e=require("../core/TempNode.cjs.js"),r=require("../accessors/ModelNode.cjs.js"),s=require("../ShaderNode.cjs.js"),o=require("three");require("../core/Node.cjs.js"),require("../core/constants.cjs.js"),require("../core/NodeUtils.cjs.js"),require("../accessors/Object3DNode.cjs.js"),require("@babel/runtime/helpers/defineProperty"),require("../core/UniformNode.cjs.js"),require("../core/InputNode.cjs.js"),require("../core/PropertyNode.cjs.js"),require("../core/VarNode.cjs.js"),require("../core/AttributeNode.cjs.js"),require("../core/VaryNode.cjs.js"),require("../core/ConstNode.cjs.js"),require("../accessors/BufferNode.cjs.js"),require("../accessors/PositionNode.cjs.js"),require("../math/MathNode.cjs.js"),require("../core/ExpressionNode.cjs.js"),require("../utils/JoinNode.cjs.js"),require("../utils/SplitNode.cjs.js"),require("../core/NodeBuilder.cjs.js"),require("../core/NodeUniform.cjs.js"),require("../core/NodeAttribute.cjs.js"),require("../core/NodeVary.cjs.js"),require("../core/NodeVar.cjs.js"),require("../core/NodeCode.cjs.js"),require("../core/NodeKeywords.cjs.js"),require("../math/OperatorNode.cjs.js"),require("../accessors/NormalNode.cjs.js"),require("../accessors/CameraNode.cjs.js"),require("../accessors/TextureNode.cjs.js"),require("../accessors/UVNode.cjs.js"),require("../math/CondNode.cjs.js"),require("../core/ContextNode.cjs.js"),require("../utils/ArrayElementNode.cjs.js"),require("../utils/ConvertNode.cjs.js");const c=new s.ShaderNode((e=>{const{eye_pos:r,surf_norm:o,mapN:c,faceDirection:u,uv:i}=e,j=s.dFdx(r.xyz),d=s.dFdy(r.xyz),t=s.dFdx(i.st),a=s.dFdy(i.st),n=o,N=s.cross(d,n),l=s.cross(n,j),q=s.add(s.mul(N,t.x),s.mul(l,a.x)),m=s.add(s.mul(N,t.y),s.mul(l,a.y)),p=s.max(s.dot(q,q),s.dot(m,m)),y=s.cond(s.equal(p,0),0,s.mul(u,s.inversesqrt(p)));return s.normalize(s.add(s.mul(q,s.mul(c.x,y)),s.mul(m,s.mul(c.y,y)),s.mul(n,c.z)))}));module.exports=class extends e{constructor(e,r=null){super("vec3"),this.node=e,this.scaleNode=r,this.normalMapType=o.TangentSpaceNormalMap}generate(e){const u=this.getNodeType(e),{normalMapType:i,scaleNode:j}=this,d=s.mul(this.node,2);let t=s.sub(d,1);if(null!==j){const e=s.mul(t.xy,j);t=s.join(e,t.z)}if(i===o.ObjectSpaceNormalMap){const o=s.mul(new r(r.NORMAL_MATRIX),t);return s.normalize(o).build(e,u)}if(i===o.TangentSpaceNormalMap){return c({eye_pos:s.positionView,surf_norm:s.normalView,mapN:t,faceDirection:1,uv:s.uv()}).build(e,u)}}};
|
@@ -0,0 +1,71 @@
|
|
1
|
+
import TempNode from '../core/TempNode.js';
|
2
|
+
import ModelNode from '../accessors/ModelNode.js';
|
3
|
+
import { ShaderNode, dFdx, dFdy, cross, add, mul, max, dot, cond, inversesqrt, equal, normalize, sub, join, positionView, normalView, uv } from '../ShaderNode.js';
|
4
|
+
import { TangentSpaceNormalMap, ObjectSpaceNormalMap } from 'three';
|
5
|
+
|
6
|
+
// http://www.thetenthplanet.de/archives/1180
|
7
|
+
|
8
|
+
const perturbNormal2ArbNode = new ShaderNode(inputs => {
|
9
|
+
const {
|
10
|
+
eye_pos,
|
11
|
+
surf_norm,
|
12
|
+
mapN,
|
13
|
+
faceDirection,
|
14
|
+
uv
|
15
|
+
} = inputs;
|
16
|
+
const q0 = dFdx(eye_pos.xyz);
|
17
|
+
const q1 = dFdy(eye_pos.xyz);
|
18
|
+
const st0 = dFdx(uv.st);
|
19
|
+
const st1 = dFdy(uv.st);
|
20
|
+
const N = surf_norm; // normalized
|
21
|
+
|
22
|
+
const q1perp = cross(q1, N);
|
23
|
+
const q0perp = cross(N, q0);
|
24
|
+
const T = add(mul(q1perp, st0.x), mul(q0perp, st1.x));
|
25
|
+
const B = add(mul(q1perp, st0.y), mul(q0perp, st1.y));
|
26
|
+
const det = max(dot(T, T), dot(B, B));
|
27
|
+
const scale = cond(equal(det, 0), 0, mul(faceDirection, inversesqrt(det)));
|
28
|
+
return normalize(add(mul(T, mul(mapN.x, scale)), mul(B, mul(mapN.y, scale)), mul(N, mapN.z)));
|
29
|
+
});
|
30
|
+
|
31
|
+
class NormalMapNode extends TempNode {
|
32
|
+
constructor(node, scaleNode = null) {
|
33
|
+
super('vec3');
|
34
|
+
this.node = node;
|
35
|
+
this.scaleNode = scaleNode;
|
36
|
+
this.normalMapType = TangentSpaceNormalMap;
|
37
|
+
}
|
38
|
+
|
39
|
+
generate(builder) {
|
40
|
+
const type = this.getNodeType(builder);
|
41
|
+
const {
|
42
|
+
normalMapType,
|
43
|
+
scaleNode
|
44
|
+
} = this;
|
45
|
+
const normalOP = mul(this.node, 2.0);
|
46
|
+
let normalMap = sub(normalOP, 1.0);
|
47
|
+
|
48
|
+
if (scaleNode !== null) {
|
49
|
+
const normalMapScale = mul(normalMap.xy, scaleNode);
|
50
|
+
normalMap = join(normalMapScale, normalMap.z);
|
51
|
+
}
|
52
|
+
|
53
|
+
if (normalMapType === ObjectSpaceNormalMap) {
|
54
|
+
const vertexNormalNode = mul(new ModelNode(ModelNode.NORMAL_MATRIX), normalMap);
|
55
|
+
const normal = normalize(vertexNormalNode);
|
56
|
+
return normal.build(builder, type);
|
57
|
+
} else if (normalMapType === TangentSpaceNormalMap) {
|
58
|
+
const perturbNormal2ArbCall = perturbNormal2ArbNode({
|
59
|
+
eye_pos: positionView,
|
60
|
+
surf_norm: normalView,
|
61
|
+
mapN: normalMap,
|
62
|
+
faceDirection: 1.0,
|
63
|
+
uv: uv()
|
64
|
+
});
|
65
|
+
return perturbNormal2ArbCall.build(builder, type);
|
66
|
+
}
|
67
|
+
}
|
68
|
+
|
69
|
+
}
|
70
|
+
|
71
|
+
export default NormalMapNode;
|
@@ -0,0 +1 @@
|
|
1
|
+
"use strict";var e=require("../core/Node.cjs.js");require("../core/constants.cjs.js"),require("../core/NodeUtils.cjs.js"),require("three");class r extends e{constructor(e,r){super("float"),this.colorNode=e,this.factorNode=r}generate(e){return this.factorNode.build(e,"float")}}r.prototype.isFogNode=!0,module.exports=r;
|
@@ -0,0 +1,18 @@
|
|
1
|
+
import Node from '../core/Node.js';
|
2
|
+
|
3
|
+
class FogNode extends Node {
|
4
|
+
constructor(colorNode, factorNode) {
|
5
|
+
super('float');
|
6
|
+
this.colorNode = colorNode;
|
7
|
+
this.factorNode = factorNode;
|
8
|
+
}
|
9
|
+
|
10
|
+
generate(builder) {
|
11
|
+
return this.factorNode.build(builder, 'float');
|
12
|
+
}
|
13
|
+
|
14
|
+
}
|
15
|
+
|
16
|
+
FogNode.prototype.isFogNode = true;
|
17
|
+
|
18
|
+
export default FogNode;
|
@@ -0,0 +1 @@
|
|
1
|
+
"use strict";var e=require("./FogNode.cjs.js"),r=require("../ShaderNode.cjs.js");require("../core/Node.cjs.js"),require("../core/constants.cjs.js"),require("../core/NodeUtils.cjs.js"),require("three"),require("../core/PropertyNode.cjs.js"),require("../core/VarNode.cjs.js"),require("../core/AttributeNode.cjs.js"),require("../core/VaryNode.cjs.js"),require("../core/ConstNode.cjs.js"),require("../core/InputNode.cjs.js"),require("../core/UniformNode.cjs.js"),require("../accessors/BufferNode.cjs.js"),require("../accessors/PositionNode.cjs.js"),require("@babel/runtime/helpers/defineProperty"),require("../accessors/ModelNode.cjs.js"),require("../accessors/Object3DNode.cjs.js"),require("../math/MathNode.cjs.js"),require("../core/TempNode.cjs.js"),require("../core/ExpressionNode.cjs.js"),require("../utils/JoinNode.cjs.js"),require("../utils/SplitNode.cjs.js"),require("../core/NodeBuilder.cjs.js"),require("../core/NodeUniform.cjs.js"),require("../core/NodeAttribute.cjs.js"),require("../core/NodeVary.cjs.js"),require("../core/NodeVar.cjs.js"),require("../core/NodeCode.cjs.js"),require("../core/NodeKeywords.cjs.js"),require("../math/OperatorNode.cjs.js"),require("../accessors/NormalNode.cjs.js"),require("../accessors/CameraNode.cjs.js"),require("../accessors/TextureNode.cjs.js"),require("../accessors/UVNode.cjs.js"),require("../math/CondNode.cjs.js"),require("../core/ContextNode.cjs.js"),require("../utils/ArrayElementNode.cjs.js"),require("../utils/ConvertNode.cjs.js");class s extends e{constructor(e,r,s){super(e),this.nearNode=r,this.farNode=s}generate(e){return this.factorNode=r.smoothstep(this.nearNode,this.farNode,r.negate(r.positionView.z)),super.generate(e)}}s.prototype.isFogRangeNode=!0,module.exports=s;
|
@@ -0,0 +1,20 @@
|
|
1
|
+
import FogNode from './FogNode.js';
|
2
|
+
import { smoothstep, negate, positionView } from '../ShaderNode.js';
|
3
|
+
|
4
|
+
class FogRangeNode extends FogNode {
|
5
|
+
constructor(colorNode, nearNode, farNode) {
|
6
|
+
super(colorNode);
|
7
|
+
this.nearNode = nearNode;
|
8
|
+
this.farNode = farNode;
|
9
|
+
}
|
10
|
+
|
11
|
+
generate(builder) {
|
12
|
+
this.factorNode = smoothstep(this.nearNode, this.farNode, negate(positionView.z));
|
13
|
+
return super.generate(builder);
|
14
|
+
}
|
15
|
+
|
16
|
+
}
|
17
|
+
|
18
|
+
FogRangeNode.prototype.isFogRangeNode = true;
|
19
|
+
|
20
|
+
export default FogRangeNode;
|
@@ -0,0 +1 @@
|
|
1
|
+
"use strict";Object.defineProperty(exports,"__esModule",{value:!0});var e=require("../ShaderNode.cjs.js");require("../core/PropertyNode.cjs.js"),require("../core/Node.cjs.js"),require("../core/constants.cjs.js"),require("../core/NodeUtils.cjs.js"),require("three"),require("../core/VarNode.cjs.js"),require("../core/AttributeNode.cjs.js"),require("../core/VaryNode.cjs.js"),require("../core/ConstNode.cjs.js"),require("../core/InputNode.cjs.js"),require("../core/UniformNode.cjs.js"),require("../accessors/BufferNode.cjs.js"),require("../accessors/PositionNode.cjs.js"),require("@babel/runtime/helpers/defineProperty"),require("../accessors/ModelNode.cjs.js"),require("../accessors/Object3DNode.cjs.js"),require("../math/MathNode.cjs.js"),require("../core/TempNode.cjs.js"),require("../core/ExpressionNode.cjs.js"),require("../utils/JoinNode.cjs.js"),require("../utils/SplitNode.cjs.js"),require("../core/NodeBuilder.cjs.js"),require("../core/NodeUniform.cjs.js"),require("../core/NodeAttribute.cjs.js"),require("../core/NodeVary.cjs.js"),require("../core/NodeVar.cjs.js"),require("../core/NodeCode.cjs.js"),require("../core/NodeKeywords.cjs.js"),require("../math/OperatorNode.cjs.js"),require("../accessors/NormalNode.cjs.js"),require("../accessors/CameraNode.cjs.js"),require("../accessors/TextureNode.cjs.js"),require("../accessors/UVNode.cjs.js"),require("../math/CondNode.cjs.js"),require("../core/ContextNode.cjs.js"),require("../utils/ArrayElementNode.cjs.js"),require("../utils/ConvertNode.cjs.js");const r=new e.ShaderNode((r=>{const{f0:o,f90:s,dotVH:t}=r,d=e.exp2(e.mul(e.sub(e.mul(-5.55473,t),6.98316),t));return e.add(e.mul(o,e.sub(1,d)),e.mul(s,d))})),o=new e.ShaderNode((r=>e.mul(1/Math.PI,r.diffuseColor))),s=new e.ShaderNode((r=>{const{lightDistance:o,cutoffDistance:s,decayExponent:t}=r;return e.cond(e.and(e.greaterThan(s,0),e.greaterThan(t,0)),e.pow(e.saturate(e.add(e.div(e.negate(o),s),1)),t),1)})),t=new e.ShaderNode((r=>{const{alpha:o,dotNL:s,dotNV:t}=r,d=e.pow2(o),i=e.mul(s,e.sqrt(e.add(d,e.mul(e.sub(1,d),e.pow2(t))))),c=e.mul(t,e.sqrt(e.add(d,e.mul(e.sub(1,d),e.pow2(s)))));return e.div(.5,e.max(e.add(i,c),e.EPSILON))})),d=new e.ShaderNode((r=>{const{alpha:o,dotNH:s}=r,t=e.pow2(o),d=e.add(e.mul(e.pow2(s),e.sub(t,1)),1);return e.mul(1/Math.PI,e.div(t,e.pow2(d)))})),i=new e.ShaderNode((o=>{const{lightDirection:s,f0:i,f90:c,roughness:u}=o,a=e.pow2(u),j=e.normalize(e.add(s,e.positionViewDirection)),n=e.saturate(e.dot(e.transformedNormalView,s)),l=e.saturate(e.dot(e.transformedNormalView,e.positionViewDirection)),N=e.saturate(e.dot(e.transformedNormalView,j)),q=e.saturate(e.dot(e.positionViewDirection,j)),m=r({f0:i,f90:c,dotVH:q}),h=t({alpha:a,dotNL:n,dotNV:l}),p=d({alpha:a,dotNH:N});return e.mul(m,e.mul(h,p))})),c=new e.ShaderNode((r=>{const{lightDirection:s,lightColor:t,directDiffuse:d,directSpecular:c}=r,u=e.saturate(e.dot(e.transformedNormalView,s));let a=e.mul(u,t);a=e.mul(a,Math.PI),e.addTo(d,e.mul(a,o({diffuseColor:e.diffuseColor.rgb}))),e.addTo(c,e.mul(a,i({lightDirection:s,f0:e.specularColor,f90:1,roughness:e.roughness})))})),u=new e.ShaderNode((e=>{c(e)}));exports.BRDF_GGX=i,exports.BRDF_Lambert=o,exports.D_GGX=d,exports.F_Schlick=r,exports.PhysicalLightingModel=u,exports.RE_Direct_Physical=c,exports.V_GGX_SmithCorrelated=t,exports.getDistanceAttenuation=s;
|
@@ -0,0 +1,121 @@
|
|
1
|
+
import { ShaderNode, exp2, mul, sub, add, cond, pow, saturate, div, negate, and, greaterThan, pow2, sqrt, max, EPSILON, normalize, positionViewDirection, dot, transformedNormalView, addTo, diffuseColor, specularColor, roughness } from '../ShaderNode.js';
|
2
|
+
|
3
|
+
const F_Schlick = new ShaderNode(inputs => {
|
4
|
+
const {
|
5
|
+
f0,
|
6
|
+
f90,
|
7
|
+
dotVH
|
8
|
+
} = inputs; // Original approximation by Christophe Schlick '94
|
9
|
+
// float fresnel = pow( 1.0 - dotVH, 5.0 );
|
10
|
+
// Optimized variant (presented by Epic at SIGGRAPH '13)
|
11
|
+
// https://cdn2.unrealengine.com/Resources/files/2013SiggraphPresentationsNotes-26915738.pdf
|
12
|
+
|
13
|
+
const fresnel = exp2(mul(sub(mul(-5.55473, dotVH), 6.98316), dotVH));
|
14
|
+
return add(mul(f0, sub(1.0, fresnel)), mul(f90, fresnel));
|
15
|
+
}); // validated
|
16
|
+
|
17
|
+
const BRDF_Lambert = new ShaderNode(inputs => {
|
18
|
+
return mul(1 / Math.PI, inputs.diffuseColor); // punctual light
|
19
|
+
}); // validated
|
20
|
+
|
21
|
+
const getDistanceAttenuation = new ShaderNode(inputs => {
|
22
|
+
const {
|
23
|
+
lightDistance,
|
24
|
+
cutoffDistance,
|
25
|
+
decayExponent
|
26
|
+
} = inputs;
|
27
|
+
return cond(and(greaterThan(cutoffDistance, 0), greaterThan(decayExponent, 0)), pow(saturate(add(div(negate(lightDistance), cutoffDistance), 1.0)), decayExponent), 1.0);
|
28
|
+
}); // validated
|
29
|
+
//
|
30
|
+
// STANDARD
|
31
|
+
//
|
32
|
+
// Moving Frostbite to Physically Based Rendering 3.0 - page 12, listing 2
|
33
|
+
// https://seblagarde.files.wordpress.com/2015/07/course_notes_moving_frostbite_to_pbr_v32.pdf
|
34
|
+
|
35
|
+
const V_GGX_SmithCorrelated = new ShaderNode(inputs => {
|
36
|
+
const {
|
37
|
+
alpha,
|
38
|
+
dotNL,
|
39
|
+
dotNV
|
40
|
+
} = inputs;
|
41
|
+
const a2 = pow2(alpha);
|
42
|
+
const gv = mul(dotNL, sqrt(add(a2, mul(sub(1.0, a2), pow2(dotNV)))));
|
43
|
+
const gl = mul(dotNV, sqrt(add(a2, mul(sub(1.0, a2), pow2(dotNL)))));
|
44
|
+
return div(0.5, max(add(gv, gl), EPSILON));
|
45
|
+
}); // validated
|
46
|
+
// Microfacet Models for Refraction through Rough Surfaces - equation (33)
|
47
|
+
// http://graphicrants.blogspot.com/2013/08/specular-brdf-reference.html
|
48
|
+
// alpha is "roughness squared" in Disney’s reparameterization
|
49
|
+
|
50
|
+
const D_GGX = new ShaderNode(inputs => {
|
51
|
+
const {
|
52
|
+
alpha,
|
53
|
+
dotNH
|
54
|
+
} = inputs;
|
55
|
+
const a2 = pow2(alpha);
|
56
|
+
const denom = add(mul(pow2(dotNH), sub(a2, 1.0)), 1.0); // avoid alpha = 0 with dotNH = 1
|
57
|
+
|
58
|
+
return mul(1 / Math.PI, div(a2, pow2(denom)));
|
59
|
+
}); // validated
|
60
|
+
// GGX Distribution, Schlick Fresnel, GGX_SmithCorrelated Visibility
|
61
|
+
|
62
|
+
const BRDF_GGX = new ShaderNode(inputs => {
|
63
|
+
const {
|
64
|
+
lightDirection,
|
65
|
+
f0,
|
66
|
+
f90,
|
67
|
+
roughness
|
68
|
+
} = inputs;
|
69
|
+
const alpha = pow2(roughness); // UE4's roughness
|
70
|
+
|
71
|
+
const halfDir = normalize(add(lightDirection, positionViewDirection));
|
72
|
+
const dotNL = saturate(dot(transformedNormalView, lightDirection));
|
73
|
+
const dotNV = saturate(dot(transformedNormalView, positionViewDirection));
|
74
|
+
const dotNH = saturate(dot(transformedNormalView, halfDir));
|
75
|
+
const dotVH = saturate(dot(positionViewDirection, halfDir));
|
76
|
+
const F = F_Schlick({
|
77
|
+
f0,
|
78
|
+
f90,
|
79
|
+
dotVH
|
80
|
+
});
|
81
|
+
const V = V_GGX_SmithCorrelated({
|
82
|
+
alpha,
|
83
|
+
dotNL,
|
84
|
+
dotNV
|
85
|
+
});
|
86
|
+
const D = D_GGX({
|
87
|
+
alpha,
|
88
|
+
dotNH
|
89
|
+
});
|
90
|
+
return mul(F, mul(V, D));
|
91
|
+
}); // validated
|
92
|
+
|
93
|
+
const RE_Direct_Physical = new ShaderNode(inputs => {
|
94
|
+
const {
|
95
|
+
lightDirection,
|
96
|
+
lightColor,
|
97
|
+
directDiffuse,
|
98
|
+
directSpecular
|
99
|
+
} = inputs;
|
100
|
+
const dotNL = saturate(dot(transformedNormalView, lightDirection));
|
101
|
+
let irradiance = mul(dotNL, lightColor);
|
102
|
+
irradiance = mul(irradiance, Math.PI); // punctual light
|
103
|
+
|
104
|
+
addTo(directDiffuse, mul(irradiance, BRDF_Lambert({
|
105
|
+
diffuseColor: diffuseColor.rgb
|
106
|
+
})));
|
107
|
+
addTo(directSpecular, mul(irradiance, BRDF_GGX({
|
108
|
+
lightDirection,
|
109
|
+
f0: specularColor,
|
110
|
+
f90: 1,
|
111
|
+
roughness
|
112
|
+
})));
|
113
|
+
});
|
114
|
+
const PhysicalLightingModel = new ShaderNode((inputs
|
115
|
+
/*, builder*/
|
116
|
+
) => {
|
117
|
+
// PHYSICALLY_CORRECT_LIGHTS <-> builder.renderer.physicallyCorrectLights === true
|
118
|
+
RE_Direct_Physical(inputs);
|
119
|
+
});
|
120
|
+
|
121
|
+
export { BRDF_GGX, BRDF_Lambert, D_GGX, F_Schlick, PhysicalLightingModel, RE_Direct_Physical, V_GGX_SmithCorrelated, getDistanceAttenuation };
|
@@ -0,0 +1 @@
|
|
1
|
+
"use strict";Object.defineProperty(exports,"__esModule",{value:!0});var e=require("../ShaderNode.cjs.js");require("../core/PropertyNode.cjs.js"),require("../core/Node.cjs.js"),require("../core/constants.cjs.js"),require("../core/NodeUtils.cjs.js"),require("three"),require("../core/VarNode.cjs.js"),require("../core/AttributeNode.cjs.js"),require("../core/VaryNode.cjs.js"),require("../core/ConstNode.cjs.js"),require("../core/InputNode.cjs.js"),require("../core/UniformNode.cjs.js"),require("../accessors/BufferNode.cjs.js"),require("../accessors/PositionNode.cjs.js"),require("@babel/runtime/helpers/defineProperty"),require("../accessors/ModelNode.cjs.js"),require("../accessors/Object3DNode.cjs.js"),require("../math/MathNode.cjs.js"),require("../core/TempNode.cjs.js"),require("../core/ExpressionNode.cjs.js"),require("../utils/JoinNode.cjs.js"),require("../utils/SplitNode.cjs.js"),require("../core/NodeBuilder.cjs.js"),require("../core/NodeUniform.cjs.js"),require("../core/NodeAttribute.cjs.js"),require("../core/NodeVary.cjs.js"),require("../core/NodeVar.cjs.js"),require("../core/NodeCode.cjs.js"),require("../core/NodeKeywords.cjs.js"),require("../math/OperatorNode.cjs.js"),require("../accessors/NormalNode.cjs.js"),require("../accessors/CameraNode.cjs.js"),require("../accessors/TextureNode.cjs.js"),require("../accessors/UVNode.cjs.js"),require("../math/CondNode.cjs.js"),require("../core/ContextNode.cjs.js"),require("../utils/ArrayElementNode.cjs.js"),require("../utils/ConvertNode.cjs.js");const r=new e.ShaderNode((()=>{const r=e.max(e.abs(e.dFdx(e.normalGeometry)),e.abs(e.dFdy(e.normalGeometry)));return e.max(e.max(r.x,r.y),r.z)})),s=new e.ShaderNode((s=>{const{roughness:o}=s,c=r();let j=e.max(o,.0525);return j=e.add(j,c),j=e.min(j,1),j}));exports.getGeometryRoughness=r,exports.getRoughness=s;
|
@@ -0,0 +1,57 @@
|
|
1
|
+
import { ShaderNode, max, abs, dFdx, normalGeometry, dFdy, add, min } from '../ShaderNode.js';
|
2
|
+
import '../core/PropertyNode.js';
|
3
|
+
import '../core/Node.js';
|
4
|
+
import '../core/constants.js';
|
5
|
+
import '../core/NodeUtils.js';
|
6
|
+
import 'three';
|
7
|
+
import '../core/VarNode.js';
|
8
|
+
import '../core/AttributeNode.js';
|
9
|
+
import '../core/VaryNode.js';
|
10
|
+
import '../core/ConstNode.js';
|
11
|
+
import '../core/InputNode.js';
|
12
|
+
import '../core/UniformNode.js';
|
13
|
+
import '../accessors/BufferNode.js';
|
14
|
+
import '../accessors/PositionNode.js';
|
15
|
+
import '@babel/runtime/helpers/esm/defineProperty';
|
16
|
+
import '../accessors/ModelNode.js';
|
17
|
+
import '../accessors/Object3DNode.js';
|
18
|
+
import '../math/MathNode.js';
|
19
|
+
import '../core/TempNode.js';
|
20
|
+
import '../core/ExpressionNode.js';
|
21
|
+
import '../utils/JoinNode.js';
|
22
|
+
import '../utils/SplitNode.js';
|
23
|
+
import '../core/NodeBuilder.js';
|
24
|
+
import '../core/NodeUniform.js';
|
25
|
+
import '../core/NodeAttribute.js';
|
26
|
+
import '../core/NodeVary.js';
|
27
|
+
import '../core/NodeVar.js';
|
28
|
+
import '../core/NodeCode.js';
|
29
|
+
import '../core/NodeKeywords.js';
|
30
|
+
import '../math/OperatorNode.js';
|
31
|
+
import '../accessors/NormalNode.js';
|
32
|
+
import '../accessors/CameraNode.js';
|
33
|
+
import '../accessors/TextureNode.js';
|
34
|
+
import '../accessors/UVNode.js';
|
35
|
+
import '../math/CondNode.js';
|
36
|
+
import '../core/ContextNode.js';
|
37
|
+
import '../utils/ArrayElementNode.js';
|
38
|
+
import '../utils/ConvertNode.js';
|
39
|
+
|
40
|
+
const getGeometryRoughness = new ShaderNode(() => {
|
41
|
+
const dxy = max(abs(dFdx(normalGeometry)), abs(dFdy(normalGeometry)));
|
42
|
+
const geometryRoughness = max(max(dxy.x, dxy.y), dxy.z);
|
43
|
+
return geometryRoughness;
|
44
|
+
});
|
45
|
+
const getRoughness = new ShaderNode(inputs => {
|
46
|
+
const {
|
47
|
+
roughness
|
48
|
+
} = inputs;
|
49
|
+
const geometryRoughness = getGeometryRoughness();
|
50
|
+
let roughnessFactor = max(roughness, 0.0525); // 0.0525 corresponds to the base mip of a 256 cubemap.
|
51
|
+
|
52
|
+
roughnessFactor = add(roughnessFactor, geometryRoughness);
|
53
|
+
roughnessFactor = min(roughnessFactor, 1.0);
|
54
|
+
return roughnessFactor;
|
55
|
+
});
|
56
|
+
|
57
|
+
export { getGeometryRoughness, getRoughness };
|
@@ -0,0 +1 @@
|
|
1
|
+
"use strict";var e=require("../core/ContextNode.cjs.js"),r=require("../core/VarNode.cjs.js"),s=require("../core/UniformNode.cjs.js"),c=require("../math/OperatorNode.cjs.js"),o=require("../functions/BSDFs.cjs.js"),i=require("three");require("../core/Node.cjs.js"),require("../core/constants.cjs.js"),require("../core/NodeUtils.cjs.js"),require("../core/InputNode.cjs.js"),require("../core/TempNode.cjs.js"),require("../ShaderNode.cjs.js"),require("../core/PropertyNode.cjs.js"),require("../core/AttributeNode.cjs.js"),require("../core/VaryNode.cjs.js"),require("../core/ConstNode.cjs.js"),require("../accessors/BufferNode.cjs.js"),require("../accessors/PositionNode.cjs.js"),require("@babel/runtime/helpers/defineProperty"),require("../accessors/ModelNode.cjs.js"),require("../accessors/Object3DNode.cjs.js"),require("../math/MathNode.cjs.js"),require("../core/ExpressionNode.cjs.js"),require("../utils/JoinNode.cjs.js"),require("../utils/SplitNode.cjs.js"),require("../core/NodeBuilder.cjs.js"),require("../core/NodeUniform.cjs.js"),require("../core/NodeAttribute.cjs.js"),require("../core/NodeVary.cjs.js"),require("../core/NodeVar.cjs.js"),require("../core/NodeCode.cjs.js"),require("../core/NodeKeywords.cjs.js"),require("../accessors/NormalNode.cjs.js"),require("../accessors/CameraNode.cjs.js"),require("../accessors/TextureNode.cjs.js"),require("../accessors/UVNode.cjs.js"),require("../math/CondNode.cjs.js"),require("../utils/ArrayElementNode.cjs.js"),require("../utils/ConvertNode.cjs.js");module.exports=class extends e{constructor(e){super(e)}getNodeType(){return"vec3"}generate(e){let j=null;!0===e.material.isMeshStandardMaterial&&(j=o.PhysicalLightingModel);const t=new r(new s(new i.Vector3),"DirectDiffuse","vec3"),u=new r(new s(new i.Vector3),"DirectSpecular","vec3");this.context.directDiffuse=t,this.context.directSpecular=u,null!==j&&(this.context.lightingModel=j);const d=this.getNodeType(e);super.generate(e,d);return new c("+",t,u).build(e,d)}};
|
@@ -0,0 +1,43 @@
|
|
1
|
+
import ContextNode from '../core/ContextNode.js';
|
2
|
+
import VarNode from '../core/VarNode.js';
|
3
|
+
import UniformNode from '../core/UniformNode.js';
|
4
|
+
import OperatorNode from '../math/OperatorNode.js';
|
5
|
+
import { PhysicalLightingModel } from '../functions/BSDFs.js';
|
6
|
+
import { Vector3 } from 'three';
|
7
|
+
|
8
|
+
class LightContextNode extends ContextNode {
|
9
|
+
constructor(node) {
|
10
|
+
super(node);
|
11
|
+
}
|
12
|
+
|
13
|
+
getNodeType() {
|
14
|
+
return 'vec3';
|
15
|
+
}
|
16
|
+
|
17
|
+
generate(builder) {
|
18
|
+
const material = builder.material;
|
19
|
+
let lightingModel = null;
|
20
|
+
|
21
|
+
if (material.isMeshStandardMaterial === true) {
|
22
|
+
lightingModel = PhysicalLightingModel;
|
23
|
+
}
|
24
|
+
|
25
|
+
const directDiffuse = new VarNode(new UniformNode(new Vector3()), 'DirectDiffuse', 'vec3');
|
26
|
+
const directSpecular = new VarNode(new UniformNode(new Vector3()), 'DirectSpecular', 'vec3');
|
27
|
+
this.context.directDiffuse = directDiffuse;
|
28
|
+
this.context.directSpecular = directSpecular;
|
29
|
+
|
30
|
+
if (lightingModel !== null) {
|
31
|
+
this.context.lightingModel = lightingModel;
|
32
|
+
} // add code
|
33
|
+
|
34
|
+
|
35
|
+
const type = this.getNodeType(builder);
|
36
|
+
super.generate(builder, type);
|
37
|
+
const totalLight = new OperatorNode('+', directDiffuse, directSpecular);
|
38
|
+
return totalLight.build(builder, type);
|
39
|
+
}
|
40
|
+
|
41
|
+
}
|
42
|
+
|
43
|
+
export default LightContextNode;
|
@@ -0,0 +1 @@
|
|
1
|
+
"use strict";var e=require("../core/Node.cjs.js"),r=require("../accessors/Object3DNode.cjs.js"),s=require("../accessors/PositionNode.cjs.js"),o=require("../core/UniformNode.cjs.js"),t=require("../math/OperatorNode.cjs.js"),i=require("../math/MathNode.cjs.js"),c=require("../core/constants.cjs.js"),j=require("../functions/BSDFs.cjs.js"),u=require("three");require("../core/NodeUtils.cjs.js"),require("@babel/runtime/helpers/defineProperty"),require("../core/InputNode.cjs.js"),require("../core/AttributeNode.cjs.js"),require("../core/VaryNode.cjs.js"),require("../accessors/ModelNode.cjs.js"),require("../core/TempNode.cjs.js"),require("../core/ExpressionNode.cjs.js"),require("../utils/JoinNode.cjs.js"),require("../utils/SplitNode.cjs.js"),require("../core/NodeBuilder.cjs.js"),require("../core/NodeUniform.cjs.js"),require("../core/NodeAttribute.cjs.js"),require("../core/NodeVary.cjs.js"),require("../core/NodeVar.cjs.js"),require("../core/NodeCode.cjs.js"),require("../core/NodeKeywords.cjs.js"),require("../ShaderNode.cjs.js"),require("../core/PropertyNode.cjs.js"),require("../core/VarNode.cjs.js"),require("../core/ConstNode.cjs.js"),require("../accessors/BufferNode.cjs.js"),require("../accessors/NormalNode.cjs.js"),require("../accessors/CameraNode.cjs.js"),require("../accessors/TextureNode.cjs.js"),require("../accessors/UVNode.cjs.js"),require("../math/CondNode.cjs.js"),require("../core/ContextNode.cjs.js"),require("../utils/ArrayElementNode.cjs.js"),require("../utils/ConvertNode.cjs.js");module.exports=class extends e{constructor(e=null){super("vec3"),this.updateType=c.NodeUpdateType.Object,this.light=e,this._colorNode=new o(new u.Color),this._lightCutoffDistanceNode=new o(0),this._lightDecayExponentNode=new o(0)}getHash(){return this.light.uuid}update(){this._colorNode.value.copy(this.light.color).multiplyScalar(this.light.intensity),this._lightCutoffDistanceNode.value=this.light.distance,this._lightDecayExponentNode.value=this.light.decay}generate(e){const o=new r(r.VIEW_POSITION),c=new s(s.VIEW),u=new t("-",o,c),d=new i(i.NORMALIZE,u),n=new i(i.LENGTH,u),a=j.getDistanceAttenuation({lightDistance:n,cutoffDistance:this._lightCutoffDistanceNode,decayExponent:this._lightDecayExponentNode}),N=new t("*",this._colorNode,a);o.object3d=this.light;const l=e.context.lightingModel;if(void 0!==l){l({lightDirection:d,lightColor:N,directDiffuse:e.context.directDiffuse,directSpecular:e.context.directSpecular},e)}}};
|
@@ -0,0 +1,61 @@
|
|
1
|
+
import Node from '../core/Node.js';
|
2
|
+
import Object3DNode from '../accessors/Object3DNode.js';
|
3
|
+
import PositionNode from '../accessors/PositionNode.js';
|
4
|
+
import UniformNode from '../core/UniformNode.js';
|
5
|
+
import OperatorNode from '../math/OperatorNode.js';
|
6
|
+
import MathNode from '../math/MathNode.js';
|
7
|
+
import { NodeUpdateType } from '../core/constants.js';
|
8
|
+
import { getDistanceAttenuation } from '../functions/BSDFs.js';
|
9
|
+
import { Color } from 'three';
|
10
|
+
|
11
|
+
class LightNode extends Node {
|
12
|
+
constructor(light = null) {
|
13
|
+
super('vec3');
|
14
|
+
this.updateType = NodeUpdateType.Object;
|
15
|
+
this.light = light;
|
16
|
+
this._colorNode = new UniformNode(new Color());
|
17
|
+
this._lightCutoffDistanceNode = new UniformNode(0);
|
18
|
+
this._lightDecayExponentNode = new UniformNode(0);
|
19
|
+
}
|
20
|
+
|
21
|
+
getHash() {
|
22
|
+
return this.light.uuid;
|
23
|
+
}
|
24
|
+
|
25
|
+
update() {
|
26
|
+
this._colorNode.value.copy(this.light.color).multiplyScalar(this.light.intensity);
|
27
|
+
|
28
|
+
this._lightCutoffDistanceNode.value = this.light.distance;
|
29
|
+
this._lightDecayExponentNode.value = this.light.decay;
|
30
|
+
}
|
31
|
+
|
32
|
+
generate(builder) {
|
33
|
+
const lightPositionView = new Object3DNode(Object3DNode.VIEW_POSITION);
|
34
|
+
const positionView = new PositionNode(PositionNode.VIEW);
|
35
|
+
const lVector = new OperatorNode('-', lightPositionView, positionView);
|
36
|
+
const lightDirection = new MathNode(MathNode.NORMALIZE, lVector);
|
37
|
+
const lightDistance = new MathNode(MathNode.LENGTH, lVector);
|
38
|
+
const lightAttenuation = getDistanceAttenuation({
|
39
|
+
lightDistance,
|
40
|
+
cutoffDistance: this._lightCutoffDistanceNode,
|
41
|
+
decayExponent: this._lightDecayExponentNode
|
42
|
+
});
|
43
|
+
const lightColor = new OperatorNode('*', this._colorNode, lightAttenuation);
|
44
|
+
lightPositionView.object3d = this.light;
|
45
|
+
const lightingModelFunction = builder.context.lightingModel;
|
46
|
+
|
47
|
+
if (lightingModelFunction !== undefined) {
|
48
|
+
const directDiffuse = builder.context.directDiffuse;
|
49
|
+
const directSpecular = builder.context.directSpecular;
|
50
|
+
lightingModelFunction({
|
51
|
+
lightDirection,
|
52
|
+
lightColor,
|
53
|
+
directDiffuse,
|
54
|
+
directSpecular
|
55
|
+
}, builder);
|
56
|
+
}
|
57
|
+
}
|
58
|
+
|
59
|
+
}
|
60
|
+
|
61
|
+
export default LightNode;
|