You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Godot中C#编写的ColorStepsNode自定义着色器节点不显示求助

自定义VisualShaderNodeCustom节点无法在Godot中显示的解决方案

问题情况

刚从Unity转用Godot,正在进行着色器开发,想要将复用性高的ExpressionNode转为VisualShaderNodeCustom,编写的ColorStepsNode放在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;
    }

}

原ExpressionNode截图

原ExpressionNode在着色器编辑器中的状态


解决步骤

1. 配置插件清单

在res://addons/colorStepsNode/目录下创建plugin.cfg文件,内容如下:

[plugin]
name="Color Steps Node"
description="自定义视觉着色器节点,实现灰度阶跃效果"
author="你的名字"
version="1.0"
script="ColorStepsNode.cs"

2. 启用插件

打开Godot编辑器的项目 > 项目设置 > 插件页面,找到“Color Steps Node”插件,勾选启用,然后重启编辑器。

3. 检查编译状态

查看编辑器底部的“输出”面板,确认没有C#编译错误。如果有错误,根据提示修复代码后重新编译。

4. 修正着色器逻辑(可选)

你的节点代码逻辑和原ExpressionNode不一致,原表达式为floor(value * colorSteps) / colorSteps - 0.5/colorSteps,建议将_GetCode方法修改为:

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 = floor({value} * float({colorSteps})) * colorStepSize;" +
                  $"{output} = steppedValue - colorStepSize * 0.5;";

    return code;
}

5. 查找节点

重启编辑器后,打开着色器编辑器,点击“添加节点”,在“Custom”分类下搜索“ColorSteps”即可找到你的自定义节点。


内容的提问来源于stack exchange,提问作者Reborok

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.30 09:10:17