Catégories
ModMaking

Megatexture on air

Les coyotes de Doom3world ont réussi à faire fonctionner la techno ‘MegaTexture’ sous Doom 3, Q4 et Prey.

Pour les plus pressés, la version initiale (non lightmappée) se télécharge sur FileFront

Ceux qui s’intéressent au fonctionnement de tout ce bordel, et notamment la méthode pour activer les stencil shadows peuvent lire la suite 🙂

Comment ?

Tout le monde l’a dit et répété, en testant quelques trucs dans la console de Doom 3, on obtient quelques commandes rigolotes du style makeMegaTexture. Sauf que jusqu’ici, personne ne semblait avoir réussi à les faire fonctionner.

En programmant un fragment shader qui active le changement de LOD en fonction de la position du joueur, Arne Olav Hallingstad a réussi à activer le support de la megatexture sous Doom 3, Q4 et Prey.


Les différents niveaux de mipmap

Comment ça se passe ?

Pour faire fonctionner le tout, il nous faut :

– Un mesh plat de terrain
Format .lwo – Lightwave (mais le .ase est également supporté)
Ce terrain doit avoir une longueur d’une puissance de 2 supérieure à 128 unités. (ex: 512×512, le maximum étant 32768×32768)

– Un Heightmap
Il va agir comme « displacement modifier » sur le mesh plat pour le déformer et en faire un vrai terrain.
En niveau de gris (8bits / 256 couleurs), peut importe la résolution du moment qu’elle est carrée.

– Une texture de terrain qui correspond au heightmap, mais en version couleur
Format .tga
Cette texture doit être calibrée au format du terrain. (ex: terrain de 512×512 -> texture de 512×512)

– Le bon material qui associe le mesh de terrain à la megatexture
megatexture/terrain
{
qer_editorimage megatextures\terrain_preview
{
blend filter
megaTexture terrain4096_doom3.mega
}
{
map _white
blend diffusemap
}
}

– Un exemplaire de Doom 3, de Prey ou de Q4 pour générer la MegaTexture à partir du TGA de référence

Conception

C’est applicable à Doom 3 pour le moment. Avec quelques modifs au niveau du nom des dossiers, c’est adaptable à Q4 et Prey

– Créez votre mesh plat d’une dimension de 16k x 16k unités. Appliquez-lui le material ‘mon_terrain’
– Appliquez-lui comme « displacement/heightmap modifier » votre image heightmap
– Exportez votre mesh au format lwo ou ase
– Placez le terrain dans le dossier base\models
– Creez l’image de votre terrain. On va l’appeller ‘mon_terrain.tga’. Vous pouvez vous aider d’outils comme WorldMachine ou Terragen pour faire cela. Cette image doit avoir une résolution équivalente au terrain (ici, 16k pixels).
– Placez l’image ‘mon_terrain.tga’ de votre terrain dans le dossier base\megatextures (Créez-le si nécessaire)
– Lancez Doom 3 en mode console, puis tapez makeMegaTexture mon_terrain.tga. Ca génère la MegaTexture (mon_terrain.mega) à partir de votre image de référence.
– Réduisez votre image ‘mon_terrain.tga’ afin quelle ne fasse plus que 2k pixels de côté, puis renommez-la en ‘mon_terrain_editeur.tga’
– Créez le material d’association terrain / texture en vous inspirant des lignes suivantes :
megatexture/mon_terrain
{
qer_editorimage megatextures\mon_terrain_editeur.tga
{
blend filter
megaTexture mon_terrain.mega
}
{
map _white
blend diffusemap
}
}

– Placez le material dans base\materials et changez l’extension .txt en .mtr
– Créez votre map. Une skybox simple suffit, avec l’import du model de terrain, et l’ajout d’une source de lumière.
– Faites une compile.
– C’est prêt.

Conclusion

On constate à la fin de ce tutorial, que le workflow n’est pas trop mal. L’inconvénient réside dans la peinture du TGA de référence, qui est très longue. Cela dit, les tools d’ETQW devraient permettre l’auto-génération de la texture de terrain, et le level artist n’aura plus qu’à ajouter des détails aux endroits qu’il souhaite.

Ressource / Bibliographie
id Dev Network – Format des models
Discussions et expérimentations autour du format (Doom 3 World)
Les spécifications de la MegaTexture (Gamedev.no)