I'm relatively new to Godot (came from Unity after all the trouble) but got around pretty good. I'm currently doing alot of shaders and since I use some functionality at different spots I thought it might be a good idea to convert my ExpressionNodes to VisualShaderNodeCustom - but I can't seem to get it to work. My custom ShaderNode "ColorStepsNode" does not appear under "Add node", it is located under res://addons/colorStepsNode/ColorStepsNode.cs
using Godot;
using Godot.Collections;
[Tool]
[GlobalClass]
public partial class ColorStepsNode : VisualShaderNodeCustom
{
// *** GENERAL
public override string _GetName()
{
return "ColorSteps";
}
public override string _GetCategory()
{
return "Custom";
}
public override string _GetDescription()
{
return "Converts float value between 0.0 and [StepsCount] to fixed steps in grey scale (depth)";
}
// *** INPUTS
public override int _GetInputPortCount()
{
// int colorSteps, float value
return 2;
}
public override string _GetInputPortName(int port)
{
switch (port)
{
case 0:
return "colorSteps";
case 1:
return "value";
}
throw new System.Exception("unknown portIndex in GetInputPortName in ColorStepsNode.");
}
public override PortType _GetInputPortType(int port)
{
switch (port)
{
case 0:
return PortType.ScalarInt;
case 1:
return PortType.Scalar;
}
throw new System.Exception("unknown portIndex in GetInputPortType in ColorStepsNode.");
}
// *** OUTPUTS
public override int _GetOutputPortCount()
{
return 1;
}
public override string _GetOutputPortName(int port)
{
if (port == 0)
{
return "output";
}
throw new System.Exception("unknown portIndex in GetOutputPortName in ColorStepsNode.");
}
public override PortType _GetReturnIconType()
{
return PortType.Scalar;
}
public override PortType _GetOutputPortType(int port)
{
if (port == 0)
{
return PortType.Scalar;
}
throw new System.Exception("unknown portIndex in GetOutputPortType in ColorStepsNode.");
}
// *** FUNCTIONALITY
public override string _GetGlobalCode(Shader.Mode mode)
{
return "";
}
public override string _GetCode(Array<string> inputVars, Array<string> outputVars, Shader.Mode mode, VisualShader.Type type)
{
string colorSteps = inputVars[0];
string value = inputVars[1];
string output = outputVars[0];
string code = $"float colorStepSize = 1.0 / float({colorSteps});" +
$"float steppedValue = ({value} - fract({value})) * colorStepSize;" +
$"{output} = steppedValue - (colorStepSize / 2.0);";
return code;
}
}
I tried everything I could find, but sometimes finding stuff for Godot or especially for Godoto C# is hard/impossible. Thank you for your help in advance!
