Static-meshes
Utilisation
Un static-mesh est un préfabriqué qui n'est pas modifiable, ce qui permet de le garder en mémoire et de le réutiliser de façon très efficace, alors que la géométrie de BSP est modifiable à l'infini, ce qui oblige à charger et calculer chaque triangle comme un élément séparé, chaque polygone étant potentiellement unique.
Les static-meshes sont affichés en vert dans les vues 2D de l'éditeur. Ils sont entièrement constitués de triangles et toute face qui n'en est pas un sera subdivisée en autant de triangles que nécessaire (sans créer de nouveaux sommets) lors de l'import ou de la conversion. Ils n'ont pas besoin d'être fermés et ne sont pas affectés par les problèmes de la géométrie BSP, tels que polygones clignotants, trous BSP, effets hall of mirrors, etc. Ces problèmes étant liés à la complexité du BSP, les static-meshes sont utilisés pour les objets très compliqués, les détails très denses ou les formes très organiques dont les vertices ne peuvent pas être alignés sur la grille de l'éditeur. La géométrie est donc réduite aux grands volumes et aux formes principales du niveau. Les static-meshes constituent la majorité des objets, détails et éléments de jeu.
Un static-mesh ne peut pas être modifié en dehors de sa rotation et de sa taille : la propriété DrawScale de l'onglet Display de leur propriétés permet de multiplier ses dimensions de façon uniforme, mais on utilise le plus souvent les champs DrawScale3D, accessibles directement en bas de l'éditeur, qui permettent de multiplier les dimensions du static-mesh de façon indépendante sur les trois axes X, Y et Z. Une valeur négative dans un de ces champs permet même de retourner le brush sur un de ses axes, comme à travers un miroir.
Lorsque des static-meshes sont utilisés dans une map, il n'est pas rare que l'éditeur propose de sauvegarder les modifications qui leur ont été apportées lorsqu'on de la fermeture. Lorsqu'il s'agit de packages tiers ou inclus dans le jeu d'origine, la réponse doit toujours être non afin de ne pas casser la compatibilité avec d'autres maps. On ne peut confirmer que lorsque l'on travaille avec ses propres static-meshes réalisés spécialement pour la map sur laquelle on travaille.
Création
Les static-meshes peuvent être importés d'autres logiciels, soit par l'intérmédiaire d'un plug-in, soit directement avec des fichiers .ase ou .lwo (le format .obj est ajouté grâce au patch non-officiel d'OldUnreal).
Ils peuvent également être créés avec des brushes. Il suffit de faire un clic droit sur le brush ou l'ensemble de brushes à convertir et de choisir Convert, To Static Mesh (on peut également convertir un static-mesh en brush en choisissant To Brush). Il faut alors donner un package et un nom. Les brushes sont triangulés et le static-mesh créé.
Les polygones sont convertis tels quels. Des sommets peuvent donc être placés dans le static-mesh lui-même. Cela les empêche de recevoir de la lumière, créant des soucis d'éclairage. En effet, contrairement aux surfaces BSP, les static-meshes ne reçoivent pas des lightmaps détaillés, à la résolution paramétrable. À la place, l'intensité et la couleur de l'éclairage sont calculées à chaque sommet des polygones du static-mesh. Sur chaque triangle, un dégradé est ensuite fait entre chacun des trois sommets.
Cela contraint donc à penser le maillage des static-meshes et à les positionner les vertices de façon à ce qu'ils reçoivent de la lumière. Un triangle puissament éclairé mais dont les sommets sont cachés par des obstacles ou dans un mur ne recevra aucun éclairage et restera noir.
On peut aussi se contenter d'intersecter l'ensemble des brushes pour avoir un seul brush sans polygones qui s'interpénètrent. Cependant, le brush résultant peut se révéler anarchique et engendrer ses propres problèmes en raison d'un découpage trop aléatoire.
Il est également possible de supprimer les polygones inutiles en les suppriment à la main après avoir copié le brush dans un éditeur de texte et en retirant manuellement les surfaces non désirées. On peut les reconnaître facilement dans le texte en leur attribuant une texture spécifique. Afin d'accélérer le processus, on peut utiliser un script qui repère toutes les textures différentes et retire toutes les surfaces portant la texture choisie.
Tous les brushes sélectionnés lors de la conversion sont inclus dans le static-mesh final avec leurs textures, y compris le brush rouge (qui reçoit alors la texture sélectionnée dans le texture browser). Il faut donc bien veiller à ne pas le sélectionner, ne pas englober d'autres éléments ou ne pas omettre un objet que l'on veut inclure. Les static-meshes et mêmes les meshes animés sélectionnés sont aussi inclus dans le static-mesh final.
En revanche, un brush soustractif sera compris dans le mesh mais avec ses polygones inversés, comme s'il s'agissait d'un brush additif.
Il faut donc réaliser une intersection pour avoir un assemblage entièrement additif en préservant les volumes soustraits.
Le static-mesh est automatiquement centré dans le static-mesh browser, mais ce centrage se fait par rapport à son pivot, qui hérite sa position de celle du brush sélectionné en premier (ou du brush rouge si la sélection se fait avec un cadre de sélection). Si le pivot se trouve très en dehors du static-mesh, celui-ci peut se retrouver très excentré dans le static-mesh browser et les rotations seront laborieuses.
Collision
Les static-meshes ont peu de paramètres spécifiques : le seul présent dans l'onglet StaticMeshActor de leurs propriétés est bExactProjectileCollision, qui, activé par défaut, permet d'avoir une collision précise de l'objet, permettant aux tirs de passer précisément à travers les trous du static-mesh.
Les static-meshes ont deux types de collisions différents : une collision "normale", qui réagit au contact des objets avec les triangles du static-mesh, et la collision "physique", qui détermine la réaction des objets qui utilisent un modèle physique, tels que les objets Karma ou les cadavres des joueurs. Cette collision n'est pas ajoutée au static-mesh par défaut.
La façon la plus facile de créer une collision est de convertir le static-mesh en brush ou de créer en BSP un modèle simplifié du static-mesh, de le positionner autour d'un exemplaire du static-mesh, de sélectionner les deux et de faire un clic droit. Le menu contextuel propose alors une nouvelle option : Save Brush As Collision.
Après avoir cliqué dessus, on peut la voir dans le static-mesh browser en choisissant View, Show Collision.
Le menu Collision Tools permet aussi de générer la collision de façon automatique avec les options Fit X-DOP Box. Cette option crée une collision simple autour du static-mesh en projetant des plans depuis X axes. Fit 6-DOP Box projette 6 plans (haut, bas, gauche, droite, avant et arrière) et les rapproche du static-mesh jusqu'à ce qu'ils entrent en contact avec lui, ce qui crée un cube de collision le plus petit possible. Les options avec des nombres plus grands effectuent la même opération mais en ajoutant des plans supplémentaires sur les coins du cube de base. On peut se rendre compte des différents résultats en créant une sphère et en observant les collisions créées.
Textures
Lors de la création d'un static-mesh, chaque triangle possède ses propres informations de texture et d'alignement. Une fois converti ou importé, la liste de tous les materials utilisés est visible dans le static-mesh browser. On peut échanger un material pour n'importe quel autre, mais on ne peut pas changer l'alignement ou la rotation de la texture sur des triangles spécifiques (pour ce faire, il faut utiliser un material du type TexRotator, TexScaler, etc., et l'utiliser à la place du material d'origine). Le remplacement se fait sur tous les triangles portant la même texture.
Cette opération change la texture sur tous les exemplaires du static-mesh dans toutes les maps qui y font appel. Si l'on veut modifier les textures portées sur un exemplaire spécifique dans une map donnée, on peut le faire en ajoutant un ou des materials dans l'onglet Display des propriétés du static-mesh concerné, dans la liste Skins. Le numéro de Skin correspond au numéro du material dans le static-mesh browser.
Il est aussi possible d'utiliser une texture ajustée sur un static-mesh en utilisant le champ UV2Texture. Il faut que le static-mesh possède un UV lors de son import dans l'éditeur et que des textures dédiées soient disponibles. Dans UT2004, les packages de textures avec des noms comme AlleriaHardwareBrush ou HumanoidHardwareBrush comprennent des textures ajustées aux static-meshes contenus dans les packages aux noms correspondants. La texture est alors appliquée de façon différente suivant le réglage du paramètre UV2Mode.
- UVM_MacroTexture : La texture est utilisée comme une sorte de masque sous les textures par défaut du static-mesh, donnant des détails ou une couleur sous-jacente aux materials normaux.
- UVM_Skin : La texture est utilisée comme skin et remplace les materials d'origine.
- UVM_LightMap : La texture est utilisée comme lightmap, ce qui permet d'avoir des ombres détaillées, impossibles normalement avec l'éclairage simplifié des static-meshes. L'effet se conjugue à l'éclairage de base du static-mesh ; il faut prendre en compte l'éclairage réel de la map ou paramétrer le static-mesh en bUnlit = vrai pour ne faire usage que du lightmap appliqué dans le champ UV2Texture.
RSS Feed