Dernière mise à jour : 28/10/2019 à 13h35

Current Project : Who knows?

Index des tutoriaux

Projectors

Projectors : qu'est-ce que c'est ?

Les Projectors sont un des éléments les plus difficiles à maitriser d'UnrealEd. Leur principe est simple : pour simuler des éclairages animés ou très complexes, on ajoute un actor, on spécifie une texture en valeurs de gris et l'actor la projette sur les surfaces alentours. Ils permettent de pallier à l'absence des Lighteffects de UT99. A un niveau plus complexe, c'est en fait une méthode d'ombres chinoises : le projector en lui même n'éclaire rien : il projette l'ombre, et les parties claires de la texture projetées sont soumises à l'éclairage normal de la map. Les parties sombres de la textures dégradent l'éclairage, de plus en plus sombre, jusqu'au parties noires de la textures qui sont totalement obscurcies.

Concrètement, ca donne quoi ?

Si vous avez joué un peu à toute les maps d'UT2003/2004, vous avez pu voir quelques projectors sans intérêt.... Et certains beaucoup plus complexes. Voici le projector de base DM-Asbestos : il projette un image de grille et celle du ventilateur. En réalité, ce n'est pas vraiment le matériel de base vu que le projector tourne pour être synchronisé avec le ventilateur au plafond, mais comme la rotation est sur la texture et non pas sur le projector, cela revient au même.

DM-Asbestos

D'un autre coté, on a du matérial plus compliqué sur Curse4 : il faut avoir déjà bien compris le fonctionnement de l'actor pour se débrouiller avec ça :

DM-Curse4

Entre les deux, il y a ce genre d'effets très sympathique, tiré de DOM-Core : les barres de lumières défilent très vite vers la droite :

DOM-Core

Immobile, il y a aussi des très belles choses dans CORE :

DOM-Core

En gros, quel avantage d'utiliser des projectors au lieu d'un éclairage très détaillé avec lightmaps à 1 ? Premièrement, vous pouvez les animer sans consommer des tonnes de ressources supplémentaires, deuxièmement, vous pouvez faire encore plus de détails qu'avec l'éclairage traditionnel, troisièmement, vous pourrez diriger votre ombre de manière très précise, et dernièrement, c'est vraiment très beau.

Préparation

Le problème avec les projos, c'est qu'il n'y a aucun tutorial potable et complet sur le net à leur propos. L'autre, c'est que c'est un élément au moins aussi difficile à manier que les karmas de très haut niveaux. Premièrement, il nous faut une texture en niveaux de gris à projeter, deuxièmement, il nous faut une surface, troisièmement il nous faut le projector lui-même.

La texture doit être en noir et blanc. Les parties totalement noires de la textures ne seront pas du tout éclairées par les lumières environnantes. Les parties blanches de la textures seront éclairées très fortement. Si vous souhaitez que certaines zones de votre projecteurs soient éclairées exactement de la même manière que les alentours, il faut y mettre un gris uniforme de R127, V127, B127 : un gris parfait, qui ne touche pas du tout à l'éclairage. C'est en quelque sorte le milieu parfait du spectre de l'intensité lumineuse. Pour commencer, nous utiliserons une simple texture en noir et blanc que nous projetterons sur un mur de manière tout à fait normal. Voici l'image que j'utiliserai :

Texture de Projector

Les parties noires apparaitront noires et les parties blanches seront donc sur-éclairées. Ouvrez donc UnrealEd, créez une pièce de base et importez votre texture dans le package MyLevel. Sélectionnez votre texture. Vous êtes prêt à tripoter le projector.

Au Travail !

Allez chercher l'actor projector dans l'actor browser : il se trouve ici :

Projector

Ajoutez-le près d'un mur ; il ressemble à une petit caméra, et comme vous pouvez le voir, il est directionnel (il a une flèche qui permet de le diriger). La première chose à faire est de paramétrer la texture que nous voulons projeter. Pour cela, allez dans les propriétés du projector, et dans l'onglet "Projector", spécifiez votre texture dans "Projtexture".

ProjTexture Projection

Par défaut, le projector a une vue illimité sur un plan. C'est pourquoi votre texture se répète indéfiniment sur le mur où elle est projetée. Pour corriger cela, il ya deux paramètre à changer Le premier est le fait que le FOV (field of vision, Champ de vision) du projector est mis par défaut à "0", donc infinie. Mettez 1 pour lui donner une limite. Puis, mettez "Clip BSP" à "Vrai" :

Projectoion coupée

Voila pour le projector de base. Vous pouvez déjà projeter une ombre simple. Mais il y a bien mieux à faire.

Plus loin

