lundi 21 juin 2010

Des grattes-ciel



Voilà 50 grattes-ciel sur mon terrain. Les modèles ont été faits sous Blender, et ont environ 5600 faces chacun, ce qui est beaucoup! Au rendu, OSG ne s'en sort pas trop mal, puisqu'il m'en affiche une bonne partie tout en restant au dessus des 100 images par seconde.

C'est typiquement le genre de situation qui va nécessiter des niveaux de détails! A très courte distance, le bâtiment est détaillé juste comme il faut. Mais de loin, il va falloir sérieusement réduire le nombre de faces. La solution que je compte suivre est de créer une version peu détaillée du bâtiment (pas beaucoup plus qu'un bête cylindre!), et de "cuire" les normales du modèle détaillé vers une texture pour le modèle peu détaillé. L'on peu ainsi espérer un rendu à peu près équivalent à distance, avec peut-être une centaine de polygones, au lieu de plusieurs milliers.

Au passage, les défauts de rendu liés au crénelage sont tristement visibles. Je compte pour le moment attendre que wxWidgets fournisse le support pour l'anti-crénelage, et si j'en ai besoin plus tôt, j'insérerai une surface SDL ou SFML pour faire le boulot.

2 commentaires:

Julien a dit…

Aurais-tu une idee pour automatiser la creation de telles textures (par exemple en faisant des captures d'ecrans automatisees du model complet)?

M87 a dit…

Je dirais que Blender n'est pas si loin... Le processus, que j'ai l'intention de décrire un peu plus en avant si j'arrive à le faire fonctionner, est le suivant:

- Créer un objet low poly
- Le "développer" en une texture plane
- Rendre les normales de l'objet high poly en low poly sur chaque face, vers la texture

La seule partie "humaine" là dedans, c'est la création de l'objet low-poly. Les quelques algos de réduction de polygones que j'ai vu faisaient un boulot honorable, donc je dirais qu'avec des heuristiques un peu plus fines, on doit pouvoir faire quelque chose de correct. Ensuite, il ne reste qu'à scripter blender, pour effectivement avoir un système où on rentre un objet d'un côté, et on en ressort un objet low-poly et sa texture de l'autre.

Maintenant, faire ça hors de Blender... J'imagine que j'aurais tendance à travailler au niveau de chaque face du low-poly, à essayer de projeter les détails.

À partir de captures d'écran, le plus difficile il me semble est de différencier le relief d'un changement de coloration. Peut-être en prenant la capture sous des éclairages différents, pour tenter de saisir la forme de la surface?