Up to date

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

Shaders spatiaux

Les shaders spatiaux sont utilisés pour l'ombrage des objets 3D. Ce sont les shaders les plus complexes proposés par Godot. Les shaders spatiaux sont hautement configurables avec différents modes de rendu et différentes options de rendu (par exemple, transluminescence, transmission, occlusion ambiante, éclairage de bordure, etc.). Les utilisateurs peuvent éventuellement écrire des fonctions de processeur de vertex, de fragment et de lumière pour affecter la façon dont les objets sont dessinés.

Mode de rendu

Mode de rendu

Description

blend_mix

Mode de fusion par mélange (alpha est la transparence), par défaut.

blend_add

Mode de fusion additif.

blend_sub

Mode de fusion substractif.

blend_mul

Mode de fusion multiplicatif.

depth_draw_opaque

Rend seulement la profondeur pour la géométrie opaque (non-transparente).

depth_draw_always

Rend toujours la profondeur (opaque et transparent).

depth_draw_never

Ne rend jamais la profondeur.

depth_prepass_alpha

Fait un pré-passage de profondeur opaque pour les géométries transparentes.

depth_test_disabled

Désactive le test de profondeur.

sss_mode_skin

Subsurface Scattering mode for skin.

cull_back

Élimine les faces arrière (par défaut).

cull_front

Élimine les faces avant.

cull_disabled

Élimination des faces désactivé (double face).

unshaded

Le résultat est juste l'albedo. Pas d'éclairage/d'ombres n'a lieu dans le matériau.

wireframe

Geometry draws using lines.

diffuse_burley

Burley (Disney PBS) for diffuse (default).

diffuse_lambert

Lambert shading for diffuse.

diffuse_lambert_wrap

Emballage Lambert (dépendant de la rugosité) pour la diffuse.

diffuse_toon

Ombrage toon pour la diffuse.

specular_schlick_ggx

Schlick-GGX pour la spéculaire (par défaut).

specular_toon

Toon pour la spéculaire.

specular_disabled

Désactive la spéculaire.

skip_vertex_transform

VERTEX/NORMAL/etc... doivent être transformés manuellement dans la fonction de vertex.

world_vertex_coords

VERTEX/NORMAL/etc... sont modifiés en coordonnées globales au lieu de locales.

ensure_correct_normals

À utiliser lorsqu'une échelle non uniforme est appliquée au maillage.

shadows_disabled

Désactive le calcul des ombres dans le shader.

ambient_light_disabled

Désactive la contribution de la lumière ambiante et de la carte de radiance.

shadow_to_opacity

L'éclairage modifie la transparence alpha de sorte que les zones ombrées soient opaques et les zones non ombrées soient transparentes. Cela peut servir à surimposer des ombres sur des images fournie par une caméra en réalité augmentée.

vertex_lighting

Utilise un éclairage basé sur les sommets.

particle_trails

Enables the trails when used on particles geometry.

alpha_to_coverage

Alpha antialiasing mode, see here for more.

alpha_to_coverage_and_one

Alpha antialiasing mode, see here for more.

fog_disabled

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

Variables intégrées

Les valeurs marquées comme "in" sont en lecture seule. Les valeurs marquées comme "out" sont pour l'écriture facultative et ne contiendront pas nécessairement de valeurs sensibles. Les valeurs marquées comme "inout" fournissent une valeur par défaut sensible et peuvent éventuellement être réécrites. Les échantillonneurs ne sont pas soumis à l'écriture et ne sont pas marqués.

Variables intégrées Globales

Les modules intégrés globaux sont disponibles partout, y compris dans les fonctions personnalisées.

Intégré

Description

in float TIME

Temps global, en secondes.

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.

Variables intégrées de sommet

Les données de sommet (VERTEX, NORMAL, TANGENT, BITANGENT) sont présentées dans l'espace de modèle local. Si elles ne sont pas réécrites, ces valeurs ne seront pas modifiées et seront transmises telles quelles.