La première chose, c'est ces deux cadres, jaune et cyan, autour de votre projector. Il faut expliquer cela. La cadre jaune est tout simplement la zone maximale de votre projector. Le cadre bleu est le champ de vision du projector. Si le FOV est mis à 0, le cadre bleu est infini et n'est donc pas affiché. Si vous mettez une valeur supérieure à 0 (dans notre cas 1), le cadre bleu devient visible. Il représente la projection exacte de votre texture entre l'actor et la surface.

Dans notre cas, le cadre bleu et le cadre jaune sont quasiment identique, et on les différencies à peine. Mais si le champ de vision est très large, l'effet devient beaucoup plus visible :

Cadres

Ici, on voit bien que le cadre bleu est la projection de la texture : il passe par les coins de la projection. Le cadre jaune est la zone maximale, et cela se voit car le cadre bleu finit par le rejoindre à la portée maximale. Imaginez la situation suivante : vous passez devant une grille derrière laquelle se trouve une lampe. L'ombre de la grille fait 5 mètres sur le mur d'en face. Comme vous êtes à 1 mètre de la lampe, l'ombre de la grille sur vous ne fait que 50cm. Ca c'est ce qu'on appelle la perspective. Or, dans notre exemple, on est passé complètement à coté : le cadre bleu est presque aussi large au niveau du projector qu'au niveau de la portée maximale. Comment corriger cela ? Très simplement en modifiant le champ de vision : à 90, l'image est deux fois plus grande à la porte maximale qu'elle ne l'est au niveau du projecteur.

Champ de projection

L'inconvénient bien sur, c'est que cela zoom en même temps sur la texture. Pour corriger cela, il faudra, comme sur une corona, agir soit directement sur l'actor Projecteur en modifiant le scale, soit sur la texture elle-même : la taille de la projection au niveau du projecteur est celle de la texture elle-même. Donc si vous avez une texture en 512*512 comme moi, vous aurez fatalement une projection de 512 ou plus de coté, ce qui peu faire grand. Soit vous dupliquez votre texture en en faisant une image en 256*256, perdant peut-être un peu de finesse, soit vous scalez directement le projecteur. Rappelez-vous de toute façon qu'une texture à projeter de plus de 512 de coté est rarement utile. Un autre effet qui fait toujours bonne impression est celui de DOM-Core : voir les rayons de lumières tomber jusqu'à l'ombre :

Magnifique effet dans DOM-Core

Cela demande déjà un travail plus poussé puisqu'il faut avoir un emitter paramétré comme il faut. Pour que l'effet soit assez convaincant, je vous conseil de prendre une texture avec des grilles ou des barres, afin que l'on voie bien le découpage dans la lumière. Personnellement, j'utiliserais pour ce tutorial cette texture : DavesTextures.Projectives.GrateLightPT06.

Texture

Mettez la dans un projector et dirigez le vers le sol pour plus de facilité (je ne vous explique pas comment le paramétrer, vous avez de quoi faire avec le début de ce tutorial).

Projector

Maintenant, ajoutez sur le coté un emitter qui émettra de la fumée. Dirigez-le de manière à ce que le chemin des particules passe a travers le champ de vision du projo.

Emitter

Réglez-le pour qu'il émette de la fumée, de préférence de manière à ce qu'il soit toujours dans le champ du projecteur :

Cadrage

Dans les propriétés du projecteur, allez dans l'onglet Projector et mettez bProjectParticles à VRAI. Cela permet au projo d'afficher son image sur les particules des emitters. Dans celles de l'emitter, onglet "Display", changez bAcceptProjectors à VRAI, puis dans l'onglet "FORCE", mettez "ForceAffected" à VRAI. Voici le résultat :

Projection sur particules

Personnellement, je n'ai vu cet effet QUE dans DOM-Core, ce qui est dommage car cela rend très bien. En fait, le projecteur se contente d'appliquer sa texture sur la surface des particules qui croise son chemin. Je conseil par contre à ceux qui essaieraient cet effet de diminuer énormément l'opacité des particules pour que l'effet de devienne pas caricatural et laid. De plus, certains bugs d'affichages peuvent apparaitre si de trop nombreuses particules se superposent : le projecteur ne s'affiche plus sur certaines portions de chaque particule et cela gâche vraiment l'effet.

