Up to date

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

Shaders espaciales

Los shaders espaciales se utilizan para sombrear objetos 3D. Son el tipo más complejo shader que ofrece Godot. Los shaders espaciales son altamente configurables con diferentes modos de renderización y diferentes opciones de renderización (por ejemplo, dispersión en el subsuelo, transmisión, oclusión ambiental, iluminación del borde, etc.). Los usuarios pueden opcionalmente escribir vértices, fragmentos y funciones de procesador de luz para afectar a la forma en que se dibujan los objetos.

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.

depth_draw_opaque

Sólo dibuja "depth" para geometría opaca (no transparente).

depth_draw_always

Siempre dibuja "depth" (opaco y transparente).

depth_draw_never

Nunca dibuja depth.

depth_prepass_alpha

Realiza un pre-pass de depth opaco para geometría transparente.

depth_test_disabled

Desactiva testing de depth.

sss_mode_skin

Modo Dispersión Subsuperficial (Subsurface Scattering) para piel (skin).

cull_back

Culling de caras internas (por defecto).

cull_front

Culling de caras frontales.

cull_disabled

Culling deshabilitado (doble cara).

unshaded

El resultado es sólo albedo. El material no recibe luces ni shading.

wireframe

Geometry draws using lines.

diffuse_burley

Burley (Disney PBS) for diffuse (default).

diffuse_lambert

Lambert shading for diffuse.

diffuse_lambert_wrap

Utiliza Lambert wrapping (dependiente de roughness) para diffuse.

diffuse_toon

Shading Toon para diffuse.

specular_schlick_ggx

Usa Schlick-GGX para specular (por defecto).

specular_toon

Usa Toon para specular.

specular_disabled

Deshabilita specular.

skip_vertex_transform

VERTEX/NORMAL/etc. Necesitan ser transformados manualmente en función de vértice.

world_vertex_coords

VERTEX/NORMAL/etc son modificados en coordenadas del mundo en lugar de locales.

ensure_correct_normals

Se usa cuando se aplica una escala no uniforme a la malla.

shadows_disabled

Deshabilita las sombras de computación en shader.

ambient_light_disabled

Deshabilitar la contribución de la luz ambiental y el mapa de radiaciones.

sombra_a_opacidad

La iluminación modifica el alfa para que las áreas sombreadas sean opacas y las no sombreadas sean transparentes. Útil para superponer sombras a una cámara en AR.

vertex_lighting

Usa iluminación basada en vértices.

particle_trails

Enables the trails when used on particles geometry.

alpha_to_coverage

Modo Alpha antialiasing, ver aquí para más detalles.

alpha_to_coverage_and_one

Modo Alpha antialiasing, ver aquí para más detalles.

fog_disabled

Disable receiving depth-based or volumetric fog. Useful for blend_add materials like particles.

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, en segundos.

in float PI

A PI constant (3.141592). A ration of circle's circumference to its diameter and amount of radians in half turn.

in float TAU

A TAU constant (6.283185). An equivalent of PI * 2 and amount of radians in full turn.

in float E

A E constant (2.718281). Euler's number and a base of the natural logarithm.

Incorporados en Vertex

Los datos de los vértices (VERTEX, NORMAL, TANGENT, BITANGENT) se presentan en el espacio modelo local. Si no se escriben, estos valores no se modificarán y se pasarán tal como llegaron.

Opcionalmente pueden ser presentados en el espacio mundial usando el modo de representación world_vertex_coords.

Los usuarios pueden desactivar la transformada incorporada de modelview (la proyección seguirá sucediendo más tarde) y hacerlo manualmente con el siguiente código:

shader_type spatial;
render_mode skip_vertex_transform;

void vertex() {
    VERTEX = (MODELVIEW_MATRIX * vec4(VERTEX, 1.0)).xyz;
    NORMAL = normalize((MODELVIEW_MATRIX * vec4(NORMAL, 0.0)).xyz);
    // same as above for binormal and tangent, if normal mapping is used
}

Otras incorporadas, tales como UV, UV2 y COLOR, son también pasadas a la función fragmento si no se modifican.

Los usuarios pueden sobreescribir la vista del modelo y las transformaciones de la proyección usando la POSICIÓN incorporada. Cuando se usa POSICIÓN, el valor de VERTEX se ignora y la proyección no ocurre. Sin embargo, el valor pasado al shader de fragmentos sigue viniendo de VERTEX.

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.