Elles peuvent optionnellement être présentées dans l'espace global en utilisant le mode de rendu world_vertex_coords.

Les utilisateurs peuvent désactiver la transformation modèle-vue intégrée (la projection aura quand même lieu plus tard) et s'en occuper manuellement avec le code suivant :

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
}

D'autres variables intégrées, telles que UV, UV2 et COLOR, sont aussi directement transmises à la fonction de fragment si elles ne sont pas modifiées.

Les utilisateurs peuvent remplacer les transformations modèle-vue et projection à l'aide de la variable intégrée POSITION. Lorsque POSITION est utilisée, la valeur de VERTEX est ignorée et la projection ne se produit pas. Cependant, la valeur transmise à la fonction de fragment provient toujours de VERTEX.

Pour l'instanciation, la variable INSTANCE_CUSTOM contient les données personnalisées de l'instance. Pour des particules, cette information est habituellement :

  • x : Angle de rotation en radians.

  • y : Phase pendant la durée de vie (0 à 1).

  • z : Trame d'animation.

Cela permet d'ajuster facilement le shader à un système de particules en utilisant un matériau de particules par défaut. Lorsque vous écrivez un shader de particules personnalisé, cette valeur peut être utilisée comme vous le souhaitez.

Intégré

Description

in vec2 VIEWPORT_SIZE

Taille de la fenêtre d'affichage (en pixels).

in mat4 VIEW_MATRIX

Transformation de l'espace global à l'espace de vue.

in mat4 INV_VIEW_MATRIX

Transformation de l'espace de vue à l'espace global.

in mat4 INV_PROJECTION_MATRIX

Transformation de l'espace de découpage à l'espace de vue.

in vec3 NODE_POSITION_WORLD

Node world space position.

in vec3 NODE_POSITION_VIEW

Node view space position.

in vec3 CAMERA_POSITION_WORLD

Camera world space position.

in vec3 CAMERA_DIRECTION_WORLD

Camera world space direction.

in bool 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 int INSTANCE_ID

Identifiant de l'instance pour l'instanciation.

in vec4 INSTANCE_CUSTOM

Données personnalisées de l'instance (pour les particules, principalement).

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

Sommet en coordonnées locales.

in int VERTEX_ID

The index of the current vertex in the vertex buffer.

inout vec3 NORMAL

Normale en coordonnées locales.

inout vec3 TANGENT

Tangente en coordonnées locales.

inout vec3 BINORMAL

Binormale en coordonnées locales.

out vec4 POSITION

Si réécrit, remplace la position finale du sommet.

inout vec2 UV

Canal UV principal.

inout vec2 UV2

Canal UV secondaire.

inout vec4 COLOR

Couleur des sommets.

out float ROUGHNESS

Rugosité pour l'éclairage du sommet.

inout float POINT_SIZE

Taille des points pour le rendu en points.

inout mat4 MODELVIEW_MATRIX

Transformation de l'espace de modèle à l'espace de vue (à utiliser si possible).

inout mat3 MODELVIEW_NORMAL_MATRIX

inout mat4 MODEL_MATRIX

Transformation de l'espace de modèle à l'espace global.

inout mat3 MODEL_NORMAL_MATRIX

inout mat4 PROJECTION_MATRIX

Transformation de l'espace de vue à l'espace de découpage.

inout uvec4 BONE_INDICES

inout vec4 BONE_WEIGHTS

in vec4 CUSTOM0

in vec4 CUSTOM1

in vec4 CUSTOM2

in vec4 CUSTOM3

Note

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.

Variables intégrées de fragment

L'utilisation par défaut d'une fonction de processeur de fragments dans Godot consiste à configurer les propriétés des matériaux de votre objet et à laisser le rendu intégré gérer l'ombrage final. Cependant, vous n'êtes pas obligé d'utiliser toutes ces propriétés, et si vous ne les écrivez pas, Godot optimisera les fonctionnalités correspondantes.

Intégré

Description

in vec2 VIEWPORT_SIZE

