CONNEXION
  • RetourJeux
    • Sorties
    • Hit Parade
    • Les + populaires
    • Les + attendus
    • Soluces
    • Tous les Jeux
    • Gaming
  • RetourActu Gaming
    • News
    • Astuces
    • Tests
    • Previews
    • Toute l'actu gaming
  • RetourBons plans
    • Bons plans
    • Bons plans Smartphone
    • Bons plans Hardware
    • Bons plans Image et Son
    • Bons plans Amazon
    • Bons plans Cdiscount
    • Bons plans Decathlon
    • Bons plans Fnac
    • Tous les Bons plans
  • RetourJVTech
    • Actus High-Tech
    • Intelligence Artificielle
    • Smartphones
    • Mobilité urbaine
    • Hardware
    • Image et son
    • Tutoriels
    • Tests produits High-Tech
    • Guides d'achat High-Tech
    • JVTech
  • RetourCulture
    • Actus Culture
    • Culture
  • RetourVidéos
    • A la une
    • Gaming Live
    • Vidéos Tests
    • Vidéos Previews
    • Gameplay
    • Trailers
    • Chroniques
    • Replay Web TV
    • Toutes les vidéos
  • RetourForums
    • Hardware PC
    • PS5
    • Switch 2
    • Xbox Series
    • Switch
    • Pokemon pocket
    • FC 25 Ultimate Team
    • League of Legends
    • Tous les Forums
  • PC
  • PS5
  • Xbox Series
  • Switch 2
  • PS4
  • One
  • Switch
  • iOS
  • Android
  • MMO
  • RPG
  • FPS
En ce moment Genshin Impact Valhalla Breath of the wild Animal Crossing GTA 5 Red dead 2
Liste des sujets

Algorithme de LOD

Trapamoosch
Trapamoosch
Niveau 5
17 juillet 2002 à 13:16:13

J´avais pensé à cet algorithme pour effectuer un LOD sur des objets

On calcule un angle limite en fonction de la distance entre la caméra et l´objet en question.

Pour chaque polygone, on regarde l´angle que fait sa normale avec la normale de chacun des triangles qui lui sont adjacents. Si cet angle est inférieur à l´angle limite, on fusionne les deux triangles.

L´algo me parait un peu trop simple pur être réellement efficace... Quelqu´un a-t-il mieux à proposer ?

Lightness1024
Lightness1024
Niveau 10
17 juillet 2002 à 22:58:39

fo faire gaffe a la chute des fps avec un truc pareil !
et maleheureusement ca ne va pas marcher sur tout les types de solides mais ca peu simplifier les plus compliqués en effet.
ya d´autre choses ke le nombre de polygones a simplifier, la taille des textures eviter les shaders programmable et les lampes dynamiques plutot utiliser des lightmaps, et sutout tenter de faire un algorithme de PVS a base d´octree ou de BSP (en protals ca sert a rien un portals na meme pas besoin de Z-buffer si c´est un vrai)
mieu vo optimiser au maximum tout le reste du code (detection des collisions, IA et tout) ke l´affichage car c´est la ke ca ralenti le plus.

Trapamoosch
Trapamoosch
Niveau 5
18 juillet 2002 à 12:30:39

Bien sur Lightness, mon moteur ne se contenterait pas d´un LOD pour simplifier sa géométrie ! Les polygones sont triés par texture et par profondeur croissante (pour éviter de changer trop souvent d´état et le fait de trier par profondeur croissante permet de soulager un peu le zbuffer de la carte). Je n´utiliserai pas les shaders programmables, ni même le bump-mapping et autres fantaisies, mon moteur étant destiné à du cell-shading (rendu cartoon). Sinon bien sur j´utilise un octree pour éviter de renderiser des objets inutiles. Pour ce qui est de l´IA, elle ne risque pas de ralentir mon moteur, vu que je ne l´utilise pas (en fait mon moteur n´est pas codé pour faire un jeu, mais une demomaking, une vidéo 3d en temps réels)

Pour en revenir au LOD, mon algo est en fait carrément faux (me disais bien qu´il y avait quelque chose qui collait pas : p), car deux triangles voisins ne forment pas ensemble forcément un triangle (voire même jamais, sauf dans de très rares cas), et le fait de les fusionner quand même créerait des trous dans l´objet, ce qui est sommes toute assez gênant.

Je pourrais utiliser un lod "bourrin", càd demander aux graphistes de créer leur objet en plusieurs niveaux de détail et renderiser l´objet voulu selon la distance par rapport à la caméra (ou mieux, selon la taille projetée sur l´écran, quoique ça en revient un peu au même). Mais le problème, c´est que finalement, ça serait bien trop visible et ça risque de choquer (ayant deja vu des moteurs utilisant cette éthode, je confirme, ça choque). On pourrait adoucir l´ensemble en renderisant, dans une certaine fourchette de distance, les deux objets de niveau de détail différent par transparence, pour passer doucement de l´un vers l´autre (magie de l´alpha blending : p), mais ça me semble un peu idiot étant donné que pendant ladite période, j´aurais plus de polygones à renderiser (sans compter les switches à faire pour passer en alpha blending, tous les tests de distance tout ça).

Pour faire ça encore moins visible, on pourrait aussi utiliser du brouillard, mais certaines scene se passant dans l´espace, le brouillard risque d´être de mauvais goûts (qui n´a jamais pester sur des jeux comme Turok ou Motorhead, usant et abusant du brouillard pour masquer un clipping omniprésent ? )

Après une petite recherche sur le net, un algorithme me semblait au point, mais assez ardu à mettre en oeuvre dans la pratique, un algo de geomorphisme. En deux mots, il consiste à rapprocher certains vertices deux à deux au fur et à mesure que l´objet s´éloigne et de les fusionner une fois que ceux-ci sont confondus. On peut ainsi supprimer quelques triangles. Le plus dur la dedans, étant de savoir quel vertices faire se rapprocher entre eux (le nombre de critère étant assez importants, et assez dur à estimer, comme par exemple quels vertices faire sans que la géométrie globale de l´objet en patissent, et en ayant le moins de chose à recalculer, sans compter qu´il faut interpoler les coordonnées de texture des vertices qui bougent... chaud quand même).

J´ai vu, en matant dans le SDK de DirectX que Direct3D proposait des routines de LOD pour les D3DXMESH (d´après les exemples fournis, visuellement ça a l´air asseza au point). Dommage qu´ils n´en disent pas plus dans la SDK sur la méthode utilisée... (j´aurais bien utiliser directement les D3DXMESHES fournis par Direct3D, mais au final ils s´implementeraient très mal dans mon moteur).

Alors voila, le débat reste ouvert et si quelq´un à d´autres infos, je suis à l´écoute !

Sous forums
  • Aide à l'achat Mac
  • Internet
  • Macintosh
  • Création de sites web
  • Création de Jeux
  • Linux
  • Programmation
  • Steam Deck
  • Hardware