88
edits
No edit summary |
No edit summary |
||
Line 228: | Line 228: | ||
Chaque effet attaché au plein écran définit le mélange fait entre le pass et la somme précédente de rendu. | Chaque effet attaché au plein écran définit le mélange fait entre le pass et la somme précédente de rendu. | ||
== | == Démarrage de FlightGear avec Rembrandt == | ||
[[File:Rembrandt dialog.png|thumb|270px|Rembrandt | [[File:Rembrandt dialog.png|thumb|270px|dialogue Rembrandt]] | ||
Le rendu Rembrandt est maintenant intégré dans le répertoire principal, mais doit être activé pour démarrer. Il y a deux façons de l'activer (une seule est nécessaire): | |||
* <code>--enable-rembrandt</code> ( | * <code>--enable-rembrandt</code> (lorsqu'on utilise [[FGRun]], on peut ajouter ceci derrière le <tt>FG_EXECUTABLE</tt> sur la première page). | ||
* <code>--prop:/sim/rendering/rembrandt/enabled=true</code> ( | * <code>--prop:/sim/rendering/rembrandt/enabled=true</code> (avec FGRun on peut ajouter ceci via <tt>Advanced > Properties</tt> sur la dernière page). | ||
Le <tt>View > Rendering Options > Rembrandt Options</tt> dialogue vous permet de basculer et d'ajuster les différentes options offertes par Rembrandt. | |||
Rembrandt | Rembrandt est très gourmand en ressources GPU et son démarrage peut échouer avec les options par défaut. Le symptome le plus fréquent est un message OSG dans la console : | ||
RenderStage::runCameraSetUp(), FBO setup failed, FBO status= 0x8cd6 | RenderStage::runCameraSetUp(), FBO setup failed, FBO status= 0x8cd6 | ||
Warning: RenderStage::runCameraSetUp(State&) Pbuffer does not support multiple color outputs. | Warning: RenderStage::runCameraSetUp(State&) Pbuffer does not support multiple color outputs. | ||
On peut voir aussi : | |||
glLinkProgram "" FAILED | glLinkProgram "" FAILED | ||
Line 252: | Line 252: | ||
0(34) : error C6013: Only arrays of texcoords may be indexed in this profile, and only with a loop index variable | 0(34) : error C6013: Only arrays of texcoords may be indexed in this profile, and only with a loop index variable | ||
Des options additionnelles peuvent éviter ces problèmes : | |||
{| class="wikitable" | {| class="wikitable" | ||
|<tt>--prop:/sim/rendering/rembrandt/use-color-for-depth=true</tt> | |<tt>--prop:/sim/rendering/rembrandt/use-color-for-depth=true</tt> | ||
| | |Certaines vieilles cartes NVidia comme 7600GT, n'ont pas assez de résolution pour la profondeur, et on voit des "rideaux de brouillard" à quelques mètres devant. Une astuce consiste à encoder la profondeur dans une autre texture et donner la valeur correcte ensuite. Cette option permet cela. | ||
|- | |- | ||
|<tt>--prop:/sim/rendering/shadows/enabled=false</tt> | |<tt>--prop:/sim/rendering/shadows/enabled=false</tt> | ||
| | |Désactive les ombres tout à fait. | ||
|- | |- | ||
|<tt>--prop:/sim/rendering/shadows/num-cascades=1</tt> | |<tt>--prop:/sim/rendering/shadows/num-cascades=1</tt> | ||
| | |Évite le message "error C6013" sur les vieilles cartes en manque de résolution dans le cockpitt. Mettez <tt>/sim/rendering/shadows/cascade-far-m[0]</tt> pour changer la taille de la carte d'ombre. Plus de taille, et moins de résolution (la valeur par défaut est 5 mètres) | ||
|- | |- | ||
|<tt>--prop:/sim/rendering/shadows/map-size=<power-of-two></tt> | |<tt>--prop:/sim/rendering/shadows/map-size=<power-of-two></tt> | ||
| | |Définnissez la taille de la carte d'ombres. Les valeurs utilles sont 1024, 2048, 4096 ou 8192. Peu de cartes supportent 16384. | ||
|- | |- | ||
|<tt>--prop:/sim/rendering/shadows/num-cascades</tt> | |<tt>--prop:/sim/rendering/shadows/num-cascades</tt> | ||
| | |Définissez le nombre de cascades de la carte ombre. Moins de cascades signifie moins de temps passé à générer la carte shadow, mais aussi signifie une qualité moindre de l'ombre. Mettez entre 1 et 4. | ||
|- | |- | ||
|<tt>--prop:/sim/rendering/shadows/cascade-far-m[i]</tt> | |<tt>--prop:/sim/rendering/shadows/cascade-far-m[i]</tt> | ||
(1 <= i <= <tt>/sim/rendering/shadows/num-cascades</tt> <= 4) | (1 <= i <= <tt>/sim/rendering/shadows/num-cascades</tt> <= 4) | ||
| | |Définissez la taille de cascade de la carte shadow pour chaque cascade. Les valeurs par défaut sont 5m, 50m, 500m et 5000m pour 4 cascades. | ||
|- | |- | ||
|<tt>--prop:/sim/rendering/rembrandt/no-16bit-buffer=false</tt> | |<tt>--prop:/sim/rendering/rembrandt/no-16bit-buffer=false</tt> | ||
| | |Par défaut, Rembrandt utilise normalement des tampons de 8 bits (ainsi, la propriété est vraiment définie par défaut). Ceci peut créer des artefacts pour les éclairages specular. Si c'est inacceptable et si le GPU le supporte, mettez false pour avoir une meilleure précision pour les normales et les effets s'appuyant sur une direction normale. | ||
|} | |} | ||
== | == Lignes directrices pour les écrits shader == | ||
=== | === Uniformes prédéfinis === | ||
Ces uniformes glsl n'ont pas besoin d'être déclarés dans le fichier effet | |||
{| class="wikitable" | {| class="wikitable" | ||
!Name | !Name | ||
Line 288: | Line 288: | ||
|<tt>fg_ViewMatrix</tt> | |<tt>fg_ViewMatrix</tt> | ||
|<tt>mat4</tt> | |<tt>mat4</tt> | ||
| | |En pass plein écran seulement, view matrix utilisé our transformer la position écran en direction vue | ||
|- | |- | ||
|<tt>fg_ViewMatrixInverse</tt> | |<tt>fg_ViewMatrixInverse</tt> | ||
|<tt>mat4</tt> | |<tt>mat4</tt> | ||
| | |En pass plein écran seulement, view matrix inverse employé pour transformer la position écran en direction vue | ||
|- | |- | ||
|<tt>fg_ProjectionMatrixInverse</tt> | |<tt>fg_ProjectionMatrixInverse</tt> | ||
|<tt>mat4</tt> | |<tt>mat4</tt> | ||
| | |En pass plein écran seulement, projection matri inverse employé pour transformer la position écran en direction vue | ||
|- | |- | ||
|<tt>fg_CameraPositionCart</tt> | |<tt>fg_CameraPositionCart</tt> | ||
|<tt>vec3</tt> | |<tt>vec3</tt> | ||
|Position | |Position de la caméra en coordonnées cartésiennes | ||
|- | |- | ||
|<tt>fg_CameraPositionGeod</tt> | |<tt>fg_CameraPositionGeod</tt> | ||
|<tt>vec3</tt> | |<tt>vec3</tt> | ||
|Position | |Position de la caméra dans l'espace, exprimé en coordonnées géodésiques (longitude et latitude en radians, élévation en mètres) | ||
|- | |- | ||
|<tt>fg_SunAmbientColor</tt> | |<tt>fg_SunAmbientColor</tt> | ||
Line 340: | Line 340: | ||
|<tt>fg_DepthInColor</tt> | |<tt>fg_DepthInColor</tt> | ||
|<tt>bool</tt> | |<tt>bool</tt> | ||
| | |Dire si la profondeur est rangée dans une texture profondeur ou une texture couleur | ||
|- | |- | ||
|<tt>fg_Planes</tt> | |<tt>fg_Planes</tt> | ||
|<tt>vec3</tt> | |<tt>vec3</tt> | ||
| | |Utilisé pour convertir la valeur du tampon profondeur en une profondeur qui peut être utilisée pour calculer la position dans l'espace du fragment. | ||
|- | |- | ||
|<tt>fg_BufferSize</tt> | |<tt>fg_BufferSize</tt> | ||
|<tt>vec2</tt> | |<tt>vec2</tt> | ||
|Dimensions | |Dimensions du tampon, utilisé pour convertir gl_FragCoord dans la taille [0..1][0..1] | ||
|- | |- | ||
|<tt>osg_ViewMatrix</tt> | |<tt>osg_ViewMatrix</tt> | ||
|<tt>mat4</tt> | |<tt>mat4</tt> | ||
| | |Definie par OSG, employé seulement lors du travail sur la géométrie réelle | ||
|- | |- | ||
|<tt>osg_ViewMatrixInverse</tt> | |<tt>osg_ViewMatrixInverse</tt> | ||
|<tt>mat4</tt> | |<tt>mat4</tt> | ||
| | |Definie par OSG, employé seulement lors du travail sur la géométrie réelle | ||
|} | |} | ||
.Ils doivent encore être déclarés dans le fragment du vertex shader | |||
=== | === Fonctions utilitaires === | ||
Pour faciliter la maintenance des shaders plusieurs fonctions utilitaires sont disponibles pour le fragment shader. Ces fonctions sont placées ensemble dans deux fichiers : <tt>gbuffer-functions.frag</tt> et <tt>gbuffer-encode.frag</tt>. | |||
==== gbuffer-encode.frag ==== | ==== gbuffer-encode.frag ==== | ||
;<tt>void encode_gbuffer(vec3 normal, vec3 color, int mId, float specular, float shininess, float emission, float depth)</tt> | ;<tt>void encode_gbuffer(vec3 normal, vec3 color, int mId, float specular, float shininess, float emission, float depth)</tt> | ||
: | :Utilisé pour encoder youtes les valeurs de G-Buffer dans material shaders | ||
==== gbuffer-functions.frag ==== | ==== gbuffer-functions.frag ==== | ||
;<tt>vec2 normal_encode(vec3 n)</tt> | ;<tt>vec2 normal_encode(vec3 n)</tt> | ||
: | :Employé pour compresser normals à l'intérieur de G-Buffer dans material shaders. Normalement appelé de <tt>encode_gbuffer()</tt> | ||
;<tt>vec3 normal_decode(vec2 enc)</tt> | ;<tt>vec3 normal_decode(vec2 enc)</tt> | ||
: | :Reconstruit normals à partir de G-Buffer. Employé dans shaders plein écran et shaders lumière | ||
;<tt>vec3 float_to_color(in float f)</tt> | ;<tt>vec3 float_to_color(in float f)</tt> | ||
:Encode float | :Encode les valeurs float dans la taille [0..1] dans les 24 bits d'une couleur. cette fonction est employée par <tt>encode_gbuffer()</tt> si le <tt>/sim/rendering/use-color-for_depth</tt> est vrai, pour les vieilles cartes qui ne fournissent pas d'information profondeur avec assez de résolution dans les shaders fullscreen ou lumière. | ||
;<tt>float color_to_float(vec3 color)</tt> | ;<tt>float color_to_float(vec3 color)</tt> | ||
: | :Décode les valeurs float dans la taille [0..1] dans les 24 bits d'une couleur. cette fonction est employée par <tt>position()</tt> si le <tt>/sim/rendering/use-color-for_depth</tt> est vrai, pour les vieilles cartes qui ne fournissent pas d'information profondeur avec assez de résolution dans les shaders fullscreen ou lumière. | ||
;<tt>vec3 position( vec3 viewDir, float depth )</tt> | ;<tt>vec3 position( vec3 viewDir, float depth )</tt> | ||
: | :Reconstruit la position eye space à partir de la direction view position a partir de la view direction et la profondeur lue du tampon profondeur | ||
;<tt>vec3 position( vec3 viewDir, vec3 depthColor )</tt> | ;<tt>vec3 position( vec3 viewDir, vec3 depthColor )</tt> | ||
: | ::Reconstruit la position eye space à partir de la direction view et la profondeur encodée dans une couleur lue du tampon profondeur | ||
;<tt>vec3 position( vec3 viewDir, vec2 coords, sampler2D depth_tex )</tt> | ;<tt>vec3 position( vec3 viewDir, vec2 coords, sampler2D depth_tex )</tt> | ||
: | :Reconstruit la position eye space à partir de la direction vue et du tampon profondeur (profondeur réelle ou couleur selon la valeur de <tt>/sim/rendering/use-color-for_depth</tt>) à un fragment donné sur l'écran, donné par <tt>coords</tt> | ||
==== Usage ==== | ==== Usage ==== |
edits