Up to date

This page is up to date for Godot 4.2. If you still find outdated information, please open an issue.

VisualShader

继承: Shader < Resource < RefCounted < Object

带有可视化编辑器的自定义着色器程序。

描述

该类提供了一个类似图形的可视化编辑器,用于创建 Shader。尽管 VisualShader 不需要编码,但它们与脚本着色器共享相同的逻辑。它们使用可以相互连接的 VisualShaderNode 来控制着色器的流。可视化着色器图在幕后被转换为脚本着色器。

教程

属性

Vector2

graph_offset

Vector2(0, 0)

方法

void

add_node ( Type type, VisualShaderNode node, Vector2 position, int id )

void

add_varying ( String name, VaryingMode mode, VaryingType type )

bool

can_connect_nodes ( Type type, int from_node, int from_port, int to_node, int to_port ) const

Error

connect_nodes ( Type type, int from_node, int from_port, int to_node, int to_port )

void

connect_nodes_forced ( Type type, int from_node, int from_port, int to_node, int to_port )

void

disconnect_nodes ( Type type, int from_node, int from_port, int to_node, int to_port )

VisualShaderNode

get_node ( Type type, int id ) const

Dictionary[]

get_node_connections ( Type type ) const

PackedInt32Array

get_node_list ( Type type ) const

Vector2

get_node_position ( Type type, int id ) const

int

get_valid_node_id ( Type type ) const

bool

has_varying ( String name ) const

bool

is_node_connection ( Type type, int from_node, int from_port, int to_node, int to_port ) const

void

remove_node ( Type type, int id )

void

remove_varying ( String name )

void

replace_node ( Type type, int id, StringName new_class )

void

set_mode ( Mode mode )

void

set_node_position ( Type type, int id, Vector2 position )


枚举

enum Type:

Type TYPE_VERTEX = 0

顶点着色器,对顶点进行操作。

Type TYPE_FRAGMENT = 1

片段着色器,对片段(像素)进行操作。

Type TYPE_LIGHT = 2

用于光线计算的着色器。

Type TYPE_START = 3

粒子着色器的“开始”阶段所使用的函数。

Type TYPE_PROCESS = 4

粒子着色器的“处理”阶段所使用的函数。

Type TYPE_COLLIDE = 5

粒子着色器的“碰撞”阶段所使用的函数(粒子碰撞处理器)。

Type TYPE_START_CUSTOM = 6

粒子着色器的“开始”阶段所使用的函数,带自定义输出。

Type TYPE_PROCESS_CUSTOM = 7

粒子着色器的“处理”阶段所使用的函数,带自定义输出。

Type TYPE_SKY = 8

3D 环境中天空的着色器。

Type TYPE_FOG = 9

为体积雾贴图的每个片段体素运行的一种计算着色器。

Type TYPE_MAX = 10

代表 Type 枚举的大小。


enum VaryingMode:

VaryingMode VARYING_MODE_VERTEX_TO_FRAG_LIGHT = 0

Varying 从 Vertex 函数传到 FragmentLight 函数。

VaryingMode VARYING_MODE_FRAG_TO_LIGHT = 1

Varying 从 Fragment 函数传到 Light 函数。

VaryingMode VARYING_MODE_MAX = 2

代表 VaryingMode 枚举的大小。


enum VaryingType:

VaryingType VARYING_TYPE_FLOAT = 0

Varying 的类型为 float

VaryingType VARYING_TYPE_INT = 1

Varying 的类型为 int

VaryingType VARYING_TYPE_UINT = 2

Varying 的类型为无符号 int

VaryingType VARYING_TYPE_VECTOR_2D = 3

Varying 的类型为 Vector2

VaryingType VARYING_TYPE_VECTOR_3D = 4

Varying 的类型为 Vector3

VaryingType VARYING_TYPE_VECTOR_4D = 5

Varying 的类型为 Vector2

VaryingType VARYING_TYPE_BOOLEAN = 6

Varying 的类型为 bool

VaryingType VARYING_TYPE_TRANSFORM = 7

Varying 的类型为 Transform2D

VaryingType VARYING_TYPE_MAX = 8

代表 VaryingType 枚举的大小。


常量

NODE_ID_INVALID = -1

表示无效的 VisualShader 节点。

NODE_ID_OUTPUT = 0

表示 VisualShader 的输出节点。


属性说明

Vector2 graph_offset = Vector2(0, 0)

  • void set_graph_offset ( Vector2 value )

  • Vector2 get_graph_offset ( )

整个图的偏移向量。


方法说明

void add_node ( Type type, VisualShaderNode node, Vector2 position, int id )

向着色器中添加指定的节点 node


void add_varying ( String name, VaryingMode mode, VaryingType type )

向着色器中添加新的 varying 值节点。


bool can_connect_nodes ( Type type, int from_node, int from_port, int to_node, int to_port ) const

如果指定节点和端口可以连接在一起,则返回 true


Error connect_nodes ( Type type, int from_node, int from_port, int to_node, int to_port )

连接指定的节点和端口。


void connect_nodes_forced ( Type type, int from_node, int from_port, int to_node, int to_port )

连接指定的节点和端口,即使它们无法连接。这样的连接是无效的,将不能正常工作。


void disconnect_nodes ( Type type, int from_node, int from_port, int to_node, int to_port )

连接指定的节点和端口。


VisualShaderNode get_node ( Type type, int id ) const

返回具有指定 typeid 的着色器节点实例。


Dictionary[] get_node_connections ( Type type ) const

返回具有指定类型的连接节点的列表。


PackedInt32Array get_node_list ( Type type ) const

返回着色器中具有指定类型的所有节点的列表。


Vector2 get_node_position ( Type type, int id ) const

返回指定节点在着色器图中的位置。


int get_valid_node_id ( Type type ) const

返回能够加入到着色器图中的下一个有效节点 ID。


bool has_varying ( String name ) const

如果着色器中存在名为 name 的 varying 则返回 true


bool is_node_connection ( Type type, int from_node, int from_port, int to_node, int to_port ) const

如果指定的节点和端口连接存在,返回 true


void remove_node ( Type type, int id )

从着色器中删除指定的节点。


void remove_varying ( String name )

返回名为 name 的 varying 值节点。如果不存在该名称的节点则输出错误。


void replace_node ( Type type, int id, StringName new_class )

将指定节点替换为新类型的节点。


void set_mode ( Mode mode )

设置该着色器的模式。


void set_node_position ( Type type, int id, Vector2 position )

设置指定节点的位置。