Que fait polywright-finish ?
Un maillage est terminé lorsqu'il passe les contrôles de sa cible, a un rendu correct et s'importe à la bonne taille et orientation. Retour au hub : ../polywright/SKILL.md. Détails des moteurs : references/engines.md. Création et finition pour un moteur, étape par étape : references/roblox.md, references/unity.md, references/web-threejs.md. Maillages qui se déforment, s'ombrent et se texturisent bien : references/topology.md.
Étape 1 : mesurer, puis décider
pw.py inspect <fichier> et pw.py check <fichier> --target <cible> --real-size-m X. Les échecs indiquent quoi faire :
trop de triangles, pas d'UV, trop de matériaux, mauvaise taille, arêtes ouvertes, et pour les cibles jeu, web et RA, faces inversées
ou empilées, densité d'UV inégale (inspect --topology ; faces inversées : convert --fix-winding). Effectuer un rendu
avant et après chaque étape destructive (pw.py render).
Étape 2 : échelle, orientation, pivot
- Taille réelle en mètres :
pw.py convert entrée sortie --size-m X --ground --center(le côté le plus long à X ; utiliser une dimension connue pour les formes irrégulières). Une porte fait 2,0 à 2,1 m, une assise de chaise 0,45 m, une table 0,75 m, une personne 1,7 à 1,8 m. - Pivot au centre inférieur pour les accessoires, à la charnière pour les portes, à l'axe pour les roues, à la poignée pour les armes.
- Axes : Blender +Z vers le haut et les faces avant en -Y ; glTF +Y vers le haut et les faces avant en +Z ; Unreal +Z vers le haut en centimètres ; Unity +Y vers le haut en main gauche ; Roblox +Y vers le haut, 1 stud = 0,28 m. Tester une exportation avec un cube de 1 m et une flèche de direction en cas de doute.
Étape 3 : géométrie pour la cible
| Besoin | Faire |
|---|---|
| Moins de triangles, accessoire statique | pw.py convert --max-tris N (la décimation par effondrement conserve la silhouette) ; LODs avec pw.py lods (environ moitié par niveau) |
| Moins de triangles, maillage qui se déforme | pas de décimation : fusionner les boucles là où rien ne se déforme, conserver les boucles autour des articulations (references/topology.md) |
| Quads propres pour déformation ou sculpture | d'abord un remaillage voxel (ferme l'objet), puis QuadriFlow (recette dans polywright-blender), Instant Meshes, Quad Remesher (payant), ou un remaillage quad hébergé ; personnages : à la main |
| Maillage généré (dense, bosselé, arêtes douces) | accessoire statique : décimer et re-cuire ; héroïque ou animé : retopologie et re-cuite ; ou régénérer avec de meilleures références |
| Plusieurs parties qui devraient être une seule | --join ; pour un solide, pw.py union |
| Collision | une boîte, capsule ou enveloppe convexe par partie ; préfixe Unreal UCX_ ; Roblox CollisionFidelity Box ou Hull ; ne jamais utiliser le maillage de rendu pour les objets en mouvement |
Étape 4 : UV et textures
- UV :
pw.py convert --uv(Smart UV Project) pour les accessoires ; un second ensemble non superposé pour les lightmaps cuites (recette) ; densité texel cohérente sur un kit ; feuilles de garniture et atlas pour réduire les matériaux et les appels de dessin. - Cuisson du maillage dense vers le maillage bas : normale, AO, couleur (recette
bake-high-to-low). La retopologie détruit les UV, donc toujours re-cuire. - PBR metal-rough : métal 0 ou 1, la rugosité porte l'aspect, l'albedo jamais pur noir ou blanc ; glTF empaquette occlusion, rugosité, métal dans R, V, B (ORM).
- Cartes normales : OpenGL (Y+) pour Blender, Unity, Godot, glTF, three.js, Roblox ; DirectX (Y-) pour Unreal. Corriger une discordance en inversant le vert. Textures en puissance de deux ; 1024 à 2048 par matériau pour le web et la RA.
Étape 5 : rigging (quand ça bouge)
Entrée en pose A, maillage propre et manifold. UniRig (MIT, local, 8 Go) ou hébergé Tripo, Meshy, AccuRIG (poids humanoides les plus propres), Mixamo (humanoïde, meilleure doc de retarget). Une comparaison de 2026 a trouvé le pivot de la hanche de Meshy 5 à 15 cm décalé (pieds qui glissent) et AccuRIG important une fois à l'échelle 0,01 : vérifier l'échelle et le pivot après le rigging. Roblox : au maximum 4 influences d'os par sommet, racine à l'origine. Un rig Rigify exporte bien plus d'os que son jeu de déformation (278 sur 706 avec uniquement la déformation) : pour les jeux, construire un squelette de déformation uniquement ou utiliser les voies ci-dessus.
Clips d'animation : commencer et terminer chaque clip sur une pose commune partagée pour que les clips s'enchaînent sans transition ; la première image d'une boucle égale sa dernière ; décider du root motion ou sur place par clip et l'écrire ; garder les clips additifs (viser, regarder, incliner) comme actions séparées sur une pose de base (Gregory, Game Engine Architecture 2e (2014), sec. 11.6).
Étape 6 : exporter et vérifier
pw.py convert écrit GLB, FBX, OBJ, USD/USDZ, STL. Par cible :
| Cible | Exportation | Puis |
|---|---|---|
| game-roblox | FBX, OBJ ou GLB par MeshPart, moins de 20k triangles, un matériau | check --target game-roblox ; roblox-agent le place |
| game-unity | GLB (glTFast) ou FBX --fbx-bake-axes | test d'import dans le projet (unity-agent) |
| game-unreal | FBX ou GLB ; Nanite pour les maillages denses opaques | vérification de l'échelle à l'import |
| web-threejs | GLB, puis gltf-transform optimize in.glb out.glb --compress meshopt --texture-compress ktx2 --join-named false | gltf_validator ; vérification de la page (threewright) |
| ar-usdz | convert in.glb out.usdz | usdchecker --arkit lorsque usd-core est installé |
| video-blockout | GLB ou .blend à l'échelle réelle, plus tournettes et passes de profondeur/normale (recettes) | transmettre au plugin vidéo (cinewright) |
| commerce-gltf | GLB, taille réelle, origine centre inférieur, triangles uniquement | check --target commerce-gltf |
Smooth by Angle est un modificateur Geometry Nodes dans Blender 4.1 et versions ultérieures : exporter avec les modificateurs appliqués, sinon
les arêtes dures apparaissent lissées (glTF, FBX et OBJ de même, vérifié sur 5.2.1). Enregistrer chaque sortie : pw.py manifest <répertoire> --add-output sortie/<fichier> --target <cible> --inspect.
Maintenance
Unité persistante, niveau moderate. Compagnons : RESEARCH.md, CHANGELOG.md,
LEARNINGS.md, TESTS.md avec evals/evals.json, MAINTENANCE.md,
état dans evergreen.json. Lire evergreen.json à chaque utilisation ; actualiser lorsque nécessaire.