Un autre truc dont il faut se méfier est l'orientation des particules : si de face l'effet peut être très bon, en général cela rate complètement dès que l'on tourne un peu autour de la scène, car les deux textures (celle du projector et celle des particules), se coupent avec des angles stupides. Donc le mieux est soit d'utiliser cette technique dans des couloirs (comme dans DOM-CORE), soit, et cela ne peu pas être fait avec un Xemitter mais seulement avec un Emitter normal, de jouer sur la direction des particules : onglet Sprite, jouer avec la propriété "UsdirectionAs". Le dernier effet vraiment impressionnant est celui des reflets lumineux de l'eau sur les parois d'une grotte ou d'un bassin. Il y en, a dans CURSE4 (voir plus haut), mais aussi dans CTF-LostFatih, bien plus convaincant à mon gout car moins surchargé :

Projector

Créez une nouvelle pièce, avec de préférence de l'eau pour que l'effet soit plus convaincant.

Scène de base

Ajoutez un projector pointé vers le sol. Cherchez une texture de reflet. Ma préférée est dom-goose.Anime.Combiner Water-effect-combiner :

Texture

Mettez-la dans votre projector. Elle est trop petite, donc mettez bclipbsp à vrai et FOV à 100 : le résultat est déjà là !

Projector

Comme vous pouvez le constater, c'est très vite fait : seul le sol est éclairé, il n'y a pas de reflets sur les murs, et logiquement, l'eau reflétant une partie de la lumière, il devrait y en avoir de faibles sur le plafond, mais ca c'est à vous de broder à partir de ça en rajoutant des projecteurs supplémentaires. Ce sont les trois effets que vous pouvez voir dans les cartes officielles du jeu. Mais ce ne sont pas les seuls. Par exemple, vous pouvez facilement projeter des textures en couleur :

Projector coloré

Suivant ses couleurs, une texture qui n'est pas en noir et blanc sera plus ou moins opaque par endroit, mais globalement bien visible. Certains utilisent cet effet pour projeter des graffitis, des symboles mystiques ou autre sur les murs. De même, les textures animées ne sont pas un problème, comme en témoignent les ventilateurs de DM-Asbestos. Le projector lui-même peut être tourné dans toute les directions, mais avec la perspectives, la texture peut finir très déformée.

Projector déformé

L'un des derniers points que je veux aborder avec vous est celui du type de projection. En effet, nous nous sommes pour l'instant contentés de projeter des images dont nous modulions l'opacité en fonction du besoin, en agissant directement sur la texture (en modifiant les couleurs pour les rendre plus ou moins sombres). Mais il est possible d'ajuster quelque peu ceci directement sur le projector : dans les propriétés, onglet "projector" toujours, la propriété au nom barbare de "FRAMEBUFFERBLENDINGOP" permet de le faire : elle est par défaut à PB_None, ce qui signifie que les parties sombres sont opaques et que les parties claires de la texture sont transparentes. Mais il existe en fait pas moins de trois autres modes de projection :

FrameBufferBlendingOp

Pour ceux qui ne comprennent pas, voici l'image des différents types : à gauche, PB_NONE et PB_MODULATED (une seule image car ce sont des effets identiques), au milieu, PB_ALPHABLEND, et à droite, PB_ADD.

Projector avec différents paramétrages

Plus que deux petites précisions et j'en aurait fini. La première concerne une dernière propriété utile: Bgradient, qui rend la texture très transparente, même sur les parties les plus noires :

bGradient

La seconde est un petit résumé des défauts des projectors : Les projectors de l'Unreal Engine d'UT2004 ne gèrent malheureusement pas l'ombrage : si vous mettez un projecteur qui projette par exemple, la lumière d'une fenêtre sur un mur, et que vous passez devant, la texture sera projetée sur vous mais aussi sur le mur, sans le découpage de l'ombre :

Projector sans ombre

Maintenant, vous allez voir pourquoi la mise en place des projectors doit être le DERNIER changement de votre map : La projection sur Static mesh est LOIN d'être au point : tout d'abord, si vous ajoutez un projector sur un Static mesh et que vous rebuildez (GROSSIERE erreur, à ne jamais commettre), vous allez avoir la mauvaise surprise qui va flinguer tout vos effets : à chaque rebuild, les projectors rajoutent leur texture sur la précédente :

Projector après rebuild

Voici un Static avec un projecteur, après deux rebuild. Au premier, c'était déjà très laid, mais j'ai répété l'opération pour que l'effet soit plus voyant sur le screen. Le seul moyen pour faire machine arrière si vous avez fait la bêtise de rebuilder après l'ajout d'un projecteur sur un Static, c'est de supprimer le projo et de le refaire. Méfiez vous aussi de certains caprices aléatoires d'UnrealEd, qui a décidément quelque chose contre les projos : il a planté quatre fois lors de la rédaction de ce tutorial, malgré pas mal de précautions. Aussi sauvegardez souvent !

2005-2022, by Hellkeeper.

Valid XHTML 1.1 CSS 2.1