Vous avez sans doute remarqué que les textures transparentes posent souvent des problèmes. Par exemple si vous rapprochez deux arbres aux feuilles transparentes et que vous tournez autour avec la caméra, vous allez voir tout à coup des changements brusques de luminosité, des rectangles transparents autour de certaines branches, des feuilles qui disparaissent, ou des branches d'un arbre lointain qui apparaissent devant un arbre proche.
La transparence dans les jeux 3D est compliquée avec la génération des cartes graphiques actuelles. En effet, ces cartes exigent que les textures transparentes leur soient envoyées dans l'ordre : de la texture la plus éloignée de la caméra, à la texture la plus proche de la caméra.
Planet est donc obligé de trier les objets, vêtements et particules à texture transparentes. Ce tri est plus compliqué qu'il en a l'air, parce que bien souvent il n'y a pas d'ordre clair : un arbre peut être à la fois devant ET derrière un autre si les branches se touchent; un feu de camp peut avoir des particules de fumée qui collisionnent sur une texture de flamme transparente.
Pour que les objets avec textures transparentes s'affichent correctement, le mieux est qu'ils soient éloignés les uns des autres. De cette façon, Planet peut toujours les trier facilement.
Pour les cas où plusieurs textures transparentes se chevauchent, Planet propose deux options intéressantes :
a) priorité de transparence
Vous pouvez spécifier une priorité de transparence, de -7 à +7. Par défaut les textures ont la priorité 0. Si vous changez la priorité d'une texture à 1, et qu'elle chevauche une texture de priorité 0, la texture de priorité 1 s'affichera DEVANT. Si vous mettez priorité -1 elle s'affichera DERRIERE. Veuillez noter que les particules ont par défaut la priorité -3 donc elles s'affichent en général en fond de décor. Elles reçoivent la priorité +3 si vous réglez le paramètre .front à true dans le script de particules.
b) avec Z-buffer
L'option 'Z-buffer' est cochée par défaut. Si vous voyez des rectangles transparents au milieu de vos branches d'arbre, essayez de décocher cette option. Elle a pour effet qu'une partie du mesh ne cache jamais une autre partie du mesh. Mais cela a aussi un effet de mélange anormal quand vous tournez la caméra. Il faut voir ce que vous préférez, les rectangles transparents ou l'effet de mélange. A noter que les particules ont toujours cette option déactivée.
Voici encore quelques conseils
Si vous créez un globe transparent, veillez à utiliser des numéros de textures différents pour le côté intérieur et extérieur, sinon vous allez avoir un puzzle de facettes quand vous tournez la caméra. Mettez aussi priorité 1 sur les deux textures du globe.
Réglez le pare-brise d'une voiture sur priorité 1 pour éviter que vos vêtements en mesh transparent ne disparaissent sous certains angles de la caméra.
Si vous voyez des particules de fumée qui s'affichent DEVANT une rivière à eau transparente au lieu de DERRIERE, vérifiez que les meshs transparents de la rivière sont bien alignés et ne se chevauchent pas, car sinon planet va considérer que tous ces meshs tiennent ensembles et forment un énorme objet autour de la fumée. Bien souvent, cela va faire disparaitre le problème. Sinon réglez le paramètre .front à true dans le script fumée comme expliqué ci-dessus.
Si vous construisez une maison avec des vitres transparentes sur les 4 façades, et tout cela dans un seul mesh, évitez d'utiliser le même numéro de texture pour les 4 vitres ! Parce que si vous faites cela et qu'il y a des objets transparents dans la maison, vous risquez de ne pas les voir correctement quand vous regardez par les fenêtres depuis le dehors. C'est dû au fait que Planet va afficher les 4 vitres ensembles et il ne va pas trouver d'ordre de tri clair avec l'objet, les vitres étant à la fois devant et derrière l'objet. Ce qu'il faut faire, c'est importer la texture de la vitre 4 fois dans le mesh, pour avoir des numéros de texture différents (même si c'est la même texture), et appliquer un numéro de texture différent à chaque vitre. Planet va alors pouvoir trier les vitres et l'objet transparent, du plus éloigné au plus proche, et les objets transparents dans la maison pourront être vus correctement en regardant par la fenêtre depuis le dehors.
Planet vous propose des fonctions de calque qui vous permettent de découper une partie de l'eau de mer, par exemple pour qu'on ne voie pas d'eau à l'intérieur d'un bateau profond ou d'un sous-marin. Ces options sont disponible dans le menu Objet / Editer / Meshs / Divers.
Pour ne pas voir d'eau dans un bateau, il faut découper le bateau au moins en 3 meshs séparés :
mesh 1 : la coque extérieure du bateau. Réglez l'option "coque extérieure".
mesh 2 : la coque intérieure du bateau. Réglez l'option "coque intérieure".
Le mesh 2 peut être 100% transparent, donc invisible, cela fonctionne aussi.
Veillez à ne pas avoir une coque fine comme un papier, il faut qu'il y ait au moins une petite épaisseur entre la coque extérieure et intérieure.
En cochant l'option, l'eau qu'on voit devant le mesh 2 va être enlevée, sauf si le mesh 1 est devant le mesh 2.
mesh 3 et suivants : le gros du bateau, pont, meubles, couchettes, ..
Si vous avez construit vous-même l'eau de la mer, réglez sur ce mesh d'eau l'option "eau trouable".
Si votre avatar rentre dans le bateau et vous voyez tout en bleu, réglez l'option "Volume Vide" sur le mesh 2 du bateau.
Les numéro de mesh indiqués dans l'exemple ci-dessus ne doivent pas être respectés, tant que vous cliquez sur la bonne option de transparence pour chaque.
Voilà vous avez un résumé des techniques de calque pour faire disparaitre l'eau de la mer.
Vu que les cartes graphiques actuelles supportent mal la transparence, vous allez constater qu'il faut pas mal de chipotage et d'essais avant d'afficher des objets transparents correctement.