Esto le permite ajustar fácilmente el shader a un sistema de partículas usando el material de partículas predeterminado. Cuando se escribe un shader de partículas personalizado, este valor puede ser usado como se desee.

Integrado

Descripción

en vec2 VIEWPORT_SIZE

Tamaño del viewport (en píxeles).

in mat4 VIEW_MATRIX

El espacio mundial para ver la transformada del espacio.

in mat4 INV_VIEW_MATRIX

Transform de espacio de vista a espacio de mundo.

in mat4 INV_PROJECTION_MATRIX

Recortar el espacio para ver la transformada del espacio.

in vec3 NODE_POSITION_WORLD

Node world space position.

in vec3 NODE_POSITION_VIEW

Node view space position.

in vec3 CAMERA_POSITION_WORLD

Posición de la cámara en espacio de mundo.

in vec3 CAMERA_DIRECTION_WORLD

Camera world space direction.

in booleano OUTPUT_IS_SRGB

true when output is in sRGB color space (this is true in the Compatibility renderer, false in Forward+ and Forward Mobile).

en entero INSTANCE_ID

ID de instancia para el instanciamiento.

in vec4 INSTANCE_CUSTOM

Datos personalizados de la instancia (para las partículas, en su mayoría).

in int VIEW_INDEX

The view that we are rendering. VIEW_MONO_LEFT (0) for Mono (not multiview) or left eye, VIEW_RIGHT (1) for right eye.

in int VIEW_MONO_LEFT

Constant for Mono or left eye, always 0.

in int VIEW_RIGHT

Constant for right eye, always 1.

in vec3 EYE_OFFSET

Position offset for the eye being rendered. Only applicable for multiview rendering.

inout vec3 VERTEX

Vertex en coordenadas locales.

in int VERTEX_ID

The index of the current vertex in the vertex buffer.

inout vec3 NORMAL

Normal en coordenadas locales.

inout vec3 TANGENT

Tangente en coordenadas locales.

inout vec3 BINORMAL

Binormal en coordenadas locales.

out vec4 POSITION

Si está escrito, sobreescribe la posición final del vértice.

inout vec2 UV

Canal principal de UV.

inout vec2 UV2

Canal secundario UV.

inout vec4 COLOR

Color de los vértices.

out real ROUGHNESS

Rugosidad para la iluminación del vértice.

inout real POINT_SIZE

Tamaño de punto para la representación de puntos.

inout mat4 MODELVIEW_MATRIX

Espacio de vista a el espacio de la transformada mundial (usarlo si es posible).

inout mat3 MODELVIEW_NORMAL_MATRIX

inout mat4 MODEL_MATRIX

Modelo de transformación del espacio en el mundo.

inout mat3 MODEL_NORMAL_MATRIX

inout mat4 PROJECTION_MATRIX

Ver el espacio para recortar la transformación del espacio.

inout uvec4 BONE_INDICES

inout vec4 BONE_WEIGHTS

in vec4 CUSTOM0

in vec4 CUSTOM1

in vec4 CUSTOM2

in vec4 CUSTOM3

Nota

MODELVIEW_MATRIX combines both the MODEL_MATRIX and VIEW_MATRIX and is better suited when floating point issues may arise. For example, if the object is very far away from the world origin, you may run into floating point issues when using the separated MODEL_MATRIX and VIEW_MATRIX.

Incorporados en Fragment

El uso por defecto de una función del procesador de fragmentos Godot es configurar las propiedades materiales de su objeto y dejar que el renderizador incorporado se encargue del shader final. Sin embargo, no es necesario que utilice todas estas propiedades, y si no las escribe, Godot optimizará la funcionalidad correspondiente.

Integrado

Descripción

en vec2 VIEWPORT_SIZE

Tamaño del viewport (en píxeles).

in vec4 FRAGCOORD

La coordenada del centro del píxel en el espacio de la pantalla. xy especifica la posición en la ventana, z especifica la profundidad del fragmento si no se usa DEPTH. El origen es abajo a la izquierda.

in booleano FRONT_FACING

true if current face if front face.

in vec3 VIEW

Normalized vector from fragment position to camera (in view space). This is the same for both perspective and orthogonal cameras.

in vec2 UV

UV que proviene de la función del vértice.

in vec2 UV2

UV2 que proviene de la función del vértice.

in vec4 COLOR

COLOR que proviene de la función del vértice.

in vec2 POINT_COORD

Coordenadas de puntos para dibujar puntos con POINT_SIZE.

in booleano OUTPUT_IS_SRGB

true when output is in sRGB color space (this is true in the Compatibility renderer, false in Forward+ and Forward Mobile).

