Modélisation d’objets 3D pour le client Godot
WIP - Rédaction en cours : ticket sur la Forge — YannK 2021/09/28 20:26
Nous utilisons le logiciel Blender pour la modélisation, les captures d’écran et les indications sont fournies pour ce logiciel.
De nombreux termes techniques sont conservés en anglais, pour faciliter la recherche de documentation sur Internet, celle-ci étant presque exclusivement écrite dans cette langue.
Modélisation ''hard surface''
Nous envisageons de partir sur une chaîne de production de type medium poly
: nous ne faisons qu’un objet, dont nous éditons les Normals
afin de ne pas avoir à baker celles-ci depuis une version high-poly
sur la version low-poly
avec une topologie optimisée.
Pour l’instant, Godot ne les supportant pas encore (c’est prévu sur leur Roadmap toutefois), nous n’avons pas de Decals
appliquées sur le modèle, mais c’est envisagé à terme afin de permettre l’ajout de détails.
Le but est d’employer des matériaux avec des textures standards dans le client, qui se déploient indépendamment des UV. Le dépliage des UVs ne servira qu’à calculer des effets, en se basant sur les textures de type Curvature
et World Position map
qui devront être fournies pour chaque objet. La définition de celles-ci sera à adapter en fonction de la taille de l’objet et il est possible qu’à terme les deux soient combinées en une seule image avec RGB pour la World Position map
et Alpha pour la Curvature
.
Modélisation de l’objet 3D
Organisation de la hiérarchie des objets
Le but est de conserver le plus possible l’objet éditable de façon non destructive, pour permettre à la fois la retouche aisée et l’adaptation à de nouvelles demandes, de nouvelles contraintes. Comme le client exigera des cartes graphiques récentes (Godot se basant sur OpenGL3, et en cours de portage sous Vulkan), il ne faut pas trop se compliquer la tâche avec le Vertex count
. Supprimer les Edges
redondants suffira, en ayant suffisamment de courbes pour soutenir la forme de l’objet à sa taille de rendu vu depuis 1 m ou 2.
Nous prendrons le modèle travel_box.blend du dépôt des sources d’assets comme base d’étude pour cet article.
Le modèle est organisé de façon hiérarchique claire : dans l’Outliner
tous les éléments sont rassemblés dans une Collection
au nom de l’asset. Il faut veiller à bien nommer aussi les Mesh Data Blocks
pour être certain qu’on s’y retrouve, en leur donnant le même nom que l’objet en lui-même. En cas de partage du Data Block
, cela évitera de se perdre.
Au sein de la Collection
, les objets sont parentés entre eux pour faciliter le déplacement et la compréhension des blocs à éventuellement rendre animés dans le client. Ici nous avons le travel_box_lid
qui est parenté au travel_box_bottom
et chacun de leurs éléments parentés à ceux-ci afin de permettre d’ouvrir le couvercle de façon cohérente.
Si jamais vous avez utilisé des Booleans
, des formes intermédiaires, ou tout autre objet qui ne doit pas être intégré au modèle final, veillez à les placer dans d’autres Collections
, bien distinctes de celle qui porte le nom de l’asset à exporter.
L’usage des ''Modifiers''
Les objets ont leurs Modifiers
non appliqués, pour permettre l’édition et la retouche ultérieures. N’hésitez pas à recourir le plus possible à ceux-ci, ils garantissent un workflow non destructif qui fait gagner beaucoup de temps.
Il est juste essentiel de placer en bas de la liste, soit en dernier à appliquer sur l’objet les trois Modifiers
suivants (dans cet ordre) :
Generate
>Bevel
Nous recommandons d’appliquer des Bevels
, de façon à éviter les angles trop aigus irréalistes. Un seul segment suffit, de très petite ampleur (1mm est en général suffisant).
Peu importe la façon dont vous les appliquez. Sur le modèle, les grands blocs ont eu une Limit method
de type Angle
, de 25° chacun, et les serrures ont eu des ajustements de type Bevel Weight
sur les segments concernés, avec donc une application de Limit method
de type Weight
.
Modify
>Weighted normals
Une fois l’objet muni de ses Bevels
, il faut faire en sorte que les Normales soient correctes au niveau des Faces
. Nous allons donc appliquer les paramètres suivants : Weigthing Mode
> Face Area
, avec un Weight
de 100. En général ces paramètres suffisent si les Bevels
sont corrects.
Il faut penser à mettre l’objet en Shade Smooth
et à activer dans l’Editor
> Context
> Object Data
> Normal Maps
: Auto Smooth
. Couplé aux Bevels
, cela permet d’avoir un objet dont les normals
seront visuellement correctes. N’hésitez pas à jouer avec le Bevel weight
des Edges
qui posent souci si vous constatez des artefacts visuels.
Le but est d’avoir un objet en Solid view
qui soit visuellement correct au niveau des angles et des reflets de plans. Vous pouvez appliquer une MatCap
brillante le temps de vérifier que tout est ok, cela aide bien à pointer les défauts de Normals
.
Generate
>Triangulate
Vu que le moteur de jeu triangulera toutes les faces, il vaut mieux contrôler cette étape afin de s’assurer que les normals
ne seront pas faussées. Le paramètre important à cocher est Keep Normals
qui devrait garantir la consistance du résultat.
Baking des textures liées à fournir
Texturage de l’objet
Export vers le client Godot
Vérifier Scale et Rotation, à 0