Fr/Projet Rembrandt: Difference between revisions

no edit summary
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.


== Running Flightgear with Rembrandt ==
== Démarrage de FlightGear avec Rembrandt ==
[[File:Rembrandt dialog.png|thumb|270px|Rembrandt dialog]]
[[File:Rembrandt dialog.png|thumb|270px|dialogue Rembrandt]]
The Rembrandt renderer is now integrated in the main repository but needs to be enabled to run. There are two ways to enable it (only one is needed!):
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> (when using [[FGRun]], you may add this behind the <tt>FG_EXECUTABLE</tt> on the first page).  
* <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> (with FGRun this can be added via <tt>Advanced > Properties</tt> on the last page).
* <code>--prop:/sim/rendering/rembrandt/enabled=true</code> (avec FGRun on peut ajouter ceci via <tt>Advanced > Properties</tt> sur la dernière page).


The <tt>View > Rendering Options > Rembrandt Options</tt> dialog allows you to toggle and adjust the various features that Rembrandt offers.
Le <tt>View > Rendering Options > Rembrandt Options</tt> dialogue vous permet de  basculer et d'ajuster les différentes options offertes par Rembrandt.


Rembrandt is quite demanding in GPU resources and may fail to run with the default options. The more frequent symptom is an OSG message in the console :
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.


Some card also exhibit messages like this :
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


There is a number of additional options that can help to avoid these problems :
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>
|Some old NVidia cards, such as 7600GT, don't give enough resolution for depth and that result in "fog curtains" at few meters from the viewer. One trick is to encode depth in another texture and get the proper value afterward. This option enables that.
|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>
|Disable shadows altogether.
|Désactive les ombres tout à fait.
|-
|-
|<tt>--prop:/sim/rendering/shadows/num-cascades=1</tt>
|<tt>--prop:/sim/rendering/shadows/num-cascades=1</tt>
|Avoid the "error C6013" message on old cards at the cost of resolution in the cockpit. Set <tt>/sim/rendering/shadows/cascade-far-m[0]</tt> to change the shadow map range. The more the range, the less the resolution (default value is 5 meters)
|É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>
|Set the shadow map size. Useful values are 1024, 2048, 4096 or 8192. Few cards have the resources to support 16384.
|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>
|Set the shadow map cascade number. Less cascades means less time spent in shadow map generation, but also means lower shadow quality. Integer between 1 and 4.
|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)
|Set the shadow map cascade range for each cascade. Default values are 5m, 50m, 500m and 5000m for 4 cascades.
|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>
|By default, Rembrandt uses 8 bit buffers for normals (so the property is set to true by default). This may create banding artifacts on specular highlights. If it's unacceptable and the GPU supports it, set to false to have better precision for normals and effects relying on normal direction.
|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.
|}
|}


== Guidelines for shader writers ==
== Lignes directrices pour les écrits shader ==
=== Predefined uniforms ===
=== Uniformes prédéfinis ===
These glsl uniforms don't need to be declared in the effect file.
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>
|In fullscreen pass only, view matrix used to transform the screen position to view direction
|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>
|In fullscreen pass only, view matrix inverse used to transform the screen position to view direction
|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>
|In fullscreen pass only, projection matrix inverse used to transform the screen position to view direction
|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 of the camera in world space, expressed in cartesian coordinates
|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 of the camera in world space, expressed in geodesic coordinates (longitude in radians, latitude in radians, elevation in meters)
|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>
|Tells if the depth is stored in a depth texture or a color texture
|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>
|Used to convert the value of the depth buffer to a depth that can be used to compute the eye space position of the fragment
|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 of the buffer, used to convert gl_FragCoord into the range [0..1][0..1]
|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>
|Defined by OSG, used only when working on actual geometry
|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>
|Defined by OSG, used only when working on actual geometry
|Definie par OSG, employé seulement lors du travail sur la géométrie réelle
|}
|}
They still have to be declared in the fragment or the vertex shader to be used.
.Ils doivent encore être déclarés dans le fragment du vertex shader


=== Utility functions ===
=== Fonctions utilitaires ===


To ease the maintenance of shaders, several utility functions are available for the fragment shader. These functions are put together in two files : <tt>gbuffer-functions.frag</tt> and <tt>gbuffer-encode.frag</tt>.
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>
:Used to encode all the values of the G-Buffer in material shaders
: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>
:Used to compress normals into the G-Buffer in material shaders. Normally called from <tt>encode_gbuffer()</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>
:Reconstruct normals from the G-Buffer. Used in fullscreen shaders and light shaders
: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 values in the range [0..1] in the 24 bits of a color. This function is used by <tt>encode_gbuffer()</tt> if the <tt>/sim/rendering/use-color-for_depth</tt> is true, for old cards that don't provide depth information with enough resolution inside fullscreen or light shaders.
: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>
:Decode float values in the range [0..1] from the 24 bits of a color. This function is used by <tt>position()</tt> if the <tt>/sim/rendering/use-color-for_depth</tt> is true, for old cards that don't provide depth information with enough resolution inside fullscreen or light shaders.
: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>
:Reconstruct eye space position from the view direction and the depth read from the depth buffer
: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>
:Reconstruct eye space position from the view direction and the depth encoded in a color read from the depth buffer
::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>
:Reconstruct eye space position from the view direction and the depth buffer (real depth or color, according to the value of <tt>/sim/rendering/use-color-for_depth</tt>) at a given fragment on screen, given by <tt>coords</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 ====
88

edits