in mat4 MODEL_MATRIX

Modelo de transformación del espacio en el mundo.

in mat3 MODEL_NORMAL_MATRIX

in mat4 VIEW_MATRIX

El espacio mundial para ver la transformada del espacio.

in mat4 INV_VIEW_MATRIX

Transform de espacio de vista a espacio de mundo.

in mat4 PROJECTION_MATRIX

Ver el espacio para recortar la transformación del espacio.

in mat4 INV_PROJECTION_MATRIX

Recortar el espacio para ver la transformada del espacio.

in vec3 NODE_POSITION_WORLD

Node position, in world space.

in vec3 NODE_POSITION_VIEW

Node position, in view space.

in vec3 CAMERA_POSITION_WORLD

Camera position, in world space.

in vec3 CAMERA_DIRECTION_WORLD

Camera direction, in world space.

in vec3 VERTEX

Vértice que proviene de la función de vértice (por defecto, en el espacio de visión).

in int VIEW_INDEX

The view that we are rendering. VIEW_MONO_LEFT (0) for Mono (not multiview) or left eye, VIEW_RIGHT (1) for right eye.

in int VIEW_MONO_LEFT

Constant for Mono or left eye, always 0.

in int VIEW_RIGHT

Constant for right eye, always 1.

in vec3 EYE_OFFSET

Position offset for the eye being rendered. Only applicable for multiview rendering.

sampler2D SCREEN_TEXTURE

Removed in Godot 4. Use a sampler2D with hint_screen_texture instead.

in vec2 SCREEN_UV

Muestra la coordenada UV para el píxel actual.

sampler2D DEPTH_TEXTURE

Removed in Godot 4. Use a sampler2D with hint_depth_texture instead.

out real DEPTH

Valor de profundidad personalizado (0..1). Si se está escribiendo en DEPTH en cualquier rama del shader, entonces es tu responsabilidad establecer el valor de DEPTH para todas las demás ramas. De lo contrario, la API gráfica las dejará sin inicializar.

inout vec3 NORMAL

Normal que viene de la función de vértice (por defecto, en el espacio de visión).

inout vec3 TANGENT

Tangente que proviene de la función del vértice.

inout vec3 BINORMAL

Binormal que proviene de la función del vértice.

out vec3 NORMAL_MAP

Ponga normal aquí si lee normal de una textura en lugar de NORMAL.

out float NORMAL_MAP_DEPTH

Profundidad de la variable de arriba. Por defecto es 1.0.

out vec3 ALBEDO

Albedo (blanco por defecto).

out real ALPHA

Alfa (0..1); si se escribe, el material irá a la tubería transparente.

out float ALPHA_SCISSOR_THRESHOLD

Si se escribe, se descartan los valores inferiores a una cierta cantidad de alfa.

out float ALPHA_HASH_SCALE

out float ALPHA_ANTIALIASING_EDGE

out vec2 ALPHA_TEXTURE_COORDINATE

out real METALLIC

Metálico (0..1).

out real SPECULAR

Especular. El valor por defecto es 0.5, mejor no modificarlo a menos que quiera cambiar el IOR.

out real ROUGHNESS

Rugosidad (0..1).

out real RIM

Rim (0..1). Si se usa, Godot calcula la iluminación del borde.

out real RIM_TINT

Rim Tint, va de 0 (blanco) a 1 (albedo). Si se usa, Godot calcula la iluminación del borde.

out real CLEARCOAT

Pequeña mancha especular añadida. Si se usa, Godot calcula Clearcoat.

out real CLEARCOAT_GLOSS

El brillo de Clearcoat. Si se usa, Godot calcula Clearcoat.

out real ANISOTROPY

Para distorsionar la mancha especular según el espacio tangencial.

out vec2 ANISOTROPY_FLOW

Dirección de la distorsión, uso con flowmaps.

out real SSS_STRENGTH

La fuerza del Subsurface Scattering. Si se usa, la Subsurface Scattering se aplicará al objeto.

out vec4 SSS_TRANSMITTANCE_COLOR

out float SSS_TRANSMITTANCE_DEPTH

out float SSS_TRANSMITTANCE_BOOST

inout vec3 BACKLIGHT

out real AO

La fuerza de la oclusión del ambiente. Para usar con AO precocinado.

out real AO_LIGHT_AFFECT

Cuánto AO afecta a las luces (0..1; por defecto 0).

out vec3 EMISSION

Color de la emisión (puede superar el 1,1,1 para HDR).

