IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

SDL Discussion :

Des "effets" en SDL ?


Sujet :

SDL

  1. #1
    Membre confirmé
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Février 2008
    Messages
    308
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 36
    Localisation : France

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : Finance

    Informations forums :
    Inscription : Février 2008
    Messages : 308
    Points : 622
    Points
    622
    Par défaut Des "effets" en SDL ?
    Bonsoir!

    Je réfléchit au moyen de réaliser un effet de lumiere en SDL.
    comme sur cette image par exemple ( exemple au hasard sur google ).

    Je ne pense pas être le premier à réfléchir à ça, donc peut être certains d'entre vous pourrais m'indiquer la marche a suivre. Je ne cherche pas du code, surtout des concepts applicables à SDL.

    Pour l'instant, la seule technique qui me semble possible c'est de blitter des "particules" ou pixels en jouant sur l'alpha, c'est pas top a mon avis...
    avez vous une autre solution?

    Si vous avez d'autres technique pour embellir vos applications SDL à partager, je suis preneur.

  2. #2
    Responsable 2D/3D/Jeux


    Avatar de LittleWhite
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Mai 2008
    Messages
    26 860
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Ingénieur développement logiciels

    Informations forums :
    Inscription : Mai 2008
    Messages : 26 860
    Points : 219 062
    Points
    219 062
    Billets dans le blog
    120
    Par défaut
    Bonjour,

    Malheuresement, moi même je ne vois pas trop comment faire ça en SDL ( SDL seulement je parle ).
    La seule idée c'est d'utilisé des images spécialement pour les glow ( lumières néon je crois que c'est le terme ), que l'on agrandit / rétrécit, et sur lesquelles on joue beaucoup sur l'alpha ( la majorité de ce type de sprite, c'est de l'alpha ).

    Sinon, c'est de faire une sorte de shader entièrement à la main en utilisant la lecture de pixel, et l'écriture de pixel. J'imagine que cela risque d'être ultra lent, vu que la SDL n'a jamais été forte pour la lecture de pixel.

    Maintenant, moi je verrai bien une utilisation de OpenGL, mais que dans un contexte 2D. Avec OpenGL nous aurions l'avantage d'avoir des FBO ( dessin des des textures ) et surtout, les shaders. Qui sont très rapide pour faire mumuse avec les pixels.

    Puis finalement, je verrai la même méthode, avec XNA ( qui me semble bien pour faire des jeux )
    Vous souhaitez participer à la rubrique 2D/3D/Jeux ? Contactez-moi

    Ma page sur DVP
    Mon Portfolio

    Qui connaît l'erreur, connaît la solution.

  3. #3
    Membre expérimenté
    Avatar de coyotte507
    Profil pro
    Inscrit en
    Octobre 2006
    Messages
    1 327
    Détails du profil
    Informations personnelles :
    Âge : 33
    Localisation : France

    Informations forums :
    Inscription : Octobre 2006
    Messages : 1 327
    Points : 1 452
    Points
    1 452
    Par défaut
    +1, pour moi utiliser openGL est ce qu'il y a de mieux. Ca te permet de profiter de l'accélération matérielle qui n'est pas là avec SDL (pas encore); sinon tu devras faire pixel par pixel...

  4. #4
    Membre confirmé
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Février 2008
    Messages
    308
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 36
    Localisation : France

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : Finance

    Informations forums :
    Inscription : Février 2008
    Messages : 308
    Points : 622
    Points
    622
    Par défaut
    SFML gère ce genre de truc peut etre?

  5. #5
    Membre émérite Avatar de SofEvans
    Homme Profil pro
    Développeur C
    Inscrit en
    Mars 2009
    Messages
    1 076
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 35
    Localisation : France

    Informations professionnelles :
    Activité : Développeur C

    Informations forums :
    Inscription : Mars 2009
    Messages : 1 076
    Points : 2 328
    Points
    2 328
    Par défaut
    D'apres ce que j'en sais, la SFLM reprend tout ce que peut faire la SDL (et rajoute meme d'autre chose).

    Apres, ce genre d'effet peut tres bien etre fait en SDL, mais comme dit precdemment, la SDL n'est pas faite pour faire joujou sur le pixel par pixel, donc, ca risque d'etre lent.

  6. #6
    Responsable 2D/3D/Jeux


    Avatar de LittleWhite
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Mai 2008
    Messages
    26 860
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Ingénieur développement logiciels

    Informations forums :
    Inscription : Mai 2008
    Messages : 26 860
    Points : 219 062
    Points
    219 062
    Billets dans le blog
    120
    Par défaut
    Je pense qu'il faut faire un essai avec la SFML (ou demander directement au createur ) Il se peut que la SFML soit plus rapide (Je dis cela, bien que je ne l'ai jamais utilise).
    Vous souhaitez participer à la rubrique 2D/3D/Jeux ? Contactez-moi

    Ma page sur DVP
    Mon Portfolio

    Qui connaît l'erreur, connaît la solution.

  7. #7
    Membre confirmé
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Février 2008
    Messages
    308
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 36
    Localisation : France

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : Finance

    Informations forums :
    Inscription : Février 2008
    Messages : 308
    Points : 622
    Points
    622
    Par défaut
    la SFML est beaucoup plus rapide me semble, surtout quand beaucoup d'images sont affichées. j'irai faire un tour sur le fofo SFML.

    pou conclure, la SDL est pas adaptée a ce genre d'effets, il vaut mieux utiliser OpenGL, et donc peut être SFML qui utilise OpenGL

  8. #8
    Rédacteur
    Avatar de Laurent Gomila
    Profil pro
    Développeur informatique
    Inscrit en
    Avril 2003
    Messages
    10 651
    Détails du profil
    Informations personnelles :
    Âge : 39
    Localisation : France, Moselle (Lorraine)

    Informations professionnelles :
    Activité : Développeur informatique

    Informations forums :
    Inscription : Avril 2003
    Messages : 10 651
    Points : 15 920
    Points
    15 920
    Par défaut
    Si vous trouvez un moyen de réaliser vos effets avec des primitives graphiques, alors SFML sera sans doute plus rapide. Par contre si vous tapez dans les pixels à la main, ça n'aidera pas beaucoup par rapport à SDL étant donné que tout le boulot reviendra au CPU.

    De manière assez évidente je pense que les shaders (qui sont intégrés au module graphique de SFML) peuvent grandement aider ; à part ça je ne vois pas trop, faudrait décortiquer l'effet souhaité et voir comment il pourrait être réalisé.

  9. #9
    Responsable 2D/3D/Jeux


    Avatar de LittleWhite
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Mai 2008
    Messages
    26 860
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Ingénieur développement logiciels

    Informations forums :
    Inscription : Mai 2008
    Messages : 26 860
    Points : 219 062
    Points
    219 062
    Billets dans le blog
    120
    Par défaut
    Je voudrais juste précisé, que ce n'est pas "Il faudrait utiliser OpenGL pour ce genre d'effets", mais juste qu'il faut utiliser le GPU et tous les avantages qu'il donne.
    C'est pour cela, que l'on parle de shaders, ( certes, moi même je n'ai parlé que de OpenGL ), mais DirectX pourra aussi bien faire ce genre de chose.

    Après, je reste convaincu que l'on peut le faire avec la SDL ( ou SFML ) en trichant. Je suis toujours d'avis, que des sprites ( particules ) avec différents niveaux de transparence, et différentes tailles peuvent réalisés ceci. Et cela sera assez rapide, car cela utiliserait les avantages de SFML et SDL.
    ( Quoique, je serais d'avis que la SFML serait plus facile à utiliser que la SDL )
    Vous souhaitez participer à la rubrique 2D/3D/Jeux ? Contactez-moi

    Ma page sur DVP
    Mon Portfolio

    Qui connaît l'erreur, connaît la solution.

  10. #10
    Expert éminent sénior
    Avatar de Mat.M
    Profil pro
    Développeur informatique
    Inscrit en
    Novembre 2006
    Messages
    8 361
    Détails du profil
    Informations personnelles :
    Localisation : France, Rhône (Rhône Alpes)

    Informations professionnelles :
    Activité : Développeur informatique

    Informations forums :
    Inscription : Novembre 2006
    Messages : 8 361
    Points : 20 381
    Points
    20 381
    Par défaut
    Citation Envoyé par bebaijhi Voir le message
    Bonsoir!

    Je réfléchit au moyen de réaliser un effet de lumiere en SDL.
    comme sur cette image par exemple ( exemple au hasard sur google ).

    .
    Salut ce que tu veux faire c'est ce que l'on appelle un "effet de particules" ou particle effect en anglais

    *soit tu accédes pixel par pixel sur une SDL_Surface
    http://www.libsdl.org/cgi/docwiki.cgi/SDL_LockSurface

    *soit et c'est mieux tu utilises la bibliothèque de notre ami Frifron
    http://www.developpez.net/forums/d63...s-open-source/


    A noter que c'est aisé à faire avec Direct3d les "points sprites" permettent de faire cela..

    Tu peux faire aussi de la 2d avec Irrlicht 3d( eh oui ) et faire des effets de particules

  11. #11
    Responsable 2D/3D/Jeux


    Avatar de LittleWhite
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Mai 2008
    Messages
    26 860
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Ingénieur développement logiciels

    Informations forums :
    Inscription : Mai 2008
    Messages : 26 860
    Points : 219 062
    Points
    219 062
    Billets dans le blog
    120
    Par défaut
    Citation Envoyé par Mat.M Voir le message
    A noter que c'est aisé à faire avec Direct3d les "points sprites" permettent de faire cela..
    Qui sont aussi disponible sous OpenGL ( je crois que c'est une extension ).
    Vous souhaitez participer à la rubrique 2D/3D/Jeux ? Contactez-moi

    Ma page sur DVP
    Mon Portfolio

    Qui connaît l'erreur, connaît la solution.

  12. #12
    Rédacteur
    Avatar de Laurent Gomila
    Profil pro
    Développeur informatique
    Inscrit en
    Avril 2003
    Messages
    10 651
    Détails du profil
    Informations personnelles :
    Âge : 39
    Localisation : France, Moselle (Lorraine)

    Informations professionnelles :
    Activité : Développeur informatique

    Informations forums :
    Inscription : Avril 2003
    Messages : 10 651
    Points : 15 920
    Points
    15 920
    Par défaut
    Salut ce que tu veux faire c'est ce que l'on appelle un "effet de particules" ou particle effect en anglais
    Pas forcément. Ce n'est pas super clair avec le screenshot donné en exemple, ça pourrait tout aussi bien être du glow, auquel cas c'est un post-process qui applique un filtre à l'image finale et qui s'implémente plutôt avec un pixel shader.

  13. #13
    Responsable 2D/3D/Jeux


    Avatar de LittleWhite
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Mai 2008
    Messages
    26 860
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Ingénieur développement logiciels

    Informations forums :
    Inscription : Mai 2008
    Messages : 26 860
    Points : 219 062
    Points
    219 062
    Billets dans le blog
    120
    Par défaut
    Je me demande ( depuis le début de la conversation ) si un telle effet de glow ( bon, peut être un peu moins beau ) ne pourrais pas être fait avec des textures transparentes, colorée. Je vais me pencher sur la question bientot ( enfin dès que j'ai du temps ).
    Sinon, je suis tout à fait d'accord, qu'un shader et hop c'est fini .
    Vous souhaitez participer à la rubrique 2D/3D/Jeux ? Contactez-moi

    Ma page sur DVP
    Mon Portfolio

    Qui connaît l'erreur, connaît la solution.

  14. #14
    Rédacteur
    Avatar de Laurent Gomila
    Profil pro
    Développeur informatique
    Inscrit en
    Avril 2003
    Messages
    10 651
    Détails du profil
    Informations personnelles :
    Âge : 39
    Localisation : France, Moselle (Lorraine)

    Informations professionnelles :
    Activité : Développeur informatique

    Informations forums :
    Inscription : Avril 2003
    Messages : 10 651
    Points : 15 920
    Points
    15 920
    Par défaut
    Je me demande ( depuis le début de la conversation ) si un telle effet de glow ( bon, peut être un peu moins beau ) ne pourrais pas être fait avec des textures transparentes, colorée. Je vais me pencher sur la question bientot ( enfin dès que j'ai du temps ).
    Le problème c'est qu'un effet de glow c'est souvent dynamique, ça dépend des sources lumineuses de la scène.
    Tu peux en effet tout précalculer dans une ou plusieurs textures et claquer ça par dessus ta scène, mais tu n'iras pas bien loin, ça restera complètement statique.

  15. #15
    Responsable 2D/3D/Jeux


    Avatar de LittleWhite
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Mai 2008
    Messages
    26 860
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Ingénieur développement logiciels

    Informations forums :
    Inscription : Mai 2008
    Messages : 26 860
    Points : 219 062
    Points
    219 062
    Billets dans le blog
    120
    Par défaut
    Je ne sais pas ...
    Pour moi, autour de ma source lumineuse, je vais appliquer ma texture transparente ( qui aura pour centre la lumière ) ,afin que grâce à la transparence, on teinte tout ce qu'il y autour
    Après, on peut jouer avec un scaling ( si on en a un facile à appliquer ).

    Après, pour une telle masse de particules ( vu sur l'image ), on peut jouer avec plusieurs textures, autour de notre masse de particules. Les textures sont bien sur déplacer avec les particules. ( bon, il faut un algo de detection des masses )
    Vous souhaitez participer à la rubrique 2D/3D/Jeux ? Contactez-moi

    Ma page sur DVP
    Mon Portfolio

    Qui connaît l'erreur, connaît la solution.

  16. #16
    Rédacteur
    Avatar de Laurent Gomila
    Profil pro
    Développeur informatique
    Inscrit en
    Avril 2003
    Messages
    10 651
    Détails du profil
    Informations personnelles :
    Âge : 39
    Localisation : France, Moselle (Lorraine)

    Informations professionnelles :
    Activité : Développeur informatique

    Informations forums :
    Inscription : Avril 2003
    Messages : 10 651
    Points : 15 920
    Points
    15 920
    Par défaut
    Pour moi, autour de ma source lumineuse, je vais appliquer ma texture transparente ( qui aura pour centre la lumière ) ,afin que grâce à la transparence, on teinte tout ce qu'il y autour
    Ah d'accord, je n'avais pas compris ça comme ça. Là on se rapproche plus de l'"éclairage" que d'un effet de flou lumineux (ce qu'est le glow), mais effectivement ça peut être une solution.
    Attention toutefois, avec cette technique on n'éclaire pas vraiment, on ne fait qu'ajouter du blanc plus ou moins opaque. Si par exemple on a deux sources lumineuses qui se chevauchent, on aura une saturation en blanc plutôt qu'un décor complètement éclairé (et qui serait donc à 100% de ses couleurs d'origine).
    Mais là on entre dans un autre débat, rendre correctement un éclairage nécessiterait une toute autre approche (typiquement : afficher toutes les sources lumineuses dans une image, et afficher celle-ci par dessus la scène avec un mode de blending multiplicatif).

  17. #17
    Responsable 2D/3D/Jeux


    Avatar de LittleWhite
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Mai 2008
    Messages
    26 860
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Ingénieur développement logiciels

    Informations forums :
    Inscription : Mai 2008
    Messages : 26 860
    Points : 219 062
    Points
    219 062
    Billets dans le blog
    120
    Par défaut
    Je crois que j'ai reussi a me faire comprendre ( pardon pour l'explication flou, et pour l'utilisation d'un terme au mauvais endroit ).
    Mais je tiens a rajouter, que l'eclairage n'est pas oblige d'etre blanc. Par la je veux dire ( du moins en OpenGL ), que l'on peut toujours choisir une couleur, pour teinter notre sprite du halo de la lumiere, avant de l'appliquer. Je ne suis pas sur de savoir le faire en SDL ( a moins que je ne genere la surface a la volee ), et je ne sais pas ce qu'il en ai pour la SFML ( malheuresement ).

    Pour la saturation, j'ai envie de dire, et si on la limitait avec un pixel shader
    Donc, nous remarquerons, que pour tout ce qui est pousse, nous allons toujours tendre vers l'utilisation d'un shader, qui donne plus de liberte.

    Apres, je pense que l'on peut faire non pas seulement de l'eclairage avec cette technique, mais aussi un flou lumineux.
    Je pense a la methode suivante ( nous jouons principalement sur l'ordre de l'affichage et les transparences ):

    - Dessin du fond ( background )
    - Dessin de notre halo lumineux. Celui ci est un peu plus grand que les particules que l'on veut mettre. Il teinte le dessin de fond ( background ). Comme dit precedemment, pour faire ceci, c'est l'application d'une texture utilisant principalement la transparence, et en teintant la texture de la couleur voulu.
    - Et on applique les sprites de particules. Qui recouvre donc notre halo lumineux.

    Comme optimisation, il faut penser a eviter de dessiner une texture transparente, par particules.

    (En fait, j'ai un doute sur le resultat final et je doute que cela fasse un glow ).

    Sinon, je suis d'accord pour faire un premier rendu des halo lumineux sur une texture, puis appliquer cette texture.
    Vous souhaitez participer à la rubrique 2D/3D/Jeux ? Contactez-moi

    Ma page sur DVP
    Mon Portfolio

    Qui connaît l'erreur, connaît la solution.

  18. #18
    Rédacteur
    Avatar de Laurent Gomila
    Profil pro
    Développeur informatique
    Inscrit en
    Avril 2003
    Messages
    10 651
    Détails du profil
    Informations personnelles :
    Âge : 39
    Localisation : France, Moselle (Lorraine)

    Informations professionnelles :
    Activité : Développeur informatique

    Informations forums :
    Inscription : Avril 2003
    Messages : 10 651
    Points : 15 920
    Points
    15 920
    Par défaut
    Mais je tiens a rajouter, que l'eclairage n'est pas oblige d'etre blanc. Par la je veux dire ( du moins en OpenGL ), que l'on peut toujours choisir une couleur, pour teinter notre sprite du halo de la lumiere, avant de l'appliquer
    Ce sera pareil. A partir du moment où tu appliques ton halo en blending additif, plus tu en mettras et plus tu convergeras vers la couleur du halo, jusqu'à ce qu'on ne vois plus que celle-ci et plus du tout les pixels qui sont censés être en dessous.
    Comme je l'ai mentionné, le seul moyen d'avoir un vrai éclairage est d'utiliser le blending multiplicatif, ce qui nécessite un buffer de rendu intermédiaire. Ce qui se fait très bien avec SFML 2, pour ce qui est de SDL j'ai des doutes.

    Je ne suis pas sur de savoir le faire en SDL ( a moins que je ne genere la surface a la volee ), et je ne sais pas ce qu'il en ai pour la SFML ( malheuresement ).
    Avec SFML tu peux par exemple charger un sprite représentant une forme de halo générique de couleur blanche, la teinter en temps réel avec la couleur de ton choix, et éventuellement faire varier son opacité. Ca ne coûtera rien à l'exécution.
    Avec SDL ce genre de manip risque d'être plus difficile.

    Pour la saturation, j'ai envie de dire, et si on la limitait avec un pixel shader
    Ca ne changera rien, à partir du moment où l'information (la couleur du pixel qui se trouve sous l'éclairage) est perdue car saturée par la couleur du halo, tu ne peux pas le retrouver.
    Si ce à quoi tu pensais était de limiter l'intensité / l'opacité de lumière à un certain maximum, ça donnera des résultats bizarres visuellement, avec des intensités lumineuses pas bien réparties

  19. #19
    Responsable 2D/3D/Jeux


    Avatar de LittleWhite
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Mai 2008
    Messages
    26 860
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Ingénieur développement logiciels

    Informations forums :
    Inscription : Mai 2008
    Messages : 26 860
    Points : 219 062
    Points
    219 062
    Billets dans le blog
    120
    Par défaut
    Donc, premiere conclusion, utilisons la SFML pour faire ce genre d'effets ( Je m'en doutais )

    Ce sera pareil. A partir du moment où tu appliques ton halo en blending additif, plus tu en mettras et plus tu convergeras vers la couleur du halo, jusqu'à ce qu'on ne vois plus que celle-ci et plus du tout les pixels qui sont censés être en dessous.
    Comme je l'ai mentionné, le seul moyen d'avoir un vrai éclairage est d'utiliser le blending multiplicatif, ce qui nécessite un buffer de rendu intermédiaire.
    Je crois que j'ai besoin de plus d'explication. Pour le blending addictif, je suis ok, un moment on sature. Pour le multiplicatif, on va sature a un moment, n'est ce pas? Et pourquoi que l'on fait un buffer de rendu intermediaire ( avec tout les halos de toutes les lumieres? que l'on multipliera par la suite avec le fond? )

    Ca ne changera rien, à partir du moment où l'information (la couleur du pixel qui se trouve sous l'éclairage) est perdue car saturée par la couleur du halo, tu ne peux pas le retrouver.
    Si ce à quoi tu pensais était de limiter l'intensité / l'opacité de lumière à un certain maximum, ça donnera des résultats bizarres visuellement, avec des intensités lumineuses pas bien réparties
    Je dois surement avoir un probleme pour simuler tout cela dans ma tete. Mais je pensais que les halos de lumiere aurait une transparence ( et une couleur ) variant de 0 a 0.5 ( pour rappel, les couleurs varient de 0 a 1 ).
    Notre premier halo, par exemple, il ajoute 0.3 au pixel sur lequel on l'applique.
    Maintenant, si on a deux halos, au meme endroit, au lieu de faire un ajout de 0.6, on va limiter cette ajout a 0.5 ( par exemple ). Autre cas, c'est de ne rien ajouter et de faire comme si on avait qu'un halo.
    Meme pour ce cas, je suis d'accord que l'on est un rendu intermediaire, pour preparer toutes une textures avec tout les halos finis, qui varient de 0 a 0.5.
    Vous souhaitez participer à la rubrique 2D/3D/Jeux ? Contactez-moi

    Ma page sur DVP
    Mon Portfolio

    Qui connaît l'erreur, connaît la solution.

  20. #20
    Rédacteur
    Avatar de Laurent Gomila
    Profil pro
    Développeur informatique
    Inscrit en
    Avril 2003
    Messages
    10 651
    Détails du profil
    Informations personnelles :
    Âge : 39
    Localisation : France, Moselle (Lorraine)

    Informations professionnelles :
    Activité : Développeur informatique

    Informations forums :
    Inscription : Avril 2003
    Messages : 10 651
    Points : 15 920
    Points
    15 920
    Par défaut
    Et pourquoi que l'on fait un buffer de rendu intermediaire ( avec tout les halos de toutes les lumieres? que l'on multipliera par la suite avec le fond? )
    Si je résume un peu, la solution qui ne marche pas fait ceci :
    - on ajoute du blanc aux zones éclairées
    - on laisse les zones non éclairées tel quelles
    On voit bien que ça ne marche pas du tout, et on devine quelle est la solution qui fonctionne :
    - laisser les zones éclairées tel quelles
    - assombrir les zones non éclairées avec du noir
    Mais le problème c'est que les zones de noir sont le complémentaire des zones des lumières (ie. on ne peut pas afficher directement les zones non éclairées). Par exemple si tu as une lampe dans ta scène, ce qu'il faudrait afficher en noir ce serait tout l'écran moins la forme circulaire de ta lampe.
    Le seul moyen de construire ces zones noires, c'est de partir d'une image complètement noire et d'y dessiner les lumières ; on obtient une image ne contenant que de la lumière et de l'ombre.
    Ensuite il ne reste plus qu'à coller cette image par dessus la vraie scène avec un blending multiplicatif : dans les zones éclairées les pixels garderont leur valeur, alors que dans les zones assombries on ne verra plus rien.

    Pour le multiplicatif, on va sature a un moment, n'est ce pas?
    On va saturer la couleur de la lumière dans le buffer intermédiaire, ce qui va produire l'effet voulu : le pixel qui se trouve au dessous sera plus éclairé (donc il sera plus proche de sa couleur d'origine).

    Je dois surement avoir un probleme pour simuler tout cela dans ma tete. Mais je pensais que les halos de lumiere aurait une transparence ( et une couleur ) variant de 0 a 0.5 ( pour rappel, les couleurs varient de 0 a 1 ).
    Notre premier halo, par exemple, il ajoute 0.3 au pixel sur lequel on l'applique.
    Maintenant, si on a deux halos, au meme endroit, au lieu de faire un ajout de 0.6, on va limiter cette ajout a 0.5 ( par exemple ).
    Du coup si tu superposes plusieurs lampes tu vas avoir une grosse zone homogène à 0.5, et tu ne vas plus voir qu'il y a plusieurs lampes superposées.
    Et puis plus tu réduis l'effet de saturation, plus tu réduis l'impact visuel de l'éclairage. Donc au final soit tu auras un résultat qui ne pète pas la rétine mais qui reproduit très faiblement l'éclairage, soit tu reproduit fidèlement l'éclairage mais avec des zones de couleur unie là où il est trop intense. Dans tous les cas tu ne t'en sors pas, la seule vraie solution c'est celle à base d'assombrissement.

+ Répondre à la discussion
Cette discussion est résolue.
Page 1 sur 2 12 DernièreDernière

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo