Génération de terrain en utilisant le bruit de Perlin et des fractales

Pourquoi une démo de génération de terrain ? Eh bien pour plusieurs raisons :

  • Nos cours de synthèse d'image ne commenceront pas avant encore quelque temps, et j'ai envie de m'y mettre.
  • Mon portfolio n'a pas une seule appli 3D vu que je n'ai trouvé ma voie que récemment.
  • J'aimerais trouver un stage dans la prog' graphique, à l'étranger, donc d'ici deux mois ... (cf point précédent)
  • La génération procédurale c'est fun voyons :D

Donc il y a un mois de cela, j'ai fait une première version de cette petite application. J'ai utilisé la SFML - après l'avoir recompilée - pour créer la fenêtre et le contexte OpenGL, et implémenté la génération de heightmap (dans une image SFML), en empilant plusieurs couches de Perlin Noise façon fractale (paraît que ça s'appelle un fBm, toutefois je ne m'aventurerai pas à donner une définition d'un concept que je ne maîtrise pas encore).

Heightmap générée

Les images produites avaient une bonne tête, donc je suis passée à l'étape suivante : la 3D ! Un vertex par pixel de la heightmap, la coordonnée y fonction de la valeur de gris dans la heightmap ...

Terrain en fil de fer

Enfin, m'inspirant de ce tutoriel, j'ai généré une texture à partir de trois images (herbe / roche / neige) en fonction de l'altitude.

Terrain texturé

Bon, du filtrage maintenant ?

Tout ceci m'a demandé environ une semaine. Après avoir ajouté une navigation sommaire au clavier et à la souris (type FPS sans gravité), j'ai voulu rendre cela plus ergonomique en ajoutant une interface graphique. Vous pouvez lire ici que la première partie, à savoir le choix de la librairie, n'a pas exactement été une partie de plaisir. Je me suis donc fixée sur gtkmm, très prometteuse ...

... jusqu'à ce qu'il s'avère qu'il n'y avait pas moyen de créer un contexte OpenGL sans effacer les widgets. J'ai essayé avec la SFML (en reprenant ce code), ou sans, et rien à faire : le contexte semblait prendre la main sur toute la fenêtre plutôt que sa sous-partie. Après une journée entière à ramer, la conclusion fut : ouvrir deux fenêtres.

Au cours de trois semaines, j'ai ajouté progressivement des fonctionnalités à l'interface. J'ai commencé par la génération de la heightmap :

Onglet génération

Puis la géométrie du terrain :

Onglet géométrie

Puis la texture ...

Onglet texture

... et finalement l'éclairage.

Onglet éclairage (soleil)

Je ne vais pas détailler ici le rôle de chaque bouton ou slider, il y en aurait pour un petit moment ;). Je rendrai l'application disponible, ainsi qu'un readme. Je mettrai également les sources en ligne même si elles n'ont que peu d'intérêt (code interface verbeux).

Sous le capot, l'application fonctionne donc avec gtkmm pour l'interface, la SFML pour le contexte OpenGL, deux shaders simplistes, et un VBO (après qu'on m'ait dit que les displayList c'était un peu daté :D).

Je prévois d'ajouter un ciel digne de ce nom, peut-être avec des nuages, et un horizon agréable, soit en générant sur un intervalle plus large, soit avec un hack comme celui de cette présentation (à savoir : effet miroir). Oh puis du brouillard aussi. Enfin, pour le moment, j'ai des lettres de motivation à écrire et un portfolio à remplir :D

EDIT : Plus d'informations et des fichiers ici.

Tapons sur Wheel of Time

Histoire de varier un peu des posts techniques, et parce que cette saga m'agace un peu plus à chaque page, voici mon opinion totalement non objective sur la série de romans Wheel of Time. Je n'en suis qu'à 80% du tome 2, mais cela m'a déjà largement suffi.

[SPOILER WARNING]__Je vais tirer à boulets rouges sur un bon nombre d'éléments des deux premiers tomes, ceci sera donc un nid à spoilers ;) [/SPOILER WARNING]__

Petit point sur l'univers avant tout (qui a lui le mérite d'être très intéressant). Je vous épargne les détails théologiques, mais dans ce monde existe un Pouvoir, divisé en deux : yin et yang, homme et femme. Suite aux actions maléfiques du Dark One (sic), la moitié mâle du Pouvoir a été corrompue et rend inévitablement fou tout homme maniant le pouvoir. De tels hommes sont donc généralement pourchassés par certaines femmes maniant le Pouvoir. Lorsque commence notre histoire, le Dark One est bien évidemment en train de s'échapper de sa prison, et les espoirs du monde résident en un homme, le Dragon, qui naît et renaît depuis le début des temps pour lutter contre le Mal et sauver le monde. Sauf que comme c'est un homme, il finit nécessairement par devenir fou et faire quelques légers dégâts (séismes, raz-de-marée, tout ça). Donc le monde en est à croire qu'il est au service du Mal.

Résultat : le monde craint et attend la prochaine naissance du Dragon.

Or donc. Commençons par notre héros, Rand al'Thor (le "al" est une particule généralement attribuée aux nobles, ça alors !). Évidemment il est grand, décrit comme séduisant, relativement malin - nous y reviendrons - et féru de lecture, et manie l'épée très correctement dès le premier contact. Loin de vivre dans une famille ordinaire, il vit seul avec son père, dans une ferme à part du village, blahblahblah. Bon, pour l'originalité de ce côté-là, c'est un peu raté. Ah oui, évidemment c'est le premier personnage qu'on rencontre, et le Dragon ? C'est lui. Désolée pour le suspense. Enfin, ça pourrait passer. S'il n'y avait que ça.

