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 !