:github_url: hide .. _class_VisualShader: VisualShader ============ **Наследует:** :ref:`Shader` **<** :ref:`Resource` **<** :ref:`RefCounted` **<** :ref:`Object` Пользовательская шейдерная программа с визуальным редактором. .. rst-class:: classref-introduction-group Описание ---------------- Этот класс предоставляет графический визуальный редактор для создания :ref:`Shader`. Хотя **VisualShader** не требуют кодирования, они разделяют ту же логику с шейдерами скриптов. Они используют :ref:`VisualShaderNode`, которые могут быть соединены друг с другом для управления потоком шейдера. Граф визуального шейдера преобразуется в шейдер скрипта за кулисами. .. rst-class:: classref-introduction-group Обучающие материалы -------------------------------------- - :doc:`Использование VisualShaders <../tutorials/shaders/visual_shaders>` .. rst-class:: classref-reftable-group Свойства ---------------- .. table:: :widths: auto +-------------------------------+---------------------------------------------------------------+ | :ref:`Vector2` | :ref:`graph_offset` | +-------------------------------+---------------------------------------------------------------+ .. rst-class:: classref-reftable-group Методы ------------ .. table:: :widths: auto +------------------------------------------------------------------+---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+ | |void| | :ref:`add_node`\ (\ type\: :ref:`Type`, node\: :ref:`VisualShaderNode`, position\: :ref:`Vector2`, id\: :ref:`int`\ ) | +------------------------------------------------------------------+---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+ | |void| | :ref:`add_varying`\ (\ name\: :ref:`String`, mode\: :ref:`VaryingMode`, type\: :ref:`VaryingType`\ ) | +------------------------------------------------------------------+---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+ | |void| | :ref:`attach_node_to_frame`\ (\ type\: :ref:`Type`, id\: :ref:`int`, frame\: :ref:`int`\ ) | +------------------------------------------------------------------+---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+ | :ref:`bool` | :ref:`can_connect_nodes`\ (\ type\: :ref:`Type`, from_node\: :ref:`int`, from_port\: :ref:`int`, to_node\: :ref:`int`, to_port\: :ref:`int`\ ) |const| | +------------------------------------------------------------------+---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+ | :ref:`Error` | :ref:`connect_nodes`\ (\ type\: :ref:`Type`, from_node\: :ref:`int`, from_port\: :ref:`int`, to_node\: :ref:`int`, to_port\: :ref:`int`\ ) | +------------------------------------------------------------------+---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+ | |void| | :ref:`connect_nodes_forced`\ (\ type\: :ref:`Type`, from_node\: :ref:`int`, from_port\: :ref:`int`, to_node\: :ref:`int`, to_port\: :ref:`int`\ ) | +------------------------------------------------------------------+---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+ | |void| | :ref:`detach_node_from_frame`\ (\ type\: :ref:`Type`, id\: :ref:`int`\ ) | +------------------------------------------------------------------+---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+ | |void| | :ref:`disconnect_nodes`\ (\ type\: :ref:`Type`, from_node\: :ref:`int`, from_port\: :ref:`int`, to_node\: :ref:`int`, to_port\: :ref:`int`\ ) | +------------------------------------------------------------------+---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+ | :ref:`VisualShaderNode` | :ref:`get_node`\ (\ type\: :ref:`Type`, id\: :ref:`int`\ ) |const| | +------------------------------------------------------------------+---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+ | :ref:`Array`\[:ref:`Dictionary`\] | :ref:`get_node_connections`\ (\ type\: :ref:`Type`\ ) |const| | +------------------------------------------------------------------+---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+ | :ref:`PackedInt32Array` | :ref:`get_node_list`\ (\ type\: :ref:`Type`\ ) |const| | +------------------------------------------------------------------+---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+ | :ref:`Vector2` | :ref:`get_node_position`\ (\ type\: :ref:`Type`, id\: :ref:`int`\ ) |const| | +------------------------------------------------------------------+---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+ | :ref:`int` | :ref:`get_valid_node_id`\ (\ type\: :ref:`Type`\ ) |const| | +------------------------------------------------------------------+---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+ | :ref:`bool` | :ref:`has_varying`\ (\ name\: :ref:`String`\ ) |const| | +------------------------------------------------------------------+---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+ | :ref:`bool` | :ref:`is_node_connection`\ (\ type\: :ref:`Type`, from_node\: :ref:`int`, from_port\: :ref:`int`, to_node\: :ref:`int`, to_port\: :ref:`int`\ ) |const| | +------------------------------------------------------------------+---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+ | |void| | :ref:`remove_node`\ (\ type\: :ref:`Type`, id\: :ref:`int`\ ) | +------------------------------------------------------------------+---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+ | |void| | :ref:`remove_varying`\ (\ name\: :ref:`String`\ ) | +------------------------------------------------------------------+---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+ | |void| | :ref:`replace_node`\ (\ type\: :ref:`Type`, id\: :ref:`int`, new_class\: :ref:`StringName`\ ) | +------------------------------------------------------------------+---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+ | |void| | :ref:`set_mode`\ (\ mode\: :ref:`Mode`\ ) | +------------------------------------------------------------------+---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+ | |void| | :ref:`set_node_position`\ (\ type\: :ref:`Type`, id\: :ref:`int`, position\: :ref:`Vector2`\ ) | +------------------------------------------------------------------+---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+ .. rst-class:: classref-section-separator ---- .. rst-class:: classref-descriptions-group Перечисления ------------------------ .. _enum_VisualShader_Type: .. rst-class:: classref-enumeration enum **Type**: :ref:`🔗` .. _class_VisualShader_constant_TYPE_VERTEX: .. rst-class:: classref-enumeration-constant :ref:`Type` **TYPE_VERTEX** = ``0`` Вершинный шейдер, работающий с вершинами. .. _class_VisualShader_constant_TYPE_FRAGMENT: .. rst-class:: classref-enumeration-constant :ref:`Type` **TYPE_FRAGMENT** = ``1`` Фрагментный шейдер, работающий с фрагментами (пикселями). .. _class_VisualShader_constant_TYPE_LIGHT: .. rst-class:: classref-enumeration-constant :ref:`Type` **TYPE_LIGHT** = ``2`` Шейдер для расчета освещения. .. _class_VisualShader_constant_TYPE_START: .. rst-class:: classref-enumeration-constant :ref:`Type` **TYPE_START** = ``3`` Функция для «стартового» этапа шейдера частиц. .. _class_VisualShader_constant_TYPE_PROCESS: .. rst-class:: classref-enumeration-constant :ref:`Type` **TYPE_PROCESS** = ``4`` Функция для этапа «обработки» шейдера частиц. .. _class_VisualShader_constant_TYPE_COLLIDE: .. rst-class:: classref-enumeration-constant :ref:`Type` **TYPE_COLLIDE** = ``5`` Функция для этапа «столкновения» (обработчик столкновений частиц) шейдера частиц. .. _class_VisualShader_constant_TYPE_START_CUSTOM: .. rst-class:: classref-enumeration-constant :ref:`Type` **TYPE_START_CUSTOM** = ``6`` Функция для «стартового» этапа шейдера частиц с настраиваемым выводом. .. _class_VisualShader_constant_TYPE_PROCESS_CUSTOM: .. rst-class:: classref-enumeration-constant :ref:`Type` **TYPE_PROCESS_CUSTOM** = ``7`` Функция для этапа «обработки» шейдера частиц с настраиваемым выводом. .. _class_VisualShader_constant_TYPE_SKY: .. rst-class:: classref-enumeration-constant :ref:`Type` **TYPE_SKY** = ``8`` Шейдер для неба трехмерной среды. .. _class_VisualShader_constant_TYPE_FOG: .. rst-class:: classref-enumeration-constant :ref:`Type` **TYPE_FOG** = ``9`` Вычислительный шейдер, который запускается для каждого фрокселя карты объемного тумана. .. _class_VisualShader_constant_TYPE_MAX: .. rst-class:: classref-enumeration-constant :ref:`Type` **TYPE_MAX** = ``10`` Представляет размер перечисления :ref:`Type`. .. rst-class:: classref-item-separator ---- .. _enum_VisualShader_VaryingMode: .. rst-class:: classref-enumeration enum **VaryingMode**: :ref:`🔗` .. _class_VisualShader_constant_VARYING_MODE_VERTEX_TO_FRAG_LIGHT: .. rst-class:: classref-enumeration-constant :ref:`VaryingMode` **VARYING_MODE_VERTEX_TO_FRAG_LIGHT** = ``0`` Переменная передается из функции ``Vertex`` в функции ``Fragment`` и ``Light``. .. _class_VisualShader_constant_VARYING_MODE_FRAG_TO_LIGHT: .. rst-class:: classref-enumeration-constant :ref:`VaryingMode` **VARYING_MODE_FRAG_TO_LIGHT** = ``1`` Переменная передается из функции ``Fragment`` в функцию ``Light``. .. _class_VisualShader_constant_VARYING_MODE_MAX: .. rst-class:: classref-enumeration-constant :ref:`VaryingMode` **VARYING_MODE_MAX** = ``2`` Представляет размер перечисления :ref:`VaryingMode`. .. rst-class:: classref-item-separator ---- .. _enum_VisualShader_VaryingType: .. rst-class:: classref-enumeration enum **VaryingType**: :ref:`🔗` .. _class_VisualShader_constant_VARYING_TYPE_FLOAT: .. rst-class:: classref-enumeration-constant :ref:`VaryingType` **VARYING_TYPE_FLOAT** = ``0`` Varying имеет тип :ref:`float`. .. _class_VisualShader_constant_VARYING_TYPE_INT: .. rst-class:: classref-enumeration-constant :ref:`VaryingType` **VARYING_TYPE_INT** = ``1`` Varying имеет тип :ref:`int`. .. _class_VisualShader_constant_VARYING_TYPE_UINT: .. rst-class:: classref-enumeration-constant :ref:`VaryingType` **VARYING_TYPE_UINT** = ``2`` Varying имеет тип unsigned :ref:`int`. .. _class_VisualShader_constant_VARYING_TYPE_VECTOR_2D: .. rst-class:: classref-enumeration-constant :ref:`VaryingType` **VARYING_TYPE_VECTOR_2D** = ``3`` Varying имеет тип :ref:`Vector2`. .. _class_VisualShader_constant_VARYING_TYPE_VECTOR_3D: .. rst-class:: classref-enumeration-constant :ref:`VaryingType` **VARYING_TYPE_VECTOR_3D** = ``4`` Varying имеет тип :ref:`Vector3`. .. _class_VisualShader_constant_VARYING_TYPE_VECTOR_4D: .. rst-class:: classref-enumeration-constant :ref:`VaryingType` **VARYING_TYPE_VECTOR_4D** = ``5`` Varying имеет тип :ref:`Vector4`. .. _class_VisualShader_constant_VARYING_TYPE_BOOLEAN: .. rst-class:: classref-enumeration-constant :ref:`VaryingType` **VARYING_TYPE_BOOLEAN** = ``6`` Varying имеет тип :ref:`bool`. .. _class_VisualShader_constant_VARYING_TYPE_TRANSFORM: .. rst-class:: classref-enumeration-constant :ref:`VaryingType` **VARYING_TYPE_TRANSFORM** = ``7`` Varying имеет тип :ref:`Transform3D`. .. _class_VisualShader_constant_VARYING_TYPE_MAX: .. rst-class:: classref-enumeration-constant :ref:`VaryingType` **VARYING_TYPE_MAX** = ``8`` Представляет размер перечисления :ref:`VaryingType`. .. rst-class:: classref-section-separator ---- .. rst-class:: classref-descriptions-group Константы ------------------ .. _class_VisualShader_constant_NODE_ID_INVALID: .. rst-class:: classref-constant **NODE_ID_INVALID** = ``-1`` :ref:`🔗` Указывает на недопустимый узел **VisualShader**. .. _class_VisualShader_constant_NODE_ID_OUTPUT: .. rst-class:: classref-constant **NODE_ID_OUTPUT** = ``0`` :ref:`🔗` Указывает выходной узел **VisualShader**. .. rst-class:: classref-section-separator ---- .. rst-class:: classref-descriptions-group Описания свойств -------------------------------- .. _class_VisualShader_property_graph_offset: .. rst-class:: classref-property :ref:`Vector2` **graph_offset** :ref:`🔗` .. rst-class:: classref-property-setget - |void| **set_graph_offset**\ (\ value\: :ref:`Vector2`\ ) - :ref:`Vector2` **get_graph_offset**\ (\ ) **Устарело:** This property does nothing and always equals to zero. Устарело. .. rst-class:: classref-section-separator ---- .. rst-class:: classref-descriptions-group Описания метода ------------------------------ .. _class_VisualShader_method_add_node: .. rst-class:: classref-method |void| **add_node**\ (\ type\: :ref:`Type`, node\: :ref:`VisualShaderNode`, position\: :ref:`Vector2`, id\: :ref:`int`\ ) :ref:`🔗` Добавляет указанный ``node`` в шейдер. .. rst-class:: classref-item-separator ---- .. _class_VisualShader_method_add_varying: .. rst-class:: classref-method |void| **add_varying**\ (\ name\: :ref:`String`, mode\: :ref:`VaryingMode`, type\: :ref:`VaryingType`\ ) :ref:`🔗` Добавляет в шейдер новый узел переменного значения. .. rst-class:: classref-item-separator ---- .. _class_VisualShader_method_attach_node_to_frame: .. rst-class:: classref-method |void| **attach_node_to_frame**\ (\ type\: :ref:`Type`, id\: :ref:`int`, frame\: :ref:`int`\ ) :ref:`🔗` Прикрепляет указанный узел к указанному фрейму. .. rst-class:: classref-item-separator ---- .. _class_VisualShader_method_can_connect_nodes: .. rst-class:: classref-method :ref:`bool` **can_connect_nodes**\ (\ type\: :ref:`Type`, from_node\: :ref:`int`, from_port\: :ref:`int`, to_node\: :ref:`int`, to_port\: :ref:`int`\ ) |const| :ref:`🔗` Возвращает ``true``, если указанные узлы и порты могут быть соединены вместе. .. rst-class:: classref-item-separator ---- .. _class_VisualShader_method_connect_nodes: .. rst-class:: classref-method :ref:`Error` **connect_nodes**\ (\ type\: :ref:`Type`, from_node\: :ref:`int`, from_port\: :ref:`int`, to_node\: :ref:`int`, to_port\: :ref:`int`\ ) :ref:`🔗` Соединяет указанные узлы и порты. .. rst-class:: classref-item-separator ---- .. _class_VisualShader_method_connect_nodes_forced: .. rst-class:: classref-method |void| **connect_nodes_forced**\ (\ type\: :ref:`Type`, from_node\: :ref:`int`, from_port\: :ref:`int`, to_node\: :ref:`int`, to_port\: :ref:`int`\ ) :ref:`🔗` Подключает указанные узлы и порты, даже если они не могут быть подключены. Такое подключение недействительно и не будет работать должным образом. .. rst-class:: classref-item-separator ---- .. _class_VisualShader_method_detach_node_from_frame: .. rst-class:: classref-method |void| **detach_node_from_frame**\ (\ type\: :ref:`Type`, id\: :ref:`int`\ ) :ref:`🔗` Отсоединяет указанный узел от фрейма, к которому он прикреплен. .. rst-class:: classref-item-separator ---- .. _class_VisualShader_method_disconnect_nodes: .. rst-class:: classref-method |void| **disconnect_nodes**\ (\ type\: :ref:`Type`, from_node\: :ref:`int`, from_port\: :ref:`int`, to_node\: :ref:`int`, to_port\: :ref:`int`\ ) :ref:`🔗` Соединяет указанные узлы и порты. .. rst-class:: classref-item-separator ---- .. _class_VisualShader_method_get_node: .. rst-class:: classref-method :ref:`VisualShaderNode` **get_node**\ (\ type\: :ref:`Type`, id\: :ref:`int`\ ) |const| :ref:`🔗` Возвращает экземпляр узла шейдера с указанными ``type`` и ``id``. .. rst-class:: classref-item-separator ---- .. _class_VisualShader_method_get_node_connections: .. rst-class:: classref-method :ref:`Array`\[:ref:`Dictionary`\] **get_node_connections**\ (\ type\: :ref:`Type`\ ) |const| :ref:`🔗` Возвращает список подключенных узлов указанного типа. .. rst-class:: classref-item-separator ---- .. _class_VisualShader_method_get_node_list: .. rst-class:: classref-method :ref:`PackedInt32Array` **get_node_list**\ (\ type\: :ref:`Type`\ ) |const| :ref:`🔗` Возвращает список всех узлов шейдера указанного типа. .. rst-class:: classref-item-separator ---- .. _class_VisualShader_method_get_node_position: .. rst-class:: classref-method :ref:`Vector2` **get_node_position**\ (\ type\: :ref:`Type`, id\: :ref:`int`\ ) |const| :ref:`🔗` Возвращает положение указанного узла в графе шейдера. .. rst-class:: classref-item-separator ---- .. _class_VisualShader_method_get_valid_node_id: .. rst-class:: classref-method :ref:`int` **get_valid_node_id**\ (\ type\: :ref:`Type`\ ) |const| :ref:`🔗` Возвращает следующий действительный ID узла, который можно добавить в граф шейдера. .. rst-class:: classref-item-separator ---- .. _class_VisualShader_method_has_varying: .. rst-class:: classref-method :ref:`bool` **has_varying**\ (\ name\: :ref:`String`\ ) |const| :ref:`🔗` Возвращает ``true``, если шейдер имеет переменную с указанным ``name``. .. rst-class:: classref-item-separator ---- .. _class_VisualShader_method_is_node_connection: .. rst-class:: classref-method :ref:`bool` **is_node_connection**\ (\ type\: :ref:`Type`, from_node\: :ref:`int`, from_port\: :ref:`int`, to_node\: :ref:`int`, to_port\: :ref:`int`\ ) |const| :ref:`🔗` Возвращает ``true``, если указанный узел и порт существуют. .. rst-class:: classref-item-separator ---- .. _class_VisualShader_method_remove_node: .. rst-class:: classref-method |void| **remove_node**\ (\ type\: :ref:`Type`, id\: :ref:`int`\ ) :ref:`🔗` Удаляет указанный узел из шейдера. .. rst-class:: classref-item-separator ---- .. _class_VisualShader_method_remove_varying: .. rst-class:: classref-method |void| **remove_varying**\ (\ name\: :ref:`String`\ ) :ref:`🔗` Удаляет узел переменного значения с указанным ``name``. Выводит ошибку, если узел с таким именем не найден. .. rst-class:: classref-item-separator ---- .. _class_VisualShader_method_replace_node: .. rst-class:: classref-method |void| **replace_node**\ (\ type\: :ref:`Type`, id\: :ref:`int`, new_class\: :ref:`StringName`\ ) :ref:`🔗` Заменяет указанный узел узлом нового типа класса. .. rst-class:: classref-item-separator ---- .. _class_VisualShader_method_set_mode: .. rst-class:: classref-method |void| **set_mode**\ (\ mode\: :ref:`Mode`\ ) :ref:`🔗` Устанавливает режим этого шейдера. .. rst-class:: classref-item-separator ---- .. _class_VisualShader_method_set_node_position: .. rst-class:: classref-method |void| **set_node_position**\ (\ type\: :ref:`Type`, id\: :ref:`int`, position\: :ref:`Vector2`\ ) :ref:`🔗` Устанавливает положение указанного узла. .. |virtual| replace:: :abbr:`virtual (Этот метод обычно должен быть переопределен пользователем, чтобы иметь какой-либо эффект.)` .. |required| replace:: :abbr:`required (This method is required to be overridden when extending its base class.)` .. |const| replace:: :abbr:`const (Этот метод не имеет побочных эффектов. Он не изменяет ни одну из переменных-членов экземпляра.)` .. |vararg| replace:: :abbr:`vararg (Этот метод принимает любое количество аргументов после описанных здесь.)` .. |constructor| replace:: :abbr:`constructor (Этот метод используется для создания типа.)` .. |static| replace:: :abbr:`static (Этот метод не нуждается в вызове экземпляра, поэтому его можно вызвать напрямую, используя имя класса.)` .. |operator| replace:: :abbr:`operator (Этот метод описывает допустимый оператор для использования с этим типом в качестве левого операнда.)` .. |bitfield| replace:: :abbr:`BitField (Это значение является целым числом, составленным как битовая маска следующих флагов.)` .. |void| replace:: :abbr:`void (Нет возвращаемого значения.)`