Attention: Here be dragons
This is the latest
(unstable) version of this documentation, which may document features
not available in or compatible with released stable versions of Godot.
Checking the stable version of the documentation...
VisualShader
继承: Shader < Resource < RefCounted < Object
带有可视化编辑器的自定义着色器程序。
描述
该类提供了一个类似图形的可视化编辑器,用于创建 Shader。尽管 VisualShader 不需要编码,但它们与脚本着色器共享相同的逻辑。它们使用可以相互连接的 VisualShaderNode 来控制着色器的流。可视化着色器图在幕后被转换为脚本着色器。
教程
属性
|
方法
void |
add_node(type: Type, node: VisualShaderNode, position: Vector2, id: int) |
void |
add_varying(name: String, mode: VaryingMode, type: VaryingType) |
void |
attach_node_to_frame(type: Type, id: int, frame: int) |
can_connect_nodes(type: Type, from_node: int, from_port: int, to_node: int, to_port: int) const |
|
connect_nodes(type: Type, from_node: int, from_port: int, to_node: int, to_port: int) |
|
void |
connect_nodes_forced(type: Type, from_node: int, from_port: int, to_node: int, to_port: int) |
void |
detach_node_from_frame(type: Type, id: int) |
void |
disconnect_nodes(type: Type, from_node: int, from_port: int, to_node: int, to_port: int) |
get_node_connections(type: Type) const |
|
get_node_list(type: Type) const |
|
get_node_position(type: Type, id: int) const |
|
get_valid_node_id(type: Type) const |
|
has_varying(name: String) const |
|
is_node_connection(type: Type, from_node: int, from_port: int, to_node: int, to_port: int) const |
|
void |
remove_node(type: Type, id: int) |
void |
remove_varying(name: String) |
void |
replace_node(type: Type, id: int, new_class: StringName) |
void |
|
void |
set_node_position(type: Type, id: int, position: Vector2) |
枚举
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
函数传到 Fragment
和 Light
函数。
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 add_node(type: Type, node: VisualShaderNode, position: Vector2, id: int) 🔗
向着色器中添加指定的节点 node
。
void add_varying(name: String, mode: VaryingMode, type: VaryingType) 🔗
向着色器中添加新的 varying 值节点。
void attach_node_to_frame(type: Type, id: int, frame: int) 🔗
将给定的节点附加到给定的框。
bool can_connect_nodes(type: Type, from_node: int, from_port: int, to_node: int, to_port: int) const 🔗
如果指定节点和端口可以连接在一起,则返回 true
。
Error connect_nodes(type: Type, from_node: int, from_port: int, to_node: int, to_port: int) 🔗
连接指定的节点和端口。
void connect_nodes_forced(type: Type, from_node: int, from_port: int, to_node: int, to_port: int) 🔗
连接指定的节点和端口,即使它们无法连接。这样的连接是无效的,将不能正常工作。
void detach_node_from_frame(type: Type, id: int) 🔗
将给定节点与其所附加的框分离。
void disconnect_nodes(type: Type, from_node: int, from_port: int, to_node: int, to_port: int) 🔗
连接指定的节点和端口。
VisualShaderNode get_node(type: Type, id: int) const 🔗
返回具有指定 type
和 id
的着色器节点实例。
Array[Dictionary] get_node_connections(type: Type) const 🔗
返回具有指定类型的连接节点的列表。
PackedInt32Array get_node_list(type: Type) const 🔗
返回着色器中具有指定类型的所有节点的列表。
Vector2 get_node_position(type: Type, id: int) const 🔗
返回指定节点在着色器图中的位置。
int get_valid_node_id(type: Type) const 🔗
返回能够加入到着色器图中的下一个有效节点 ID。
bool has_varying(name: String) const 🔗
如果着色器中存在名为 name
的 varying 则返回 true
。
bool is_node_connection(type: Type, from_node: int, from_port: int, to_node: int, to_port: int) const 🔗
如果指定的节点和端口连接存在,返回 true
。
void remove_node(type: Type, id: int) 🔗
从着色器中删除指定的节点。
void remove_varying(name: String) 🔗
返回名为 name
的 varying 值节点。如果不存在该名称的节点则输出错误。
void replace_node(type: Type, id: int, new_class: StringName) 🔗
将指定节点替换为新类型的节点。
设置该着色器的模式。
void set_node_position(type: Type, id: int, position: Vector2) 🔗
设置指定节点的位置。