Taille de la fenêtre d'affichage (en pixels).

in vec4 FRAGCOORD

Coordonnées du centre du pixel dans l'espace de l'écran. xy indique la position dans la fenêtre, z indique la profondeur du fragment si DEPTH n'est pas utilisé. L'origine est en bas à gauche.

in bool FRONT_FACING

true if current face if front face.

in vec3 VIEW

Normalized vector from fragment position to camera (in view space).

in vec2 UV

UV qui provient de la fonction de sommet.

in vec2 UV2

UV2 qui provient de la fonction de sommet.

in vec4 COLOR

COLOR qui provient de la fonction de sommet.

in vec2 POINT_COORD

Coordonnées de point pour dessiner des points avec POINT_SIZE.

in bool 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

Transformation de l'espace de modèle à l'espace global.

in mat3 MODEL_NORMAL_MATRIX

in mat4 VIEW_MATRIX

Transformation de l'espace global à l'espace de vue.

in mat4 INV_VIEW_MATRIX

Transformation de l'espace de vue à l'espace global.

in mat4 PROJECTION_MATRIX

Transformation de l'espace de vue à l'espace de découpage.

in mat4 INV_PROJECTION_MATRIX

Transformation de l'espace de découpage à l'espace de vue.

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

Vertex qui provient de la fonction vertex (par défaut, dans l'espace de vue).

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

Coordonnées UV de l'écran pour le pixel actuel.

sampler2D DEPTH_TEXTURE

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

out float DEPTH

Valeur de profondeur personnalisée (0..1). Si DEPTH est écrit dans une branche de shader, alors vous êtes responsable de la mise en place de DEPTH pour toutes les autres branches. Sinon, l'API graphique les laissera non initialisées.

inout vec3 NORMAL

Normale qui provient de la fonction de sommet (par défaut, dans l'espace de vue).

inout vec3 TANGENT

Tangente qui provient de la fonction de sommet.

inout vec3 BINORMAL

Binormale qui provient de la fonction de sommet.

out vec3 NORMAL_MAP

Réglez la normale ici si vous lisez la normale à partir d'une texture au lieu de NORMAL.

out float NORMAL_MAP_DEPTH

Profondeur de la variable du dessus. Par défaut 1.0.

out vec3 ALBEDO

Albédo (blanc par défaut).

out float ALPHA

Alpha (0..1). En cas d'écriture, le matériau passera dans le processus de transparence.

out float ALPHA_SCISSOR_THRESHOLD

En cas d'écriture, les valeurs inférieures à une certaine quantité d'alpha sont rejetées.

out float ALPHA_HASH_SCALE

out float ALPHA_ANTIALIASING_EDGE

out vec2 ALPHA_TEXTURE_COORDINATE

out float METALLIC

Métallicité (0..1).

out float SPECULAR

Spéculaire. La valeur par défaut est 0.5, il est préférable de ne pas modifier à moins que vous ne souhaitiez changer d'IOR.

out float ROUGHNESS

Rugosité (0..1).

out float RIM

Bordure (0..1) Si elle est utilisée, Godot calcule l'éclairage de bordure.

out float RIM_TINT

Tinte de Bordure, de 0 (blanc) à 1 (albédo). Si elle est utilisée, Godot calcule l'éclairage de bordure.

out float CLEARCOAT

Petite touche spéculaire ajoutée. Si elle est utilisée, Godot calcule le Clearcoat.

out float CLEARCOAT_GLOSS

Brillance du Clearcoat. Si elle est utilisée, Godot calcule le Clearcoat.

out float ANISOTROPY

Pour déformer la touche spéculaire en fonction de l'espace de tangente.

out vec2 ANISOTROPY_FLOW

Direction de la distorsion, à utiliser avec les flowmaps.

out float SSS_STRENGTH

Force de la Transluminescence. Si elle est utilisée, la Transluminescence sera appliquée à l'objet.

out vec4 SSS_TRANSMITTANCE_COLOR

out float SSS_TRANSMITTANCE_DEPTH

out float SSS_TRANSMITTANCE_BOOST

inout vec3 BACKLIGHT

out float AO

Force de l'occlusion ambiante. A utiliser avec l'occlusion ambiante précalculée.

out float AO_LIGHT_AFFECT

Combien l'occlusion ambiante affecte les lumières (0..1, par défaut 0).

out vec3 EMISSION

Couleur d'émission (peut aller au-delà de 1,1,1 pour le 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.

Note

Les shaders passant par le pipeline transparent lorsque ALPHA est écrit peuvent présenter des problèmes de tri par transparence. Lisez la section tri par transparence dans la page des limitations de rendu 3D pour plus d'informations et moyens d'éviter les problèmes.

Variables intégrées de lumière

L'écriture des fonctions du processeur de lumière est totalement optionnelle. Vous pouvez sauter la fonction lumière en réglant render_mode sur "unshaded". Si aucune fonction lumière n'est écrite, Godot utilisera les propriétés matérielles écrites dans la fonction fragment pour calculer l'éclairage pour vous (sous réserve du render_mode).

Pour écrire une fonction lumière, assignez quelque chose à DIFFUSE_LIGHT ou SPECULAR_LIGHT. Ne rien assigner signifie qu'aucune lumière n'est traitée.

La fonction lumière est appelée pour chaque lumière dans chaque pixel. Elle est appelé dans une boucle pour chaque type de lumière.

Vous trouverez ci-dessous un exemple de fonction lumière personnalisée utilisant un modèle d'éclairage Lambertien :

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

Si vous voulez que les lumières s'additionnent, ajoutez la contribution de la lumière à DIFFUSE_LIGHT en utilisant +=, plutôt que de l'écraser.

Avertissement

La fonction light() ne sera pas exécutée si le mode de rendu vertex_lighting est activé, ou si Rendering > Quality > Shading > Force Vertex Shading est activé dans les paramètres du projet. (C'est activée par défaut sur les plateformes mobiles.)

Intégré

Description

in vec2 VIEWPORT_SIZE

Taille de la fenêtre d'affichage (en pixels).

in vec4 FRAGCOORD

Coordonnées du centre du pixel dans l'espace de l'écran. xy indique la position dans la fenêtre, z indique la profondeur du fragment si DEPTH n'est pas utilisé. L'origine est en bas à gauche.

in mat4 MODEL_MATRIX

Transformation de l'espace de modèle à l'espace global.

in mat4 INV_VIEW_MATRIX

Transformation de l'espace de vue à l'espace global.

in mat4 VIEW_MATRIX

Transformation de l'espace global à l'espace de vue.

in mat4 PROJECTION_MATRIX

Transformation de l'espace de vue à l'espace de découpage.

in mat4 INV_PROJECTION_MATRIX

Transformation de l'espace de découpage à l'espace de vue.

in vec3 NORMAL

Vecteur Normal, dans l'espace de vue.

in vec2 UV

UV qui provient de la fonction de sommet.

in vec2 UV2

UV2 qui provient de la fonction de sommet.

in vec3 VIEW

Vecteur Vue, dans l'espace de vue.

in vec3 LIGHT

Vecteur Lumière, dans l'espace de vue.

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

Atténuation basée sur la distance ou l'ombre.

in vec3 ALBEDO

Albédo de base.

in vec3 BACKLIGHT

in float METALLIC

Metallic.

in float ROUGHNESS

Rugosité.

in bool 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

Résultat de la lumière diffuse.

out vec3 SPECULAR_LIGHT

Résultat de la lumière spéculaire.

out float ALPHA

Alpha (0..1). En cas d'écriture, le matériau passera dans le processus de transparence.

Note

Les shaders passant par le pipeline transparent lorsque ALPHA est écrit peuvent présenter des problèmes de tri par transparence. Lisez la section tri par transparence dans la page des limitations de rendu 3D pour plus d'informations et moyens d'éviter les problèmes.

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).