La FluidSurfaceInfo
Ouvrez la carte sur laquelle vous souhaitez placer de l'eau. Dans mon cas, il s'agira du terrain que j'ai complété lors du précédent tutorial. Dans l'actor Browser, cliquez sur le petit "+" à coté de "info", et sélectionnez FluidSurfaceInfo :
Placez l'actor au centre de l'endroit où vous voulez mettre de l'eau :
L'actor apparait, ainsi qu'une surface non texturée. Tout d'abord, assignons lui une texture d'eau (je prendrais la texture "Oceanglass" du package "awglobal" : pour cela, sélectionnez une texture, puis, double cliquez sur votre FluidSurfaceInfo, et dans l'onglet "display", cliquez sur "skin", puis sur le bouton "ajout" (add) qui apparait. Cliquez ensuite sur le bouton "util" (use) pour utiliser la texture sélectionnée :
Maintenant, il faut ajuster la taille de votre fluid surface info. Dans les propriétés de l'actor, dans l'onglet "FluidSurfaceInfo", vous pouvez modifier les dimensions de la surface en ajustant les paramètres FluidXSize et FluidYsize (paramétrés par défaut sur 48). Attention tout de même, si vous augmentez trop cette valeur, la multiplication des triangles qui composent votre FSI pourrait causer des ralentissements important sur des machines modestes. Aussi, il existe une astuce simple mais efficace pour multiplier la taille des FSI sans trop augmenter votre nombre de triangle :
Vu que mon lac a des dimensions respectables, je vais augmenter FluidXsize et FluidYsize à 50 (dépasser 60 est rarement une bonne idée, pour les raisons citées ci-dessus, cela commence à créer des problèmes de performances), mais ma FSI est encore bien trop petite pour remplir mon lac :
L'astuce consiste à ne pas augmenter le nombre de triangles, mais la taille des triangles qui composent la FSI. Pour cela, il suffit d'aller dans l'onglet display des propriétés, et d'augmenter la valeur "drawscale" : elle est par défaut à 1, donc si vous mettez 2, votre FSI doublera de taille. Dans mon cas, j'ai mis Drawscale à 3, voici le résultat :
Le résultat est très bien, Rebuildons.
Si vous avez placé votre FSI dans un terrain, vous vous apercevrez que la fsi ne bouge qu'à peine, les vagues semblent de pas tenir compte du terrain. En effet, il faut indiquer à votre FSI contre quel terrain rebondir. Pour cela, dans l'onglet "FluidSurfaceInfo" des propriétés de votre Fluid Surface Info, cliquez sur la propriété "ClampTerrain" : plusieurs boutons apparaissent dont un bouton "Trouver" (find). Cliquez dessus puis cliquez sur votre terrain.
Le champ se remplit et votre FSI commence à tenir compte de votre terrain. Rebuildez pour faire bonne mesure.
Les Vagues
Si vous avez besoin de grandes vagues ou que vous souhaitez agiter un peu votre FluidSurfaceInfo, vous allez voir qu'il n'y a pas de paramètre pour cela dans les propriétés de la FluidSurfaceInfo. En effet, il va falloir faire appel à un actor particulier appelé de manière fort pertinente "FluidSurfaceOscillator", se trouvant dans l'arborescence des actors :
Ajoutez-le quelque part dans la carte, puis déplacez-le pour le mettre un peu au dessus de la surface de l'eau :
Pour fonctionner, il faut indiquer à cet actor sur quelle FluidSurfaceInfo il devra agir. Dans l'onglet "FluidSurfaceOscillator", cliquez sur la propriété "FluidInfo", sur le bouton "trouver" qui apparait, puis sur la surface de votre eau.
Si vous rebuildez, vous verrez peut-être que votre FluidSurfaceOscillator commence déjà à faire des vagues. Elles sont très faibles, aussi nous allons tripoter un peu les paramètres de l'onglet "FluidSurfaceOscillator".
- Frequency : cette propriété donne le nombre d'oscillation par seconde. Elle est par défaut à 1, c'est à dire qu'une oscillation est créée par seconde. Pour ma part, je vais mettre 3 pour donner des rapides oscillations.
- Radius: défini le rayon d'action des oscillations. Si vous mettez par exemple, une valeur de 10, les oscillations se créeront sous le FluidSurfaceOscillator mais n'iront pas plus loin que 10 unités (attention, cela n'utilise pas l'échelle habituelle d'UnrealEd). Le mieux est de laisser à 0, ainsi le rayon est illimité, les oscillations se poursuivent donc sur toute la surface de l'eau.
- Strength: la force des oscillations. Si vous donnez une valeur trop faible, l'effet sera à peine visible. Inversement, si vous donnez une valeur trop forte, l'effet sera ridicule. Comme je veux des oscillations rapides mais de force moyenne, je mettrais "15" :
Bien sur, rien ne vous empêche de mettre plusieurs oscillateurs sur votre FluidSurfaceInfo. Pour ma part, deux suffiront avec les réglages ci-dessus.
Bien sur, rien ne vous empêche de mettre plusieurs FluidSurfaceInfo dans un niveau. D'ailleurs vous n'êtes pas forcé de la mettre dans un terrain, vous pouvez aussi la placer dans un bassin en BSP pour faire une piscine ou un récepteur d'eaux usées ou un réservoir de produits chimique ou tout autre idée que vous avez en tête, si vous avez une texture correspondante à appliquer dessus.
Néanmoins, si vous testez votre carte et que vous entrez dans l'eau, vous remarquerez un énorme détail assez dérangeant : vous avez la surface de l'eau, mais en dessous, ce n'est pas de l'eau. Il va donc falloir indiquer à l'éditeur que la partie de la map placée en dessous du FluidSurfaceInfo est constituée d'eau et que donc les joueurs y sont en apnée et peuvent nager.
Le Liquide
Nous allons créer un brush que nous placerons sous la surface de la FluidSurfaceInfo puis nous ajouterons ce volume en tant que volume liquide.
Pour créer votre brush, le mieux est de fabriquer un brush de 256*256*256, puis, avec le vertex editing, de donner les mêmes dimensions au brush que la FluidSurfaceInfo.
Ensuite, dans la vue de coté, placez ce volume juste sous la surface noire de la FSI et étendez le vers le bas pour qu'il remplisse toute la hauteur du bassin.
Ensuite, pour ajouter le volume en tant que volume d'eau, il faut cliquer sur le bouton "addvolume" : Quand vous cliquez dessus, s'ouvre une longue liste de volumes différents à choisir. Dans notre cas, il faudra ajouter un WaterVolume :
Quand vous avez cliqué dessus, déplacez votre brush rouge et vous verrez que le volume est apparu en rose.