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

DirectX Discussion :

Création de lumières à la volée


Sujet :

DirectX

  1. #1
    Membre à l'essai
    Profil pro
    Inscrit en
    Février 2010
    Messages
    60
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2010
    Messages : 60
    Points : 23
    Points
    23
    Par défaut Création de lumières à la volée
    Salut Ami(e)s dev.
    Je suis entrain de coder un moteur de jeu avec D3D11 et C++.
    Cependant je m'interroge sur la chose suivante :
    Comment gérer la création dynamique de lumières dans une scene ?
    Non seulement les lumieres classiques comme le point light ou le spotlight mais aussi l'illumination générée par une explosion (comportement non connu à la compilation).

    Solution possibles :
    1- Générer les shaders au runtime (à mon avis trop trop couteux)
    2- Utiliser une sorte de constant buffer mais dynamique. Je sais que ça n'existe pas mais je me rappelle que j'ai utlisé des textures buffers sous Opengl et qu'ils peuvent faire le boulot (moins élégant que les constant buffer mais ça marche)
    Sous D3D11 aussi je pense que ça existe mais dans la doc c'est pas clair.

    Sinon pourriez-vous partager svp vos différentes expériences pour la création de lumière à la volée avec D3D ?
    Toute réponse sera la bienvenue.
    Merci

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


    Avatar de LittleWhite
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Mai 2008
    Messages
    26 859
    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 859
    Points : 218 580
    Points
    218 580
    Billets dans le blog
    120
    Par défaut
    Bonjour,

    Avez vous regardé du coté des techniques de rendu différé / shadow mapping / light mapping ?
    Sinon, pour l'explosion, il suffira d'ajouter une point light et cela fera assez réaliste pour être ok.

    Pourquoi voulez vous généré les shaders ? Utilisez vous encore une vieille technique avec un nombre limité de lampe ?
    Sous DirectX 11, il y a plein d'exemple dans le SDK de Microsoft et dans le SDK de NVidia, jetez y un oeil (ou même deux).
    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 à l'essai
    Profil pro
    Inscrit en
    Février 2010
    Messages
    60
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2010
    Messages : 60
    Points : 23
    Points
    23
    Par défaut
    Merci LittleWhite pour ta reponse
    Avez vous regardé du coté des techniques de rendu différé / shadow mapping / light mapping ?
    Sinon, pour l'explosion, il suffira d'ajouter une point light et cela fera assez réaliste pour être ok.
    En fait cela n'a rien à voir avec mon probleme. Mais peut-etre que je n'ai pas été assez clair. Je m'explique :
    Mon problème n'est pas l'illumination , les shadows ou autre mais se situe plus en amont c-a-d comment allouer dynamiquement de la memoire (constant buffer) sur le GPU pour stocker les light color et les light position.
    Pourquoi voulez vous généré les shaders ? Utilisez vous encore une vieille technique avec un nombre limité de lampe ?
    Sous DirectX 11, il y a plein d'exemple dans le SDK de Microsoft et dans le SDK de NVidia, jetez y un oeil (ou même deux).
    Là je veux plutot parler de création dynamique de string + compilation des shaders au runtime

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


    Avatar de LittleWhite
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Mai 2008
    Messages
    26 859
    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 859
    Points : 218 580
    Points
    218 580
    Billets dans le blog
    120
    Par défaut
    Hum, j'ai encore du mal à saisir.

    Lorsque nous étions limité au pipeline fixe, nous utilisions huit lampes. Pour le calcul des huit lampes, on utilisait un for (pour calculer l'influence de chaque lampe).
    Si on avait si lampes, on passait une variable uniforme pour dire que nous n'en avions que six.

    Le principe est relativement le même avec le pipeline dynamique. Sauf que l'on utilise du defered shading, et que, en théorie, on fait un rendu de N quad pour calculer l'influence de chaque lampe, dans sa localité. Donc, dans ce cas là, cela revient à rajouter un quad dans le buffer de géométrie.
    Sinon, on peut passer les informations dans une textures. Toujours est il qu'il faudra passer une variable au shader pour indiquer le nombre de lampe et d'information à lire dans la texture.


    La compilation dynamique des shader est à éviter je pense. Je n'ai jamais entendu parler de telle technique.
    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.

  5. #5
    Candidat au Club
    Homme Profil pro
    Inscrit en
    Juillet 2012
    Messages
    2
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Juillet 2012
    Messages : 2
    Points : 2
    Points
    2
    Par défaut
    Pour faire des calculs de lumiere en dx11 generalement une option assez pratique est de passer par un StructuredBuffer.

    Ca permet de stocker les infos de lumiere (position/rayon...), et apres tu peux utiliser DrawInstanced avec le nombre de lumieres qui sont actives. (le clip du quad se fait assez bien en geometry shader)

    (en general je cree un buffer avec une variable MAX_LIGHT a 1024, ca suffit dans la plupart des cas, et je mets a jour le buffer a chaque frame).

    La generation de shader sert dans certains cas (certains moteurs changent des #define pour au premier demarrage du jeu, ou quand on change les parametres de qualite).

    Quelques liens pour tout ca (en anglais):
    http://software.intel.com/en-us/arti...ing-pipelines/

    http://mynameismjp.wordpress.com/201...red-rendering/

Discussions similaires

  1. création de page à la volée
    Par lieto dans le forum Général JavaScript
    Réponses: 10
    Dernier message: 28/06/2006, 14h53
  2. Création de classes à la volée...
    Par ouiffi dans le forum Langage
    Réponses: 8
    Dernier message: 16/12/2005, 18h01
  3. [ImageMagick] Création d'image à la volée
    Par gdawirs dans le forum Bibliothèques et frameworks
    Réponses: 4
    Dernier message: 21/11/2005, 15h53
  4. [JMenuBar] Création d'objets à la volée
    Par Rampa dans le forum Composants
    Réponses: 5
    Dernier message: 29/06/2005, 13h56
  5. [IB][IBQUERY][D7 pro] Création de Triggers à la volée.
    Par N1bus dans le forum Bases de données
    Réponses: 6
    Dernier message: 13/10/2004, 14h23

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