out vec4 FOG

If written to, blends final pixel color with FOG.rgb based on FOG.a.

out vec4 RADIANCE

If written to, blends environment map radiance with RADIANCE.rgb based on RADIANCE.a.

out vec4 IRRADIANCE

If written to, blends environment map IRRADIANCE with IRRADIANCE.rgb based on IRRADIANCE.a.

Nota

Los shaders que pasan por la tubería de transparencia cuando se escribe en ALPHA pueden presentar problemas de ordenación de transparencia. Lee la sección de ordenación de transparencia en la página de limitaciones de renderizado 3D para obtener más información y formas de evitar problemas.

Incorporados en Light

Las funciones del procesador de luz de escritura son completamente opcionales. Puedes saltarte la función de luz poniendo el modo de render_mode a unshaded. Si no se escribe ninguna función de luz, Godot utilizará las propiedades del material escritas en la función de fragmento para calcular la iluminación por ti (sujeto al render_mode).

La función de luz se llama para cada luz en cada píxel. Se llama dentro de un bucle para cada tipo de luz.

A continuación se muestra un ejemplo de una función de luz personalizada utilizando un modelo de iluminación lambertiano:

void light() {
    DIFFUSE_LIGHT += clamp(dot(NORMAL, LIGHT), 0.0, 1.0) * ATTENUATION * LIGHT_COLOR;
}

Si quieres que las luces se sumen, agrega la contribución de la luz a DIFUSE_LIGHT usando +=, en lugar de sobrescribirla.

Advertencia

La función light() no se ejecutará si el modo de render vertex_lighting está activado, o si Renderizado > Calidad > Sombreado > Forzar sombreado de vértices está activado en la configuración del proyecto. (Está activado por defecto en plataformas móviles)

Integrado

Descripción

en vec2 VIEWPORT_SIZE

Tamaño del viewport (en píxeles).

in vec4 FRAGCOORD

La coordenada del centro del píxel en el espacio de la pantalla. xy especifica la posición en la ventana, z especifica la profundidad del fragmento si no se usa DEPTH. El origen es abajo a la izquierda.

in mat4 MODEL_MATRIX

Modelo de transformación del espacio en el mundo.

in mat4 INV_VIEW_MATRIX

Transform de espacio de vista a espacio de mundo.

in mat4 VIEW_MATRIX

El espacio mundial para ver la transformada del espacio.

in mat4 PROJECTION_MATRIX

Ver el espacio para recortar la transformación del espacio.

in mat4 INV_PROJECTION_MATRIX

Recortar el espacio para ver la transformada del espacio.

in vec3 NORMAL

Vector normal, en el espacio de visión.

in vec2 UV

UV que proviene de la función del vértice.

in vec2 UV2

UV2 que proviene de la función del vértice.

in vec3 VIEW

Vector de vista, en el espacio de vista.

in vec3 LIGHT

Vector de luz, en el espacio de visión.

in vec3 LIGHT_COLOR

Color of light multiplied by energy * PI. The PI multiplication is present because physically-based lighting models include a division by PI.

in float SPECULAR_AMOUNT

2.0 * light_specular property for OmniLight3D and SpotLight3D. 1.0 for DirectionalLight3D.

in bool LIGHT_IS_DIRECTIONAL

true if this pass is a DirectionalLight3D.

in float ATTENUATION

Atenuación basada en la distancia o en la sombra.

in vec3 ALBEDO

Albedo de la base.

in vec3 BACKLIGHT

in float METALLIC

Metálico.

in real ROUGHNESS

Rugosidad.

in booleano OUTPUT_IS_SRGB

true when output is in sRGB color space (this is true in the Compatibility renderer, false in Forward+ and Forward Mobile).

out vec3 DIFFUSE_LIGHT

Resultado de luz difusa.

out vec3 SPECULAR_LIGHT

Resultado de la luz especular.

out real ALPHA

Alfa (0..1); si se escribe, el material irá a la tubería transparente.

Nota

Los shaders que pasan por la tubería de transparencia cuando se escribe en ALPHA pueden presentar problemas de ordenación de transparencia. Lee la sección de ordenación de transparencia en la página de limitaciones de renderizado 3D para obtener más información y formas de evitar problemas.

Transparent materials also cannot cast shadows or appear in hint_screen_texture and hint_depth_texture uniforms. This in turn prevents those materials from appearing in screen-space reflections or refraction. SDFGI sharp reflections are not visible on transparent materials (only rough reflections are visible on transparent materials).