[ [ [ Ville virtuelle - Yannis Lehuédé

Nous allons recréer une ville virtuelle de manière procédurale, c’est à dire avec une répartition et le placement d’éléments guidés mathématiquement. Cela présente l’avantage d’être réutilisable. Le but est de complexifier le modèle par étapes successives. On en détaillera les principes.

Pour pouvoir nous poser des questions d’urbanisme abstraites, plaçons-nous dans une époque révolue, mais néanmoins documentée : l’Antiquité romaine. Cela nous permettra de ne pas trop comparer notre modèle à la réalité et de permettre une certaine liberté d’interprétation. Bien-sûr, il faut au préalable se documenter avec quelques références (archéologiques pour notre cas).

Aussi, le modèle expliqué ici se veut indépendant d’un quelconque logiciel 3D, on tentera de rester dans des considérations techniques générales.

Commençons : nous savons que les romains prenaient soin de l’urbanisme et d’une certaine organisation ordonnée des rues.
Techniquement, délimitons les limites de notre ville (un oval irrégulier) et à l’intérieur, répartissons de manière homogène un modèle de maison, comme sur l’image suivante.

Regularly duplicated house

On remarquera que c’est trop régulier (plutôt adapté à la répartition de tentes dans un camp fortifié, ou de légionnaires en formation serrée). Et il n’y a qu’un seul modèle de maison. Pour améliorer ça, nous allons diversifier les maisons (forme, répartition des fenêtres, étages, etc). L’échelle des maisons restera globalement la même. Notons au passage que la taille des maisons par rapport à celle de la ville définit l’échelle de la représentation à ce stade. Le spectateur n’a pour l’instant aucun autre point de repère pour se faire une idée de la taille de la ville ! Il faudra que tous les éléments futurs soient proportionnels à ces éléments de base.

Poursuivons notre complexification : sur l’image suivante, les maisons différentes sont choisies aléatoirement avec la même répartition homogène.

Evenly populated map with several houses

C’est déjà mieux, mais cette ville reste très uniforme. Tel quel, ce pourrait être utilisable pour une banlieue peuplées de pavillons... Mais avec quelques ajustements. On peut envisager de faire varier l’espacement entre les maisons, créer des rues de largeurs différentes pour commencer.
Mais ce n’est pas New York, et même pour une ville antique, on s’attend à une certaine balance entre ordre et anarchie.
On va donc travailler sur un modèle urbain avec des rues qui coupent la régularité et une orientation des maisons en fonction de ces rues. On peut aussi faire varier cet alignement en fonction de différents quartiers de la ville.

À ce stade, la répartition des types de bâtiments peut être définie selon plusieurs critères :

  • des maisons à plusieurs étages dans certains quartiers centraux,
  • des maisons riches (avec jardin intérieur) seraient groupées,
  • ces quartiers seraient entourées de maisons légèrement moins opulentes,
  • les quartiers les plus pauvres en seraient très éloignés,
  • le maillage des rues peut différer selon les quartiers (plus régulières chez les riches, plus sinueuses et denses dans les quartiers pauvres), etc.
Mathematically positioned and oriented houses

L’effet de volume beaucoup plus intéressant qu’auparavant. Les maisons ont été séparées par des rues (et des places) et leur orientation suit cette structure. Dans le lointain, on devine plus qu’on ne distingue la séparation entre les maisons, qui paraissent désormais plus serrées, mais nous pourrons ajuster certains éléments plus tard (ajouter des lumières, de la brume, modifier le contraste de l’image, si besoin).

Vu depuis notre caméra, les quartiers séparent la ville comme sur la représentation ci-contre. Les maisons sont aussi orientées d’après ces paramètres. Pour augmenter la séparation des rues, les réglages de ce motif peuvent être ajustés, d’où l’intérêt de guider le plan par des éléments mathématiques (principalement des motifs de cellules Voronoï de différentes amplitudes superposées) plutôt que par des images.

On aura ensuite la possibilité de mettre en valeur les rues avec des matières différentes au sol, et en ajoutant des éléments dans ces rues (comme des personnages virtuels, des étals de marchés, etc) ce que nous verrons plus tard.

Ensuite, il faut créer un peu de relief sur la carte, ce qui est un élément déterminant (notamment dans une ville comme Rome, avec ses sept collines). Il sera important d’utiliser à chaque endroit de la ville les données d’élévation, d’inclinaison de la pente, etc. L’illustration à gauche propose une rivière, différents reliefs, dont certains creusés par de petits cours d’eaux. La représentation propose des niveaux de gris : sombre pour les basses altitudes, et clair pour les zones les plus élevées. Voilà ci-dessous notre ville précédente reposant sur une topographie de quelques dizaines de mètres de dénivelée.
Mais le but n’est pas de reproduire exactement la Rome antique, plutôt d’en créer une imaginaire ou une reproduction approchée, comme celles que les romains ont bâties sur le même modèle, ailleurs sur les territoires conquis (et pas nécessairement aussi grande).

Bumpy terrain

Étrangement, ce sont les zones sans bâtiments qui paraissent plus bossues que les quartiers eux-mêmes. Pourtant, il y a bien des maisons en étages (sur la partie gauche par exemple). Aussi, nous pourrons remplir des grandes zones évidées (des places dans la ville) par de nouveaux bâtiments pour casser encore plus la régularité du panorama et complexifier la ville. On pourrait y placer des bâtiments administratifs, des temples, etc. Toujours avec une part d’aléatoire.

L’apparition de relief nous permet également de nous poser une foule de nouvelles interrogations :

  • comment s’agencent les maisons sur les différents dénivelés ?
  • y aurait-il des temples plutôt sur les hauteurs ?
  • quelle serait la répartition "sociale" (riches-pauvres) des maisons ?
  • les rues et routes épousent-elles la topographie du terrain ?
  • comment est organisé le réseau d’eau potable des aqueducs ?

Toutes ces idées qui apparaissent, inspirées de la simulation, nous permettent de questionner les sources archéologiques, et si elles n’y répondent qu’en partie, de réfléchir à des solutions pratiques et logiques pour apporter du "réalisme" à notre modèle.

Dès qu’un règle générale s’en dégage, il est possible d’intégrer ce paramètre dans notre modèle procédural (selon les possibilités du logiciel utilisé, mais tout système de particules permet une grande flexibilité et en ajoutant un peu de mathématiques rudimentaires, c’est faisable). C’est pourtant tentant de placer certains bâtiments à la main s’ils ne sont pas trop nombreux, mais nous nous en garderons pour cet exercice.

Continuons avec notre ville automatisé, avec quelques paramètres supplémentaires, ici, juste une partie depuis la liste précédente. On ajoute des temples, des bâtiments administratifs sur les places, pour augmenter la diversité et complexifier la ville. Et quelques arbres sont apparus autour.
Il nous manque également les petits éléments pour habiter la ville : des paquets d’étals de marché disséminés au bas des maisons, plus nombreux au bord des routes. Leurs répartitions sont guidés par le plan des rues.

More building variants

Les temples ne suivent pas la même orientation que les rues, n’étaient-ils pas orientés selon une logique solaire ? De toute évidence, la construction des temples répondait à un impératif divinatoire bien spécifique.
Et vu d’ici, ces temples pourraient être grecs, carthaginois, babyloniens ou d’ailleurs, mais les bâtiments administratifs matérialisent la ville romaine. Bien-sûr, des amphithéâtre et un cirque grandiose rempliraient cet imaginaire de "Rome", mais nous nous arrêterons là pour l’architecture.

Pour finir, il faudra créer un environnement de nature autour de la ville, et c’en sera fini des éléments fixes. Si nous voulons créer une animation, ces éléments seront rendus une seule fois, contrairement à d’autres animés (de la foule, des fumées, etc). Ils seront ensuite mixés ensemble comme ci-dessous.

Rendered and composited with smoke and crowd

Voici la ville avec une foule (disposée en fonction des mêmes paramètres et de l’aléatoire), une environnement ainsi que des brumes et fumées qui, écrit-on, rendait ces villes infectes.

Ainsi, selon les besoins, cette ville à différents niveaux de détails (de l’urbanisme jusqu’aux individus) peut être utilisée en jeu vidéo ou intégrée au loin dans un plan de film. Pour les éléments de premier plan, il sera possible de les repositionner manuellement pour un contrôle artistique plus fin.

Certains outils (plugins) pour les logiciels 3D proposent des solutions variées allant des blocs de type gratte-ciel de différentes tailles, jusqu’à permettent de guider la population de bâtiments avec les véritables données géographiques et d’urbanisme. Sans outil dédié mais avec des particules et éventuellement un petit script, ce principe peut être reproduit avec n’importe quel logiciel 3D. Reste à adapter le modèle selon l’utilisation qu’on lui destine.

Pour aller plus loin, voilà un document PDF de 2006 (en anglais) qui entre dans le détail de la génération procédurale.