Fr/Projet Rembrandt: Difference between revisions

no edit summary
No edit summary
No edit summary
Line 275: Line 275:
|}
|}


== Lignes directrices pour les écrits shader ==
== Lignes directrices pour les écritures shader ==
=== Uniformes prédéfinis ===
=== Uniformes prédéfinis ===
Ces uniformes glsl n'ont pas besoin d'être déclarés dans le fichier effet
Ces uniformes glsl n'ont pas besoin d'être déclarés dans le fichier effet
{| class="wikitable"
{| class="wikitable"
!Name
!Nom
!Type
!Type
!Purpose
!Objectif
|-
|-
|<tt>fg_ViewMatrix</tt>
|<tt>fg_ViewMatrix</tt>
Line 431: Line 431:


=== Phase Geometry  ===
=== Phase Geometry  ===
La phase Geometry est là pour remplir le G-tampon.  '''L'ombrage n'intervient pas à cette phase, et le calcul lumière ou brouillard ne doit pas faire partie du shader '''. L'opération requise dans le fragment Shader est de remplir avec une valeur sensible chaque tampon individuel :
La phase Geometry est là pour remplir le G-tampon.  '''L'ombrage n'intervient pas à cette phase, et le calcul lumière ou brouillard ne doit pas faire partie du shader '''. L'opération requise dans le fragment Shader est de remplir avec une valeur sensible chaque tampon individuel :


{| class="wikitable" style="text-align: center;"
{| class="wikitable" style="text-align: center;"
Line 497: Line 497:
Chaque modèle est par défaut rendu en utilisant l'effet  <tt>Effects/model-default</tt>. Cet effet initialise le G-buffer, en ignorant les surfaces transparentes, en mettant  alpha test et  rendu de toute la geometrie dans la poubelle. Il n'est pas possible de rediriger le rendu vers les bacs transparents lorsque la texture associée a un canal alpha car la plupart des modeles emploient un atlas simple texture et même les parties opaques sont rendues avec texture avec alpha canal.
Chaque modèle est par défaut rendu en utilisant l'effet  <tt>Effects/model-default</tt>. Cet effet initialise le G-buffer, en ignorant les surfaces transparentes, en mettant  alpha test et  rendu de toute la geometrie dans la poubelle. Il n'est pas possible de rediriger le rendu vers les bacs transparents lorsque la texture associée a un canal alpha car la plupart des modeles emploient un atlas simple texture et même les parties opaques sont rendues avec texture avec alpha canal.


Si un modèle nécessite des surfaces translucides ou transparentes , these surface objects need to be assigned a different effect that sets explicitly the render bin to "DepthSortedBin", or sets the rendering hint to "transparent". This tells the renderer to render this object using forward rendering, so lighting and fog need to be enabled, and if a shader program is used, they should be computed in the classical way. The <tt>Effects/model-transparent</tt> can be used to register simple transparent/translucent surfaces. You assign this effect to an object (or multiple objects) like:
Si un modèle nécessite des surfaces translucides ou transparentes , ces objets surface doivent être assignés à un effet différent  qui place explicitement le bac rendu à "DepthSortedBin", ou met la suggestion rendu à "transparent". Ceci dit au moteur de rendu de rendre cet objet opérant avant le rendu, ainsi, la clarté et le brouillard doivent être activés, et si un programme shader est utilisé, et s'ils ont été calculés en manière classique. Le  <tt>Effects/model-transparent</tt> peut être utilisé pour enregistrer simlement les surfaces transparentes/translucides. Vous attribuez cet effet à un objet (ou à de multiples objets) comme:
  <effect>
  <effect>
   <inherits-from>Effects/model-transparent</inherits-from>
   <inherits-from>Effects/model-transparent</inherits-from>
Line 503: Line 503:
  </effect>
  </effect>


If opaque surface need to have special effect, for example to apply bump mapping, this effect should use the "RenderBin" bin, or the rendering hint set to "opaque", and the G-buffer needs to be initialized correctly in the Geometry stage.
'''Attention: <Effect> agit seulement sur les objets réels, pas sur des groupes d'objets ou des animations.'''


=== Adding lights to a model ===
Si la surface opaque a besoin d'un effet spécial, par exemple appliquer un "bump mapping" (effet de relief sur des textures) cet effet devra utiliser le bac  "RenderBin", ou le rendu suggéré met à "opaque", et le G-buffer a besoin d'être initialisé correctement dans la phase Geometry.


There are two things to consider: the appearance of the light source and the illuminated area. For the appearance of the light source (what you see when you look at the bulb), you need a model with an emissive material that will produce the glow effect and that is visible at night.
=== Soyez sûr que toute la Geometry distribuera l'ombre ===


For the effect of the source on its environment (the lit area), we must have in the 3D model (the .ac file) a volume that includes the effect (Light Volume). It can be a large cone for spotlights or a sphere for point light. It's important that the light volume is closed, convex and it's normals are oriented outward.
Pour limiter la quantité de rendu geometry dans la carte shadow, et aussi pour réduire les artefacts (acnée shadow), seulement les faces ne regardant pas le soleil distribuent les ombres. Le test est effectué en utilisant l'orientation normale. Cela veut dire que les polygones à double côté, ou mesh non fermés, seront transparents à la lumière sous certains angles de soleil. Pour éviter ça, les modeleurs peuvent:
*s'assurer que l'objet est toujours dans l'ombre d'autres objets,
*fermer leur mesh, ou
*doubler les polygones avec l'endroit normal à l'opposé


The light volume must be part of the geometry of the model and be referenced in the animation file. No need to add a color or an effect to this volume. Light calculation is only done on the fragments covered by the light volume, but has no influence on the color or the attenuation of the light.
=== Ajouts de lumière à un modèle===


All available animations are possible on the light volume, except '''material''' and '''texture'''. It is not possible to change color of lights for the moment, except switching to another animation. Axis and position are in object space and are transformed by the subsequent animations.
Deux points sont à considérer: l'apparence de la sourceet la zone illuminée. Pour l'apparence de la source lumière, (ce que vous voyez quand vous regardez le bulbe) vous avez besoin d'un modèle avec un emissive material qui produira  l'effet brillant et ceci est visible de nuit.


==== Spotlights ====
Pour l'effet de la source dans son environnement (l'aire lumineuse), nous devons avoir dans le modèle 3D (le fichier .ac) un volume qui inclut l'effet (Volume Lumière). Cela peut être un grand cône pour les aires lumineuses ou une spère pour une lumière ponctuelle. Il est important que le volume lumière soit fermé, convexe et les normals orientés vers l'extérieur.
 
Le volume lumière doit être partie de la geometry du modèle et être référencé dans le fichier animation. Pas besoin d'ajouter une couleur ou un effet à ce volume. Le calcul lumière est seulement fait sur les fragments couverts par le volume lumière, mais n'a aucune influence sur la couleur ou l'atténuation de la lumière .
 
Toutes les animations disponibles sont possibles sur le volume lumière sauf '''material''' et '''texture'''. Il n'est pas possible de changer couleur et lumières, pour le moment; sauf en se branchant sur une autre animation. L'axe et la position sont dans l'espace objet et sont transformés par les animations qui suivent.
 
==== Taches lumineuses ====
{|cellpadding=10|
{|cellpadding=10|
|valign=top|
|valign=top|
Line 577: Line 586:
|valign=top|
|valign=top|
{| class="wikitable" cellpadding="3"
{| class="wikitable" cellpadding="3"
!Name
!Nom
!Purpose
!Objectif
|-
|-
|<tt>type</tt>
|<tt>type</tt>
|Install the <tt>'''light'''</tt> animation
|Installe l'animation <tt>'''light'''</tt>
|-
|-
|<tt>light-type</tt>
|<tt>light-type</tt>
|This is a <tt>'''spot'''</tt> light
|C'est une lumière <tt>'''spot'''</tt>
|-
|-
|<tt>name</tt>
|<tt>name</tt>
|Name given to this animation
|Nom donné à cette animation
|-
|-
|<tt>object-name</tt>
|<tt>object-name</tt>
|Name of the light volume in the 3d model (typically a cone with an apex at <tt>position</tt>, along <tt>direction</tt> axis if <tt>cutoff</tt> is lesser than 90 degrees, or a sphere centered at <tt>position</tt> if <tt>cutoff</tt> is greater than 90 degrees )
|Nom du volume lumière dans le modèle 3D (typiquement un cône avec un sommet à <tt>position</tt>, le long de l'axe <tt>direction</tt> si <tt>cutoff</tt> est inférieur à 90 degrés, ou une sphère centrée à  <tt>position</tt> si <tt>cutoff</tt> est supérieur à 90 degrés )
|-
|-
|<tt>nopreview</tt>
|<tt>nopreview</tt>
|Hide light volume in fgrun 3d preview
|Cache le volume lumière dans  fgrun 3d preview
|-
|-
|<tt>position</tt>
|<tt>position</tt>
|In object space, position of the light
|Dans espace objet, position de la lumière
|-
|-
|<tt>direction</tt>
|<tt>direction</tt>
|In object space, direction to the center of the spot
|Dans espace objet, direction vers le centre de la tache
|-
|-
|<tt>ambient</tt>
|<tt>ambient</tt>
|Ambient color of the light
|Couleur ambiante de la lumière
|-
|-
|<tt>diffuse</tt>
|<tt>diffuse</tt>
|Diffuse color of the light
|Couleur diffuse de la lumière
|-
|-
|<tt>specular</tt>
|<tt>specular</tt>
|Specular color of the light
|Couleur specular de la lumière
|-
|-
|<tt>dim-factor</tt>
|<tt>dim-factor</tt>
|Group of parameters to control a factor that is applied to ambient, diffuse and specular at the same time
|Groupe de paramètres pour contrôler un facteur appliqué en même temps à  ambient, diffuse et specular  
|-
|-
|<tt>attenuation</tt>
|<tt>attenuation</tt>
|Three element vector. <c> element is the constant factor, <l> element is the linear factor and <q> element is the quadratic factor.<br />
|Trois element vector. <c> element est le facteur constant, <l> element est le facteur linéaire et <q> element est le facteur quadratique.<br />
Attenuation of color at distance d is [[File:Spotlight_attenuation.png]]
Attenuation de couleur à distance d est [[File:Spotlight_attenuation.png]]
|-
|-
|<tt>exponent</tt>
|<tt>exponent</tt>
|Attenuation is multiplied by <tt>pow( dot( lightDir, <direction> ), <exponent> )</tt>, lightDir being vector from light position to point, in camera space.
|Attenuation is multiplié par <tt>pow( dot( lightDir, <direction> ), <exponent> )</tt>, lightDir étant vector from light position to point, in camera space.
|-
|-
|<tt>cutoff</tt>
|<tt>cutoff</tt>
|Point is lit by this source if <tt>dot( lightDir, <direction> ) > <cutoff></tt> , lightDir being vector from light position to point, in camera space.
|Point is lit by this source if <tt>dot( lightDir, <direction> ) > <cutoff></tt> , lightDir being vecteur à partir de la position lumière vers le point, dans l'espace caméra.
|-
|-
|<tt>near-m</tt>
|<tt>near-m</tt>
|Minimum distance of influence, from position, in meters
|Distance minimum d'influence, à partir de la position, en mètres
|-
|-
|<tt>far-m</tt>
|<tt>far-m</tt>
|Maximum distance of influence, from position, in meters
|Distance maximum d'influence, à partir de la position, en mètres
|}
|}
|}
|}


==== Point lights ====
==== Points lumineux ====
{|cellpadding=10|
{|cellpadding=10|
|valign=top|
|valign=top|
Line 686: Line 695:
|valign=top|
|valign=top|
{| class="wikitable" cellpadding="3"
{| class="wikitable" cellpadding="3"
!Name
!Nom
!Purpose
!Objectif
|-
|-
|<tt>type</tt>
|<tt>type</tt>
|Install the <tt>'''light'''</tt> animation
|Installe l'animation <tt>'''light'''</tt>
|-
|-
|<tt>light-type</tt>
|<tt>light-type</tt>
|This is a <tt>'''point'''</tt> light
|C'est une lumière <tt>'''point'''</tt>
|-
|-
|<tt>name</tt>
|<tt>name</tt>
|Name given to this animation
|Nom donné à cette animation
|-
|-
|<tt>object-name</tt>
|<tt>object-name</tt>
|Name of the light volume in the 3d model (typically a sphere centered on <tt>position</tt>, with a radius of <tt>far-m</tt>)
|Nom du volume lumière  dans le modèle 3D ( typiquement une sphère centrée sur <tt>position</tt>, avec un rayon de <tt>far-m</tt>)
|-
|-
|<tt>nopreview</tt>
|<tt>nopreview</tt>
|Hide light volume in fgrun 3d preview
|Volume lumière cachée dans fgrun 3d preview
|-
|-
|<tt>position</tt>
|<tt>position</tt>
|In object space, position of the light
|Dans espace object , position de la lumière
|-
|-
|<tt>ambient</tt>
|<tt>ambient</tt>
|Ambient color of the light
|Couleur ambiante de la lumière
|-
|-
|<tt>diffuse</tt>
|<tt>diffuse</tt>
|Diffuse color of the light
|Couleur diffuse de la lumière
|-
|-
|<tt>specular</tt>
|<tt>specular</tt>
|Specular color of the light
|Couleur specular de la lumièret
|-
|-
|<tt>dim-factor</tt>
|<tt>dim-factor</tt>
|Group of parameters to control a factor that is applied to ambient, diffuse and specular at the same time
|Groupe de paramètres pour contrôler un facteur appliqué à  ambient, diffuse et specular en même temps
|-
|-
|<tt>attenuation</tt>
|<tt>attenuation</tt>
|Three element vector. <c> element is the constant factor, <l> element is the linear factor and <q> element is the quadratic factor.<br />
|Trois element vector. <c> element est le facteur constant <l> element est le facteur linéaire et <q> element est le facteur quadratiquer.<br />
Attenuation of color at distance d is [[File:Spotlight_attenuation.png]]
Attenuation de couleur à distance d est [[File:Spotlight_attenuation.png]]
|-
|-
|<tt>near-m</tt>
|<tt>near-m</tt>
|Minimum distance of influence, from position, in meters
|Distance minimum d'influence, à partir de la position, en mètres
|-
|-
|<tt>far-m</tt>
|<tt>far-m</tt>
|Maximum distance of influence, from position, in meters
|Distance maximum d'influence, à partir de la position, en mètres
|}
|}
|}
|}


== TODO List ==
==== Considérations de performance et de compatibilité ====
Chaque lumière sur écran équivaut, pour le GPU à redessiner le volume lumière avec un shader, sans recueillir de buffer. Ainsi, chaque lumière vient avec un coût, ce qui est minime individuellement parlant, mais non négligeable quand jl y en a beaucoup. Ce coût augmente  avec la taille du volume lumière
 
De plus, il est raisonnable de permettre à un modèle de fonctionner avec le moteur de rendu classique qui ne sait rien des lumières et rendrait les volumes lumière comme une autre géométrie. Ainsi, c'est une bonne pratique de compléter chaque animation lumière par une animation sélective vérifiant :
*si Rembrandt est activé
*si le mode de qualité choisi correspond avec les possibilités de la lumière
*si la lumi§re doit être on ou off selon les autres paramètres de la simulation (position du soleil; position de du commutateur, présence de puissance...)
 
Une bonne propriété est de crèer  un reflet des préférences de l'utilisateur sur  qualité vs performance concernant les lumières, et un curseur dédié est ajouté dans le dialogue shader.
[[File:Fgfs-shaders-with-light.jpg|thumb|Light quality slider]]
La propriété à utiliser est:
/sim/rendering/shaders/lights
Le curseur qualité va de 0 (pas de lumière) à 4 (pleine lumière). Un simple réverbère d'aéroport apparaît à 1. Quelques lampes de pont à 2. Toutes les lampes de pont simples à 3, et les plus sophistiquées à 4
 
Exemple:
<syntaxhighlight lang="xml">
<animation>
  <type>light</type>
  <light-type>spot</light-type>
  <name>LightSource</name>
  <object-name>LightVolume</object-name>
  ...
</animation>
 
<animation>
  <type>select</type>
  <!-- Select the named animation -->
  <object-name>LightSource</object-name>
  <condition>
      <and>
        <!-- Rembrandt enabled ? -->
        <property>/sim/rendering/rembrandt/enabled</property>
        <!-- Quality ok ? -->
        <greater-than>
            <property>/sim/rendering/shaders/lights</property>
            <value>3.0</value>
        </greater-than>
        <!-- Simulation conditions ? -->
        <greater-than>
            <property>/sim/time/sun-angle-rad</property>
            <value>1.57</value>
        </greater-than>
      </and>
  </condition>
</animation>
 
</syntaxhighlight>
 
=== Tutoriels ===
[[User:F-JJTH|F-JJTH]] a compilé son expérience et celle de l'équipe de la PAF d'amélioration d'avions dans {{fr}} [http://equipe-flightgear.forumactif.com/t1034-howto-adapter-un-appareil-pour-rembrandt this tutorial].
 
== TODO Liste ==


=== Completed tasks ===
=== Tâches à compléter ===
*Fix shadow rendering when using multi threading in OSG
*Fixer le rendu shadow quand on emploie plusieurs liens en  OSG
*Implement Cascaded Shadow Map (need to be optimized - frustum calculation and night)
*Implementer Cascaded Shadow Map (a besoin d'être optimisée - frustum calculation et nuit)
*Honor 'noshadow' animation (done)
*Voir ce qui arrive avec brillance dans le brouillard: une sorte de terrain inconnu crée des patches blancs  dans le buffer emission-problème de génération de scène
*See what happens with glow in fog : unknown landclass creates white patches in the emission buffer - scenery generation problem
*Test multi-écran (mostly done)
*Test multi-screen (mostly done)
*Restorer splashscreen
*Restore splashscreen
*Dessiner des objets transparents avec rendu en premier (peut nécessiter la capture du bac transparence à partir de la phase géométrie et le placer dans la phase affichage) (OK - nécessite une contribution modèle)
*Draw transparent objects with forward rendering (may need to capture the transparent bin from the geometry stage and move it in the display stage) (OK - needs model contribution)
*Trouver une solution pour couleur ambient et emissive de material (peut nécessiter un buffer additionnel)
*Add spotlights as animations (nearly finished)
*Fournir un shader pour objets transparents qui puisse rendre le buffer emissive infaisable (en utilisant MRT) La phase lumière ne peut utiliser MRT  
*find a solution for ambient and emissive color of material (may need an additional buffer)
*Utiliser un buffer stencil pour limiter la taille lumière (non fait dans shader lumière)
*Provide a shader for transparent objects that could render to the emissive buffer too (using MRT) not doable. Light pass can't use MRT  
**nécessaire pour la lumière de cockpit pour réaliser des faux shadowws et éviter d'éclairer le runway de la cabine
*Use stencil buffer to limit light range(no - done in light shader)
*Utiliser un système effet à la place des shaders lourdement codés
**needed for cockpit light to implement fake shadows and avoid lighting the runway from the cabin through the airframe
*Intensités globales de brillance, ou occlusion ambiante via curseur dans le dialogue rendu
*Use effect system instead of hard-coded shaders
*Add new animation to link a light source to a model (need to provide point light animation duplicating spot light) (done)
*Tidy up the architecture (done)
*Global strength of glow or ambient occlusion via slider in rendering dialog
*Fix dim-factor in multiplayer mode (done)
*Design and implement a configurable pipeline (done)
*Document rendering pipeline configuration file format (done)


=== Near term tasks ===
=== Tâches à court terme ===
*Convert existing shaders to deferred rendering
*Convertir les shaders existants en rendu différé
*Avoid to redraw opaque objects in the light pass. Involve OSG node mask not properly initialized.
*Éviter de redessiner les objets opaques dans la phase lumière. Améliorer le masque node OSG .
*take care of particles and precipitation
*S'occuper des particules et précipitations
*Fix fog on clouds
*Fixer le brouillard sur les nuages
*Fix shadow matrices in multi-screen
*Fixer les matrices shadow dans multi-screen
*Implement lightfield shader
*IMettre en œuvre un lightfield shader


=== Long term ideas (unsorted) ===
=== Idées à long terme (non classées) ===
*implement strength of glow (in the emissive buffer alpha channel)
*implement strength of glow (in the emissive buffer alpha channel)
**provide levels 0 to 5 - we are currently at level 5
**provide levels 0 to 5 - we are currently at level 5
Line 772: Line 825:
*Implement quality vs performance user control
*Implement quality vs performance user control


== Gallery ==
== Gallerie ==
{{#ev:youtube|PXHhtQb5yzc}} {{#ev:youtube|peEzEapavkg}} {{#ev:youtube|RIetPh8iJXk}} {{#ev:youtube|oaNFrxgQY1c}} {{#ev:youtube|8xGzy12hlis}} {{#ev:youtube|ZyuHBlm3xXU}} {{#ev:youtube|RgH9GZRukOI}} {{#ev:youtube|UQvbHnBkpaM}} {{#ev:youtube|v02phoOqWHE}}{{#ev:youtube|dlSo4sBa7Nk}}
{{#ev:youtube|PXHhtQb5yzc}} {{#ev:youtube|peEzEapavkg}} {{#ev:youtube|RIetPh8iJXk}} {{#ev:youtube|oaNFrxgQY1c}} {{#ev:youtube|8xGzy12hlis}} {{#ev:youtube|ZyuHBlm3xXU}} {{#ev:youtube|RgH9GZRukOI}} {{#ev:youtube|UQvbHnBkpaM}} {{#ev:youtube|v02phoOqWHE}}{{#ev:youtube|dlSo4sBa7Nk}}


== Appendix ==
== Appendice ==
{{Appendix|all|
{{Appendix|all|
* {{cite web |url=http://http.download.nvidia.com/developer/presentations/2004/6800_Leagues/6800_Leagues_Deferred_Shading.pdf |title=Deferred Shading |author=Shawn Hargreaves and Mark Harris }}
* {{cite web |url=http://http.download.nvidia.com/developer/presentations/2004/6800_Leagues/6800_Leagues_Deferred_Shading.pdf |title=Deferred Shading |author=Shawn Hargreaves and Mark Harris }}
88

edits