| 12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273747576777879 |
- let plugin = new arm.Plugin();
- let categoryName = "My Nodes";
- let nodeName = "Hello World";
- let nodeType = "HELLO_WORLD";
- // Create new node category
- let categories = arm.NodesMaterial.categories;
- categories.push(categoryName);
- // Create new node
- let nodes = [
- {
- id: 0,
- name: nodeName,
- type: nodeType,
- x: 0,
- y: 0,
- color: 0xffb34f5a,
- inputs: [
- {
- id: 0,
- node_id: 0,
- name: "Scale",
- type: "VALUE",
- color: 0xffa1a1a1,
- default_value: 1,
- min: 0.0,
- max: 5.0
- }
- ],
- outputs: [
- {
- id: 0,
- node_id: 0,
- name: "Color",
- type: "RGBA",
- color: 0xffc7c729,
- 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: []
- }
- ];
- arm.NodesMaterial.list.push(nodes);
- // Node shader
- arm.MaterialParser.customNodes.set(nodeType, function(node, socket) {
- let frag = arm.MaterialParser.frag;
- let scale = arm.MaterialParser.parse_value_input(node.inputs[0]);
- let my_out = arm.MaterialParser.node_name(node) + "_out";
- frag.write(`
- 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})`;
- }
- else if (socket.name == "Fac") {
- return my_out;
- }
- });
- // Cleanup
- plugin.delete = function() {
- arm.MaterialParser.customNodes.delete(nodeType);
- arm.NodesMaterial.list.splice(arm.NodesMaterial.list.indexOf(nodes), 1);
- categories.splice(categories.indexOf(categoryName), 1);
- };
|