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 |
in float TAU |
A |
in float E |
A |
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 |
|
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.
|
in int VIEW_MONO_LEFT |
Constant for Mono or left eye, always |
in int VIEW_RIGHT |
Constant for right eye, always |
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. |
in booleano FRONT_FACING |
|
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 |
|
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.
|
in int VIEW_MONO_LEFT |
Constant for Mono or left eye, always |
in int VIEW_RIGHT |
Constant for right eye, always |
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 |
in vec2 SCREEN_UV |
Muestra la coordenada UV para el píxel actual. |
sampler2D DEPTH_TEXTURE |
Removed in Godot 4. Use a |
out real DEPTH |
Valor de profundidad personalizado (0..1). Si se está escribiendo en |
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. |
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 |
in float SPECULAR_AMOUNT |
2.0 * |
in bool LIGHT_IS_DIRECTIONAL |
|
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 |
|
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).