Fr/Cubemaps
Dans la réalité les matériaux reflètent leur l'environnement. Réaliser ceci dans un moteur 3D en temps réel demande beaucoup de ressources. Une technique a été développée pour simuler les reflets sans demander trop de ressources matérielles : le cubemapping. Il s'agit de projeter une texture sur un objet et de calculer sa position par rapport au joueur. Il en résulte des reflets rapides à calculer mais qui ne sont pas en temps réel.
Beaucoup de matériaux spéculaires et d'environnement font appel à des données externes pour calculer leur apparence. Ces données prennent la forme d'un cubemap, une texture qui représente une vue fixe sur 360°. Définir des cubemaps et leur position dans l'espace est facile, mais il est important de bien les placer pour des raison d'esthétique et de performances.
Placement
Pour définir la position d'un cubemap dans l'espace dans une map, nous utilisons l'entité env_cubemap. Quand la map est compilée avecVBSP, les faces des blocs de la map sont automatiquement associés au cubemap le plus proche.
Il est important de noter que les cubemaps peuvent avoir de multiples usages qui dépendent de leur placement au sein de la map. Certains cubemap sont placés pour les reflets des objets statiques, d'autres sont placés pour les reflets des entités comme les NPC ou le joueur. Le placement de ces cubemap doit suivre quelques règles simples suivant leur utilité pour avoir une qualité graphique optimale.
- Si le cubemap est destiné au NPC ou au joueur, celui-ci doit être placé à 64 unités au dessus du sol afin d'être au niveau des yeux.
- Si le cubemap est destiné à la géométrie statique du monde, il doit être placé à au moins 16 unités de toutes les surfaces du monde.
- Les cubemaps doivent être placés dans toutes zones visuellement contrastées. Un couloir avec une lumière jaune vif aura besoin d'un cubemap, surtout si cette pièce est à côté d'une pièce avec une faible lumière bleue.
Building
Contrairement au reste (éclairage, BSP, ...), les cubemaps de votre map ne sont pas calculés lors de la compilation. Vous aurez à la place de vos cubemaps une seule texture par défaut : la skybox de votre map.
Une fois que la map e été compilée, les cubemaps peuvent être calculés avec la commande buildcubemaps
. Ce calcul peut varier de quelques secondes à plusieurs minutes. Une fois fini vous devrez relancer votre map pour que les textures soient rechargées.


Performance
L'entité env_cubemap
permet de définir la résolutions du cubemap. La résolutions par défaut est généralement acceptable (32*32 pour chaque surface), vous pouvez l'augmenter si vous avez besoin reflets plus précis.
Parcque les surfaces sont des aproximations de leur environement par des cubemap, trop en mettre dans une petite salle causera des discontinuité quand vosu bougerez autour. Pour une salle avec beaucoup de reflet, il est generalement preferable de placer un seul cubemap au centre de la pièce, ce qui evitera les coupures et autre discontinuité graphique.
Pour determiner les ressource utiliser par vos cubemaps, tapez +showbudget
dasn la console et regardez le paramètre "World Rendering". Si cela utilise trop de ressource c'est probablement que vous en avez placez trop à un endroit. Pour verifier cela vous avez 2 solutions, soit dans hammer vosu cacher tous les cubemap et vous compilez, soit dans la console vous desactivez les cubemap dans le jeux en tapant r_specular 0
.