Shaders CanvasItem¶
Los shaders CanvasItem se usan para dibujar todos los elementos 2D en Godot. Estos incluyen todos los nodos que heredan de CanvasItems, y todos los elementos GUI.
Los shaders CanvasItem contienen menos variables incorporadas y funcionalidad que los shaders espaciales, pero mantienen la misma estructura básica con funciones de vértice, fragmento y procesador de luz.
Modos de renderizado¶
Modo de renderizado |
Descripción |
---|---|
blend_mix |
Modo de blending por mezcla (alfa es transparencia), es el modo por defecto. |
blend_add |
Modo de blending aditivo. |
blend_sub |
Modo de blending substractivo. |
blend_mul |
Modo de blending multiplicativo. |
blend_premul_alpha |
Modo de blending con alfa premultiplicado. |
blend_disabled |
Desactivar la mezcla, los valores (incluido el alfa) se escriben tal cual. |
unshaded |
El resultado es sólo albedo. El material no recibe luces ni shading. |
light_only |
Sólo dibuja en light pass (cuando se usa multipass). |
skip_vertex_transform |
VERTEX/NORMAL/etc necesitan ser transformados manualmente en función de vértice. |
Funciones propias¶
Los valores marcados como "in" son de sólo lectura. Los valores marcados como "out" son de escritura opcional y no necesariamente contendrán valores sensibles. Los valores marcados como "inout" proporcionan un valor por defecto sensato y pueden escribirse opcionalmente. Los valores marcados como "in" no son objeto de escritura y no están marcados.
Funciones incorporadas globales¶
Las internas globales están disponibles en todas partes, incluyendo las funciones personalizadas.
Integrado |
Descripción |
---|---|
en real TIME |
Tiempo global desde que el motor ha empezado, en segundos (siempre positivo). Está sujeto a la configuración de rollover (que son 3.600 segundos por defecto). No está afectado por time_scale o por pausa, pero puedes anular la escala de tiempo de la variable |
Vertex built-ins¶
Los datos del vértice (VERTEX
) se presentan en el espacio local (coordenadas de píxeles, relativas a la cámara). Si no se escriben, estos valores no se modificarán y se pasarán tal como llegaron.
El usuario puede desactivar la transformación incorporada de modelview (la proyección seguirá sucediendo más tarde) y hacerlo manualmente con el siguiente código:
shader_type canvas_item;
render_mode skip_vertex_transform;
void vertex() {
VERTEX = (WORLD_MATRIX * (EXTRA_MATRIX * vec4(VERTEX, 0.0, 1.0))).xy;
}
Nota
En realidad ``WORLD_MATRIX``es un matriz "modelview". Toma la entrada en espacio local y la convierte en espacio de vista.
Para obtener las coordenadas de un vértice en espacio de mundo, hay que pasarlo en un constante Uniform personalizado:
material.set_shader_param("global_transform", get_global_transform())
Luego, en el shader de vértice:
uniform mat4 global_transform;
varying vec2 world_position;
void vertex(){
world_position = (global_transform * vec4(VERTEX, 0.0, 1.0)).xy;
}
entonces se puede usar``world_position`` o en la función de vértice or de fragment.
Otros típos integrados, como UV y COLOR, también se pasan a la función fragment si no están modificados.
Para el instanciamiento, la variable INSTANCE_CUSTOM contiene los datos personalizados de la instancia. Cuando se usan partículas, esta información es normalment:
x: Ángulo de rotación en radianes.
y: Fase durante la vida (0 a 1).
z: Fotograma de animación.
Integrado |
Descripción |
---|---|
in mat4 WORLD_MATRIX |
Transformación del espacio Image al espacio de vista. |
in mat4 EXTRA_MATRIX |
Transform extra. |
in mat4 PROJECTION_MATRIX |
Ver el espacio para recortar la transformación del espacio. |
in vec4 INSTANCE_CUSTOM |
Datos personalizados de la instancia. |
in booleano AT_LIGHT_PASS |
|
inout vec2 VERTEX |
Vértice, en el espacio de la imagen. |
in vec2 TEXTURE_PIXEL_SIZE |
Tamaño de píxel normalizado de la textura 2D por defecto. Para un Sprite con una textura de tamaño 64x32px, TEXTURE_PIXEL_SIZE = |
inout vec2 UV |
Siguiente Coordenada. |
inout vec4 COLOR |
El color del vértice primitivo. |
in vec4 MODULATE |
Color final de modulación. Si se usa, COLOR no se multiplicará por modular automáticamente después de la función de fragmento. |
inout real POINT_SIZE |
Tamaño del punto para el dibujo del punto. |
Fragment built-ins¶
Ciertos nodos (por ejemplo, Sprites) muestran una textura por defecto. Sin embargo, cuando una función de fragmento personalizada se adjunta a estos nodos, la búsqueda de la textura debe hacerse manualmente. Godot no provee el color de la textura en la variable incorporada COLOR
; para leer el color de la textura para tales nodos, usa:
COLOR = texture(TEXTURE, UV);
Esto difiere del comportamiento del mapa normal incorporado. Si se adjunta un mapa normal, Godot lo usa por defecto y asigna su valor a la variable NORMAL
incorporada. Si se usa un mapa normal destinado a ser usado en 3D, aparecerá invertido. Para usarlo en tu shader, debes asignarlo a la propiedad NORMALMAP
. Godot se encargará de convertirlo para su uso en 2D y sobrescribir NORMAL
.
NORMALMAP = texture(NORMAL_TEXTURE, UV).rgb;
Integrado |
Descripción |
---|---|
in vec4 FRAGCOORD |
Coordenadas del centro de los píxeles. En el espacio de la pantalla. |
inout vec3 NORMAL |
Lectura normal de NORMAL_TEXTURE. Escrito. |
out vec3 NORMALMAP |
Configura mapas normales destinados a 3D para su uso en 2D. Si se usa, sobrescribe NORMAL. |
inout real NORMALMAP_DEPTH |
Profundidad del Normalmap para el escalado. |
in vec2 UV |
UV de la función del vértice. |
inout vec4 COLOR |
Color de la función del vértice y color del fragmento de salida. Si no se usa, se fijará en el color de la TEXTURE. |
in vec4 MODULATE |
Color final de modulación. Si se usa, COLOR no se multiplicará por modular automáticamente después de la función de fragmento. |
in sampler2D TEXTURE |
Textura 2D por defecto. |
in sampler2D NORMAL_TEXTURE |
Textura normal 2D por defecto. |
in vec2 TEXTURE_PIXEL_SIZE |
Tamaño de píxel normalizado de la textura 2D por defecto. Para un Sprite con una textura de tamaño 64x32px, TEXTURE_PIXEL_SIZE = |
in vec2 SCREEN_UV |
Pantalla UV para usar con SCREEN_TEXTURE. |
in vec2 SCREEN_PIXEL_SIZE |
El tamaño de los píxeles individuales. Igual a la inversa de la resolución. |
in vec2 POINT_COORD |
Coordenadas para dibujar puntos. |
in booleano AT_LIGHT_PASS |
|
in sampler2D SCREEN_TEXTURE |
La textura de la pantalla, los mipmaps contienen versiones gaussianas difuminadas. |
Light built-ins¶
Las funciones de los procesadores de luz funcionan de manera diferente en 2D que en 3D. En los shaders CanvasItem, el shader se llama una vez para el objeto que se dibuja, y luego una vez para cada luz que toca ese objeto en la escena. Utiliza el modo_render_mode unshaded
si no quieres que se produzca ningún paso de luz para ese objeto. Usa el modo render_mode light_only
si sólo quieres que se produzcan pases de luz para ese objeto; esto puede ser útil cuando sólo quieres que el objeto sea visible donde está cubierto por la luz.
Cuando el shader está en un pase de luz, la variable AT_LIGHT_PASS
será true
.
Integrado |
Descripción |
---|---|
in vec4 FRAGCOORD |
Coordenadas del centro de los píxeles. En el espacio de la pantalla. |
in vec3 NORMAL |
Entrada normal. Aunque se pase este valor, el cálculo normal sigue ocurriendo fuera de esta función. |
in vec2 UV |
UV de la función de vértice, equivalente a la UV en la función de fragmento. |
in vec4 COLOR |
Color de entrada. Esta es la salida de la función de fragmento (con la modulación final aplicada, si MODULATE no se utiliza en ninguna función del shader). |
in vec4 MODULATE |
Color final de modulación. Si se usa, COLOR no se multiplicará por modular automáticamente después de la función de fragmento. |
sampler2D TEXTURE |
Textura actual en uso para CanvasItem. |
in vec2 TEXTURE_PIXEL_SIZE |
Tamaño de píxel normalizado de la textura 2D por defecto. Para un Sprite con una textura de tamaño 64x32px, TEXTURE_PIXEL_SIZE = |
in vec2 SCREEN_UV |
SCREEN_TEXTURE Coordenadas (para usar con la textura de la pantalla). |
in vec2 POINT_COORD |
UV para Point Sprite. |
inout vec2 LIGHT_VEC |
Vector de luz a fragmento en coordenadas locales. Puede ser modificado para alterar la dirección de la iluminación cuando se usan mapas normales. |
inout vec2 SHADOW_VEC |
Vector de luz a fragmento en coordenadas locales. Puede ser modificado para alterar el cálculo de la sombra. |
inout real LIGHT_HEIGHT |
La altura de la luz. Sólo es efectivo cuando se usan normales. |
inout vec4 LIGHT_COLOR |
Color de la Luz. |
in vec2 LIGHT_UV |
UV para la textura de la Luz. |
out vec4 SHADOW_COLOR |
El color de la Sombra de la Luz. |
inout vec4 LIGHT |
Valor de la textura de la Luz y el color de salida. Puede ser modificado. Si no se usa, la función de luz es ignorada. |