VisualShaderNodeCustom

Наследует: VisualShaderNode < Resource < RefCounted < Object

Виртуальный класс для определения пользовательских VisualShaderNode-ов для использования в редакторе визуальных шейдеров.

Описание

Унаследовав этот класс, вы можете создать пользовательский скриптовый аддон VisualShader, который будет автоматически добавлен в редактор визуальных шейдеров. Поведение VisualShaderNode определяется путем переопределения предоставленных виртуальных методов.

Чтобы зарегистрировать узел как редакторский аддон, вы должны использовать аннотацию @tool и указать class_name для вашего пользовательского скрипта. Например:

@tool
extends VisualShaderNodeCustom
class_name VisualShaderNodeNoise

Обучающие материалы

Методы

String

_get_category() virtual const

String

_get_code(input_vars: Array[String], output_vars: Array[String], mode: Mode, type: Type) virtual const

int

_get_default_input_port(type: PortType) virtual const

String

_get_description() virtual const

String

_get_func_code(mode: Mode, type: Type) virtual const

String

_get_global_code(mode: Mode) virtual const

int

_get_input_port_count() virtual const

Variant

_get_input_port_default_value(port: int) virtual const

String

_get_input_port_name(port: int) virtual const

PortType

_get_input_port_type(port: int) virtual const

String

_get_name() virtual const

int

_get_output_port_count() virtual const

String

_get_output_port_name(port: int) virtual const

PortType

_get_output_port_type(port: int) virtual const

int

_get_property_count() virtual const

int

_get_property_default_index(index: int) virtual const

String

_get_property_name(index: int) virtual const

PackedStringArray

_get_property_options(index: int) virtual const

PortType

_get_return_icon_type() virtual const

bool

_is_available(mode: Mode, type: Type) virtual const

bool

_is_highend() virtual const

int

get_option_index(option: int) const


Описания метода

String _get_category() virtual const 🔗

Переопределите этот метод, чтобы определить путь к связанному пользовательскому узлу в диалоговом окне членов Редактора Визуальных Шейдеров. Путь может выглядеть как "MyGame/MyFunctions/Noise".

Определение этого метода необязательно. Если не переопределить, узел будет помещен в категорию "Дополнения" ("Addons").


String _get_code(input_vars: Array[String], output_vars: Array[String], mode: Mode, type: Type) virtual const 🔗

