Support multiple outputs for custom material nodes

This commit is contained in:
luboslenco
2020-09-18 13:46:40 +02:00
parent e5ff59f6ec
commit 2c3a6e64ee
2 changed files with 18 additions and 4 deletions
+15 -1
View File
@@ -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}));
`); `);
if (socket.name == "Color") {
return `vec3(${my_out}, ${my_out}, ${my_out})`; 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";
} }