Enchaînons sur les personnages féminins, qui peuvent être rassemblés en quatre catégories :

  • les "matrones" : femmes au foyer, aubergistes et autres, ce sont des femmes fortes mais tout entières dévouées à la bonne tenue de leur demeure.
  • les jeunes filles en fleur : même si elles n'ont croisé Rand qu'un instant elles sont évidemment déjà folles de lui. Nous y reviendrons.
  • les Aes Sedai : il s'agit de femmes capables de manier le Pouvoir, évidemment traitées en sorcières par la grande majorité de l'univers.
  • les "Spearwives" Aiel : combattantes redoutables, entièrement dédiées au combat, ayant renié toute autre vie, etc.

Suis-je la seule à voir un léger problème ici ? Un univers où une femme n'a pour choix que d'être une matrone ou de détenir des pouvoirs lui valant d'être crainte et haïe me semble un brin caricatural tout de même. "Mais les Aes Sedai sont des femmes fortes enfin !" pourrait dire le lecteur naïf. Non. Que toute femme puissante inspire la crainte et la haine n'est certainement pas une vision saine de la "femme forte". Et si cet argument ne suffit pas, ajoutons que les Aes Sedai peuvent appartenir à différents ordres. Parmi les plus marquants ? Le Brun se consacre entièrement au savoir et oublie le monde extérieur. Le Rouge se consacre à pourchasser et neutraliser les hommes maniant le Pouvoir. Le Vert apprécie grandement le contact des hommes, au point qu'une Aes Sedai "verte" sera souvent entourée de plusieurs d'entre eux (sauf si elle est mariée, BIEN ENTENDU).

Sérieusement ? Aucune option là-dedans pour une vie de couple saine sans être rigide ? Rien d'autre que l'indifférence, la haine, la polygamie ou le mariage ? Monsieur l'auteur, tout cela est particulièrement décevant.

Mais j'avais promis de revenir sur les jeunes filles. Les plus importantes sont :

  • Egwene, amie d'enfance de Rand (qui a bien entendu toujours pensé qu'elle l'épouserait … passe encore). Il s'avère au final qu'elle a des prédispositions exceptionnelles (naturellement) pour être Aes Sedai, mais elle reste toujours très attachée à Rand et fait même des rêves prémonitoires à son sujet, que c'est beau.
  • Min, jeune fille garçonne croisée à la première ville que nos héros traversent, capable de "voir" des choses sur les gens sous forme de symboles qu'elle-même ne sait interpréter. Personnage intéressant bien qu'un brin cliché … et qui a bien entendu craqué sur Rand au premier regard.
  • Elayne, héritière du trône d'Andor. Elle aussi n'a croisé Rand qu'un instant alors qu'il avait dégringolé d'un mur mais l'a bien sûr soigné et a aussitôt senti son cœur vaciller.
  • Nynaeve est l'exception : ancienne Wisdom du village natal de Rand, elle a des prédispositions exceptionnelles pour être Aes Sedai (aucune de ce niveau pendant des siècles et là deux dans le même village ? Ah, ces coïncidences). Ayant été élevée à ce rang très jeune, elle materne tous les gens du village et se sent donc plus responsable de Rand et d'Egwene qu'autre chose. Ça ne l'empêche pas d'être éperdument amoureuse du guerrier qui les accompagne, je vous rassure.

Bien évidemment l'une des premières informations sur chacun de ces personnages est "elle est très jolie". Le reste se passe de commentaires.

Venons-en à notre abruti de héros. Oui abruti, je le dis et le répète ! Car au milieu du tome 2, il se retrouve dans un autre monde suite à l'utilisation involontaire de son pouvoir. Et tombe sur une jeune femme...

  • d'environ son âge
  • décrite comme sublime
  • à la peau d'albâtre
  • particulièrement savante
  • énigmatique
  • qui lui parle aussitôt comme s'ils étaient promis l'un à l'autre
  • ...

Bon, en soi c'est déjà pire que grotesque. Mais le pire du pire ? Rand lui fait confiance. Le plus naturellement du monde. Je ne dis pas que ce personnage est nécessairement une traîtresse ou autre : juste qu'à la place de Rand, je me méfierais comme la peste d'une coïncidence du genre. Et s'il est hypnotisé par sa beauté, cela aurait dû ressortir de façon bien plus marquée dans le texte que l'excitation d'un ado face à une belle femme.

Dois-je continuer avec les femmes Ogier qui contraignent leur hommes à se marier car sinon ils n'y penseraient même pas, avec l'armée venue de l'autre côté de l'Océan qui réduit les Aes Sedai en esclavage et les enchaîne comme des bêtes, avec les conversations d'Egwene, Min et Elayne se chamaillant innocemment sur laquelle épousera Rand ? Je ne pense pas.

Wheel of Time part d'un univers intéressant et d'idées originales. Mais le style particulièrement pauvre, le héros au mieux plat et la représentation particulièrement caricaturale et triste du genre féminin m’écœurent. Il ne s'agit pas, comme souvent, de cantonner les femmes dans des rôles secondaires : il s'agit bien plus sournoisement - et probablement involontairement, c'est là le pire - de ne leur donner un rôle qu'en fonction des hommes, et de les limiter au choix entre l'absence de pouvoir et la haine de tous. Alors non, je ne lirai pas le tome 3 ni les suivants, même si comme toutes les histoires, j'aimerais en connaître la fin. Question de principes.

EDIT : Et bien ça y est, fini. Et devinez quoi ? Cette dame sublime EST maléfique. Quelle surprise. J'aimerais ajouter au passage que ces livres ne sont pas "mauvais" : juste très moyens à mon sens, et j'ai mieux à faire de mon temps. L'histoire reste prenante bien que très cliché, et bien que le style soit pauvre, on a vu pire. Mais tout de même, le statut de référence de cette saga m'intrigue.