Переопределите этот метод, чтобы определить фактический код шейдера связанного пользовательского узла. Код шейдера должен быть возвращен в виде строки, которая может иметь несколько строк (для удобства можно использовать конструкцию многострочной строки """.

Массивы input_vars и output_vars содержат имена строк различных входных и выходных переменных, как определено виртуальными методами _get_input_* и _get_output_* в этом классе.

Выходным портам могут быть назначены значения в коде шейдера. Например, return output_vars[0] + " = " + input_vars[0] + ";".

Вы можете настроить сгенерированный код на основе mode шейдера и/или type.

Определение этого метода обязательно.


int _get_default_input_port(type: PortType) virtual const 🔗

Переопределите этот метод, чтобы определить входной порт, который должен быть подключен по умолчанию, когда этот узел создается в результате перетаскивания соединения из существующего узла в пустое пространство на графике.

Определение этого метода необязательно. Если не переопределено, соединение будет создано с первым допустимым портом.


String _get_description() virtual const 🔗

Переопределите этот метод, чтобы определить описание связанного пользовательского узла в диалоговом окне элементов редактора визуальных шейдеров.

Определение этого метода необязательно.


String _get_func_code(mode: Mode, type: Type) virtual const 🔗

Переопределите этот метод, чтобы добавить код шейдера в начало каждой функции шейдера (один раз). Код шейдера должен быть возвращен в виде строки, которая может иметь несколько строк (для удобства можно использовать конструкцию многострочной строки """.

Если есть несколько пользовательских узлов разных типов, которые используют эту функцию, порядок каждой вставки не определен.

Вы можете настроить сгенерированный код на основе mode шейдера и/или type.

Определение этого метода необязательно.


String _get_global_code(mode: Mode) virtual const 🔗

Переопределите этот метод, чтобы добавить код шейдера поверх глобального шейдера, чтобы определить собственную стандартную библиотеку повторно используемых методов, переменных, констант, униформ и т. д. Код шейдера должен быть возвращен в виде строки, которая может иметь несколько строк (для удобства можно использовать конструкцию многострочной строки """.

Будьте осторожны с этой функциональностью, так как она может вызвать конфликты имен с другими пользовательскими узлами, поэтому обязательно дайте определенным сущностям уникальные имена.

Вы можете настроить сгенерированный код на основе mode шейдера.

Определение этого метода необязательно.


int _get_input_port_count() virtual const 🔗

Переопределите этот метод, чтобы определить количество входных портов связанного пользовательского узла.

Определение этого метода обязательно. Если не переопределено, у узла нет входных портов.


Variant _get_input_port_default_value(port: int) virtual const 🔗

Переопределите этот метод, чтобы определить значение по умолчанию для указанного входного порта. Предпочтительнее использовать его вместо VisualShaderNode.set_input_port_default_value().

Определение этого метода обязательно. Если не переопределено, у узла нет значений по умолчанию для входных портов.


String _get_input_port_name(port: int) virtual const 🔗

Переопределите этот метод, чтобы определить имена входных портов связанного пользовательского узла. Имена используются как для входных слотов в редакторе, так и в качестве идентификаторов в коде шейдера и передаются в массиве input_vars в _get_code().

Определение этого метода необязательно, но рекомендуется. Если не переопределено, входные порты именуются как "in" + str(port).


PortType _get_input_port_type(port: int) virtual const 🔗

Переопределите этот метод, чтобы определить возвращаемый тип каждого входного порта связанного пользовательского узла.

Определение этого метода необязательно, но рекомендуется. Если не переопределить, входные порты вернут тип VisualShaderNode.PORT_TYPE_SCALAR.


String _get_name() virtual const 🔗

Переопределите этот метод, чтобы определить имя связанного пользовательского узла в диалоговом окне и графике членов редактора визуальных шейдеров.

Определение этого метода необязательно, но рекомендуется. Если не переопределить, узел будет назван как «Безымянный».


int _get_output_port_count() virtual const 🔗

Переопределите этот метод, чтобы определить количество выходных портов связанного пользовательского узла.

Определение этого метода обязательно. Если не переопределено, у узла нет выходных портов.


String _get_output_port_name(port: int) virtual const 🔗

Переопределите этот метод, чтобы определить имена выходных портов связанного пользовательского узла. Имена используются как для выходных слотов в редакторе, так и в качестве идентификаторов в коде шейдера и передаются в массиве output_vars в _get_code().

Определение этого метода необязательно, но рекомендуется. Если не переопределено, выходные порты именуются как "out" + str(port).


PortType _get_output_port_type(port: int) virtual const 🔗

Переопределите этот метод, чтобы определить возвращаемый тип каждого выходного порта связанного пользовательского узла.

Определение этого метода необязательно, но рекомендуется. Если не переопределить, выходные порты вернут тип VisualShaderNode.PORT_TYPE_SCALAR.


int _get_property_count() virtual const 🔗

Переопределите этот метод, чтобы определить количество свойств.

Определение этого метода необязательно.


int _get_property_default_index(index: int) virtual const 🔗

Переопределите этот метод, чтобы определить индекс по умолчанию свойства связанного пользовательского узла.

Определение этого метода необязательно.


String _get_property_name(index: int) virtual const 🔗

Переопределите этот метод, чтобы определить имена свойств связанного пользовательского узла.

Определение этого метода необязательно.


PackedStringArray _get_property_options(index: int) virtual const 🔗

Переопределите этот метод, чтобы определить параметры внутри раскрывающегося списка свойства связанного пользовательского узла.

Определение этого метода необязательно.


PortType _get_return_icon_type() virtual const 🔗

Переопределите этот метод, чтобы определить значок возврата связанного пользовательского узла в диалоговом окне элементов редактора визуальных шейдеров.

Определение этого метода необязательно. Если не переопределено, значок возврата не отображается.


bool _is_available(mode: Mode, type: Type) virtual const 🔗

Переопределите этот метод, чтобы предотвратить отображение узла в диалоговом окне участника для определенного mode и/или type.

Определение этого метода необязательно. Если не переопределено, то true.


bool _is_highend() virtual const 🔗

Переопределите этот метод, чтобы включить метку "высококлассовый" в диалоговом окне "Члены" визуального редактора шейдеров. Для узлов, работающих только с рендерами Forward+ и Mobile, должно возвращаться значение true.

Определение этого метода является необязательным. Если он не переопределен, значение будет false, что указывает на совместимость этого узла со всеми рендерами (включая Compatibility).


int get_option_index(option: int) const 🔗

Возвращает выбранный индекс раскрывающегося списка в графе. Вы можете использовать эту функцию для определения конкретного поведения в _get_code() или _get_global_code().