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

Développement 2D, 3D et Jeux Discussion :

jeux 3d: précalcul d'occlusion par rendu caméra


Sujet :

Développement 2D, 3D et Jeux

  1. #1
    Inactif  

    Profil pro
    Inscrit en
    Novembre 2010
    Messages
    166
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Novembre 2010
    Messages : 166
    Points : 332
    Points
    332
    Par défaut jeux 3d: précalcul d'occlusion par rendu caméra
    bonjour,

    je sais préalculer les occlusions dans une scène 3d avec la technique à l'ancienne (en utilisant une structure avec des portails et des calculs chiants) et j'ai entendu qu'il y'a une méthode plus moderne qui est plus précise et qui ne nécessite pas d'avoir des portails

    j'aimerais donc essayer l'approche en rendu caméra (éventuellement accéléré avec une occlusion query dx10 mais on verra ça après)

    je voudrais expérimenter cette méthode mais j'aimerais savoir si j'ai pas par hasard oublié un cas de figure qui risque de causer des trous

    donc voilà comment je pensais m'y prendre:

    - je m'assure qu'il n'y a aucune fissure entre deux objets cote à cote

    - je veux savoir si un objet A est visible depuis une zone Z (qui peut être n'importe quoi, une cellule d'octree par exemple)

    - si A touche la zone Z alors il est automatiquement visible et je stoppe le test là

    - je désactive le rendu de tous les objets qui touchent la zone Z

    - je calcule la bounding sphère de A et Z, j'en déduis un cône ou un cylindre qui va me donner la position et la focale de la caméra (je peux trouver une méthode plus précise et moins conservative mais pour le moment je commence avec des sphères)

    - selon le sens du cône, l'un des deux objets va se trouver proche de la camera, on l'appelle B, et l'autre est éloigné, on l'appelle C

    - je désactive le rendu de tous les objets qui se trouvent entre la caméra et B, ainsi que le rendu de B.

    - j'agrandis légèrement l'objet C, je rends le reste de la scène et je regarde si C a au moins un pixel rendu ou si il est complètement recouvert



    Est-ce que c'est la bonne méthode ou est-ce que c'est foireux ?
    pour voir à quoi ressemble un projet amateur qui a réussi: http://www.advsys.net/ken/build.htm

  2. #2
    Membre confirmé

    Inscrit en
    Août 2007
    Messages
    300
    Détails du profil
    Informations forums :
    Inscription : Août 2007
    Messages : 300
    Points : 527
    Points
    527
    Par défaut
    Du point de vue du principe, cette technique pourrait justement servir à calculer vos "portails", elle est indépendante des -et compatible avec les- techniques "à l'ancienne".
    Du point de vue des détails, je pense qu'il y a une récursivité dans "je désactive le rendu de tous les objets qui se trouvent entre la caméra et B": pour cela ne vous faudrait-il pas l'occlusion entre la caméra et B?
    Par ailleurs, la caméra se déplace en général, donc j'ai du mal à voir comment l'algorithme pourrait servir à faire des précalculs. Pensez vous faire ceci en temps réel? Cela me parait vous condamner à des performances nettement moindres qu'avec des techniques à l'ancienne.
    A supposer que vous placiez la caméra dans la zone Z pointant vers A, je ne vois pas l'intérêt de travailler sur des sphères. Pourquoi ne pas rendre directement et complètement la scène vue depuis le point Z, avec un marqueur quelconque (par exemple une valeur de stencil différente) pour distinguer entre ce qui appartient à A et au reste? Après tout, il s'agit de pré-calculs, comme si vous calculiez des textures d'illumination complexes. Vous auriez la grande précision que vous recherchez, et en plus vous seriez compatibles avec toutes les techniques de rendu avancées que vous utilisez réellement.
    "Maybe C++0x will inspire people to write tutorials emphasizing simple use, rather than just papers showing off cleverness." - Bjarne Stroustrup
    "Modern C++11 is not your daddy’s C++" - Herb Sutter

  3. #3
    Inactif  

    Profil pro
    Inscrit en
    Novembre 2010
    Messages
    166
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Novembre 2010
    Messages : 166
    Points : 332
    Points
    332
    Par défaut
    bon je viens de faire des tracés pour voir et cette méthode est pas bonne, j'ai trouvé un cas de figure où ça va croire que le truc est occlus alors qu'il est visible

    donc non, méthode pas bon...
    pour voir à quoi ressemble un projet amateur qui a réussi: http://www.advsys.net/ken/build.htm

  4. #4
    Inactif  

    Profil pro
    Inscrit en
    Novembre 2010
    Messages
    166
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Novembre 2010
    Messages : 166
    Points : 332
    Points
    332
    Par défaut
    ac_wingless > Calculer l'occlusion depuis un point Z en fait c'est facile avec les hardware occlusion queries, mais c'est pour le temps réel qu'on fait ça

    Mais précalculer l'occlusion pour tout une zone, ça marchera pas avec une caméra... donc ma technique était foireuse

    il faut utiliser autre chose

    j'ai trouvé l'explication là

    http://citeseerx.ist.psu.edu/viewdoc...=rep1&type=pdf

    il faut faire une "projection étendue", c'est à dire que la caméra n'est plus un point mais une zone donc sur le plan de projection il faut transformer les objets en une forme plus grosse qui représente toutes les vues possibles de l'objet depuis la zone (ils décomposent le calcul en 2d, en 3d ça serait injouable)... pas possible de faire ça comme une feignasse avec la carte vidéo donc... faut se taper des maths
    pour voir à quoi ressemble un projet amateur qui a réussi: http://www.advsys.net/ken/build.htm

  5. #5
    Inactif  

    Profil pro
    Inscrit en
    Novembre 2010
    Messages
    166
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Novembre 2010
    Messages : 166
    Points : 332
    Points
    332
    Par défaut
    leur truc de projection étendue ça marcherait avec une caméra à condition qu'un ait un occluder convexe unique... s'il y'en a plusieurs c'est pas bon
    pour voir à quoi ressemble un projet amateur qui a réussi: http://www.advsys.net/ken/build.htm

  6. #6
    Inactif  

    Profil pro
    Inscrit en
    Novembre 2010
    Messages
    166
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Novembre 2010
    Messages : 166
    Points : 332
    Points
    332
    Par défaut
    bon donc à priori ça m'a pas l'air trop possible de précalculer les occlusions avec un bête rendu camera... je coche résolu
    pour voir à quoi ressemble un projet amateur qui a réussi: http://www.advsys.net/ken/build.htm

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. Détection et suivi d'un cheval par une caméra mobile
    Par psycko_puppet dans le forum OpenCV
    Réponses: 20
    Dernier message: 17/03/2017, 12h28
  2. convertir une photo prise par la caméra (jpeg) en bmp
    Par androidisme dans le forum API standards et tierces
    Réponses: 1
    Dernier message: 17/08/2010, 09h27
  3. Reconnaissance de couleur par une caméra
    Par so.generously dans le forum Bibliothèques
    Réponses: 1
    Dernier message: 13/03/2010, 18h26
  4. Réponses: 0
    Dernier message: 24/09/2009, 14h41

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