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 |
in float TAU |
A |
in float E |
A |
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 |
|
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.
|
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 |
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. |
in bool FRONT_FACING |
|
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 |
|
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.
|
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 |
Coordonnées UV de l'écran pour le pixel actuel. |
sampler2D DEPTH_TEXTURE |
Removed in Godot 4. Use a |
out float DEPTH |
Valeur de profondeur personnalisée (0..1). Si |
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. |
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 |
in float SPECULAR_AMOUNT |
2.0 * |
in bool LIGHT_IS_DIRECTIONAL |
|
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 |
|
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).