Support multiple outputs for custom material nodes
This commit is contained in:
@@ -38,6 +38,14 @@ let nodes = [
|
|||||||
type: "RGBA",
|
type: "RGBA",
|
||||||
color: 0xffc7c729,
|
color: 0xffc7c729,
|
||||||
default_value: new Float32Array([0.8, 0.8, 0.8, 1.0])
|
default_value: new Float32Array([0.8, 0.8, 0.8, 1.0])
|
||||||
|
},
|
||||||
|
{
|
||||||
|
id: 1,
|
||||||
|
node_id: 0,
|
||||||
|
name: "Fac",
|
||||||
|
type: "VALUE",
|
||||||
|
color: 0xffa1a1a1,
|
||||||
|
default_value: 1.0
|
||||||
}
|
}
|
||||||
],
|
],
|
||||||
buttons: []
|
buttons: []
|
||||||
@@ -46,7 +54,7 @@ let nodes = [
|
|||||||
arm.NodesMaterial.list.push(nodes);
|
arm.NodesMaterial.list.push(nodes);
|
||||||
|
|
||||||
// Node shader
|
// Node shader
|
||||||
arm.MaterialParser.customNodes.set(nodeType, function(node) {
|
arm.MaterialParser.customNodes.set(nodeType, function(node, socket) {
|
||||||
let frag = arm.MaterialParser.frag;
|
let frag = arm.MaterialParser.frag;
|
||||||
let scale = arm.MaterialParser.parse_value_input(node.inputs[0]);
|
let scale = arm.MaterialParser.parse_value_input(node.inputs[0]);
|
||||||
let my_out = arm.MaterialParser.node_name(node) + "_out";
|
let my_out = arm.MaterialParser.node_name(node) + "_out";
|
||||||
@@ -54,7 +62,13 @@ arm.MaterialParser.customNodes.set(nodeType, function(node) {
|
|||||||
frag.write(`
|
frag.write(`
|
||||||
float ${my_out} = cos(sin(texCoord.x * 200.0 * ${scale}) + cos(texCoord.y * 200.0 * ${scale}));
|
float ${my_out} = cos(sin(texCoord.x * 200.0 * ${scale}) + cos(texCoord.y * 200.0 * ${scale}));
|
||||||
`);
|
`);
|
||||||
return `vec3(${my_out}, ${my_out}, ${my_out})`;
|
|
||||||
|
if (socket.name == "Color") {
|
||||||
|
return `vec3(${my_out}, ${my_out}, ${my_out})`;
|
||||||
|
}
|
||||||
|
else if (socket.name == "Fac") {
|
||||||
|
return my_out;
|
||||||
|
}
|
||||||
});
|
});
|
||||||
|
|
||||||
// Cleanup
|
// Cleanup
|
||||||
|
|||||||
@@ -937,7 +937,7 @@ class MaterialParser {
|
|||||||
return to_vec3('$height');
|
return to_vec3('$height');
|
||||||
}
|
}
|
||||||
else if (customNodes.get(node.type) != null) {
|
else if (customNodes.get(node.type) != null) {
|
||||||
return customNodes.get(node.type)(node);
|
return customNodes.get(node.type)(node, socket);
|
||||||
}
|
}
|
||||||
return "vec3(0.0, 0.0, 0.0)";
|
return "vec3(0.0, 0.0, 0.0)";
|
||||||
}
|
}
|
||||||
@@ -1337,7 +1337,7 @@ class MaterialParser {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
else if (customNodes.get(node.type) != null) {
|
else if (customNodes.get(node.type) != null) {
|
||||||
return customNodes.get(node.type)(node);
|
return customNodes.get(node.type)(node, socket);
|
||||||
}
|
}
|
||||||
return "0.0";
|
return "0.0";
|
||||||
}
|
}
|
||||||
|
|||||||
Reference in New Issue
Block a user