Dans les parties précédentes des didacticiels, nous avons examiné comment les textures sont créées. Plus précisément, l'apparence de tout sous le capot (comme
Yoooriii l'a dit dans les commentaires de la 4Ăšme partie). Des termes ont Ă©tĂ© mis en place - pixels et texels. DĂ©montĂ© un peu de modĂšles de scan et de grille, PBR et matĂ©riaux. Et enfin, nous avons tracĂ© une ligne sous le mĂ©tier d '«artiste en textures». Il semblerait que vous puissiez dĂ©jĂ arrĂȘter et commencer Ă travailler.
Partie 1. Pixel ici .
Partie 2. Masques et textures ici .
Partie 3. PBR et matériaux ici .
Partie 4. ModĂšles, normales et balayage ici .
Partie 5. SystÚme de matériaux - vous le lisez.
Bloc d'introduction
Dans cette partie, nous n'aurons pas de pratique, car la cinquiÚme partie s'est avérée assez importante. Toutes les informations sur la façon de créer des matériaux et de les personnaliser dans Unreal Engine 4 se trouvent dans les
didacticiels Flakky et bien d'autres. Notre tùche consiste maintenant à analyser la théorie de la maniÚre la plus détaillée possible (et s'il manque des informations, veuillez m'en informer).
En 2017, l'artiste technique Harrison Moore s'est produit au Unreal Dev Day Montréal. Il a parlé de l'approche de texturation que lui et son équipe utilisaient pour s'assurer que le jeu Paragon avait de trÚs beaux matériaux. Ci-dessous un lien vers sa conférence.
Le fait est que nous crĂ©ons un projet VR oĂč la qualitĂ© des textures est d'une grande importance. Par exemple, en crĂ©ant des textures pour de grands objets (murs, sols, grandes armoires, boĂźtes, etc.), nous sommes tombĂ©s sur le fait que la mĂ©thode standard donnait des textures trĂšs pixĂ©lisĂ©es et les chanfreins qui Ă©taient créés en utilisant des bords durs et une carte normale (nous avons triĂ© cela 4 parties) lorsque les objets Ă©taient proches de leurs yeux, ils avaient l'air si pixĂ©lisĂ©s et misĂ©rables que nous avons dĂ» augmenter la taille des textures pour y remĂ©dier. Finalement, pour obtenir au moins une approximation du rĂ©sultat souhaitĂ©, nous avons commencĂ© Ă riveter la texture 8k. Il s'est avĂ©rĂ© qu'il Ă©tait trĂšs coĂ»teux de crĂ©er des textures 8k sur les principaux gros objets, mais visuellement, c'Ă©tait satisfaisant (maximum).

Au dĂ©but, tout s'est bien passĂ©. Les textures Ă©taient rivetĂ©es, la qualitĂ© est normale, mais aprĂšs avoir assemblĂ© une scĂšne Ă partir d'objets avec de telles textures, nous avons rĂ©alisĂ© que cela ne fonctionne pas. Le volume de textures Ă©tait trĂšs important - pour que notre projet fonctionne avec l'utilisateur final, il fallait que la carte vidĂ©o ait au moins 3 gigaoctets de RAM. Et la taille d'une telle texture Ă©tait de 67 millions de texels. MĂȘme si ces textures sont dĂ©jĂ entiĂšrement calculĂ©es et cuites, pas une petite puissance de calcul de la carte vidĂ©o n'Ă©tait nĂ©cessaire pour piloter tous les texels et les afficher sur l'Ă©cran. Mais nous comprenons que pour la mise en Ćuvre complĂšte de PBR, nous n'avons pas besoin d'une texture (et non d'un canal), mais d'au moins 9 canaux.
En conséquence, nous avons obtenu des scÚnes dans lesquelles le volume de textures était énorme, nécessitait des calculs les plus fous et échouait FPS des images dont nous avions besoin à 90 à 45. Il est devenu clair pourquoi presque tous les jeux utilisent uniquement des textures BaseColor, tandis que d'autres ne se connectent pratiquement pas. Par exemple, le jeu Torn pour VR:

La plupart (je dirais 90%) des objets sont simplifiés - le matériau est exclusivement composé de BaseColor. Pas de cartes normales, pas de métal ou de rugosité. Malheureusement, les captures d'écran du jeu disponibles sur le réseau ne vous permettent pas de montrer les inconvénients de cette approche, et vice versa, trÚs souvent les captures d'écran montrent qu'il y a toutes les cartes, et l'image est trÚs belle. Mais ne parlons pas de ce jeu.
Au dĂ©but, j'ai ignorĂ© la confĂ©rence, dont j'ai insĂ©rĂ© la vidĂ©o ci-dessus. Plus prĂ©cisĂ©ment, j'ai regardĂ© Ă travers et j'ai pensĂ© que cela semblait ĂȘtre une bonne approche, mais nous n'avons pas changĂ© le pipeline pour crĂ©er des objets et des textures dans notre Ă©quipe, car cela nĂ©cessiterait un temps suffisant pour maĂźtriser, introduire, dĂ©velopper des compĂ©tences. Et pourtant, face au problĂšme de la qualitĂ© des matĂ©riaux, j'ai dĂ©cidĂ© de reconsidĂ©rer l'approche de la texturation.
Nous avons commencé à comprendre ce que Harrison Moore offrait.
Conditions préalables à la formation du concept d '«artiste de surface»
Et ainsi. Les gars d'Epic Games ont dĂ©veloppĂ© une approche intĂ©ressante pour la texturation (plus prĂ©cisĂ©ment, en ont parlĂ©). Ils ont adoptĂ© l'approche pour crĂ©er des textures dans Substance Painter (ou tout autre programme de texturation) et ont transfĂ©rĂ© directement la cuisson des textures du programme vers le moteur (pour ĂȘtre plus prĂ©cis, ce processus peut ĂȘtre appelĂ© gĂ©nĂ©ration procĂ©durale de matĂ©riaux). Autrement dit, maintenant les calculs de cuisson des textures sont dĂ©jĂ effectuĂ©s dans le moteur lui-mĂȘme, et les textures ne sont pas créées, mais compilĂ©es Ă l'avance. Le rĂ©sultat de la compilation (shader) est stockĂ© dans un format que le moteur comprend, et lorsqu'un modĂšle avec ce shader est affichĂ©, le rĂ©sultat est superposĂ© au modĂšle.
Comment ça marche?
Dans le moteur, chargez la texture de n'importe quelle texture (matériau) dans des tailles de 1k. Autrement dit, l'ensemble standard est Couleur de base, ORM, Carte normale. Ces textures sont chargées de 10 à 20 piÚces. Par exemple, 4 variétés de métal, 5 variétés de cuir, plusieurs variétés de plastique, de bois, etc. Tout cela est combiné dans des fonctions de shader afin que vous puissiez facilement les connecter plus tard. 1 facture = 1 fonction.


AprĂšs cela, ils crĂ©ent des masques pour l'objet dont nous avons besoin. Ici, Substance Painter redevient nĂ©cessaire - Ă l'aide de celui-ci, des masques sont créés sur l'objet. Autrement dit, vous devez spĂ©cifier Ă quels endroits de l'objet quelles textures doivent ĂȘtre affichĂ©es, puis dessiner la texture souhaitĂ©e au bon endroit sur l'objet:


Ci-dessus dans la capture d'Ă©cran, vous pouvez voir comment le robot volant est peint de couleurs vives. En bref - cela est fait spĂ©cifiquement pour voir quels masques sont situĂ©s oĂč oĂč. La deuxiĂšme capture d'Ă©cran montre l'un des masques.
Ces masques sont téléchargés sur le moteur. Ils créent également une carte normale pour chaque objet séparément afin de lisser les chanfreins, d'afficher quelques petits éléments techniques à l'aide de celui-ci et de le charger également dans le moteur.
Ensuite, un nouveau shader (matĂ©riau) est créé, dans lequel les masques créés sont ajoutĂ©s. Les fonctions de shader nĂ©cessaires sont ajoutĂ©es avec les textures nĂ©cessaires (par exemple, mĂ©tal rouillĂ©, plastique et mĂ©tal frais), puis le code est Ă©crit (presque rien n'a besoin d'ĂȘtre Ă©crit, aprĂšs tout Epic Games a fait tout son possible pour nous permettre de travailler plus facilement), dans lequel nous indiquons comment mĂ©langer correctement les masques, quelles textures afficher sous quels masques, comment afficher la texture de la saletĂ©, etc.
Une fois que tout est assemblé, le shader est compilé et le résultat s'affiche.
Eh bien, il semblerait qu'une telle chose - aprĂšs tout, la mĂȘme chose peut ĂȘtre faite dans Painter et obtenir un rĂ©sultat prĂȘt Ă l'emploi. Mais ce n'est pas le cas. Et le carrelage est Ă blĂąmer.
Un peu de carrelage
Carrelage (littĂ©ralement - carrelage, tuile) - Il s'agit d'une rĂ©pĂ©tition de la texture, comme si la tuile, si elle est plus petite que la zone de texturation (UV). Cela est nĂ©cessaire pour combler les lacunes qui se forment dans l'espace UV, si la texture est plus petite. La carte vidĂ©o commence juste Ă la dupliquer autant de fois que nĂ©cessaire pour combler l'Ă©cart. La mosaĂŻque fonctionne de maniĂšre intĂ©ressante - la carte vidĂ©o calcule chaque texture de texel (par exemple, 1 k de taille). Et quand il s'agit de la piĂšce qui est dupliquĂ©e, aucun calcul n'est dĂ©jĂ fait, car ils existent dĂ©jĂ . La carte vidĂ©o copie et colle simplement les donnĂ©es. Copiez-collez. Et cela ne coĂ»te pratiquement rien pour les performances. Ce n'est pas si exigeant en ressources qu'il n'affecte rien, mĂȘme si vous effectuez un pavage de 10000 * 10000 rĂ©pĂ©titions (et rĂ©pĂ©tez cela avec notre exemple d'environ 10 milliards de texels pendant une minute sur les chiffres), votre projet ne s'arrĂȘtera pas une seconde.
Continuez
Autrement dit, nous pouvons maintenant prendre la facture. Montrez-le au bon endroit dans l'installation et colorez-le (dupliquez) exactement autant que vous le souhaitez pour obtenir la qualitĂ© souhaitĂ©e. En raison du carrelage, la taille des texels est trĂšs rĂ©duite, ce qui augmente la qualitĂ© de la texture elle-mĂȘme.
L'inconvénient de cette approche est les mathématiques - maintenant, pour afficher les textures sur un objet, le shader doit calculer plusieurs fois plusieurs opérations pour afficher le résultat final, et au lieu des 3 textures standard, le moteur doit prendre en compte les masques, mélanger les normales, les couleurs, etc.
En fait, la perte dans les calculs est nivelée:
- Vous pouvez et allez rĂ©utiliser les fonctions facturĂ©es. Ă maintes reprises sur d'autres objets. Autrement dit, les calculs seront les mĂȘmes au total, mais le nombre de textures elles-mĂȘmes sera parfois moindre. Vous n'avez plus besoin de crĂ©er de nouvelles textures pour chaque objet, il suffit de dĂ©finir des zones pour les textures et d'utiliser les mĂȘmes textures.
- Vous pouvez créer des tailles de masque plus petites - par exemple, 128 x 128 pixels. Ce qui réduit les calculs de centaines de fois.
- Vous pouvez carreler les textures Ă votre guise, obtenant un rĂ©sultat qui ne peut ĂȘtre obtenu en utilisant la mĂ©thode de texture standard.
- En ajoutant d'autres calculs et masques, vous pouvez jouer avec des canaux individuels, par exemple, rendre le pavage du canal de rugosité plus petit que les cartes en couleur, perturbant ainsi la répétition visuelle de l'image et créant une sensation d'unicité de toute la surface.
- Vous pouvez imposer des fonctions de texture de telle sorte qu'elles se dĂ©placent par rapport aux coordonnĂ©es de l'objet dans l'espace mondial - de cette façon, vous pouvez placer 2 objets identiques avec les mĂȘmes shaders, mais ils auront tous deux un aspect unique.
Il faut comprendre que cette approche n'est pas valable pour toutes les plateformes. Par exemple, les jeux mobiles sont déjà difficiles à assembler de cette maniÚre en raison de la complexité des calculs.
Final Fantasy 15. L'exemple le plus simple des inconvénients de l'approche standard de la texturation et du nouveau systÚme de couche de matériau (comme les gars d'Epic Games l'ont appelé) est Final Fantasy 15. Afin d'améliorer la qualité de l'image, ils ont sorti un pack avec des textures 4k. Et quelle est la texture 4K? Cela représente 16 millions d'erreurs de calcul par canal. Et s'il y en a 9 pour la norme PBR?
Et ici, la puissance du SystĂšme de couches de matĂ©riaux commence Ă Ă©merger autant que possible. Pour collecter des vĂȘtements sur le personnage en utilisant des textures, il suffit d'utiliser 3-4 textures (peut-ĂȘtre plus). Au total, elle sera infĂ©rieure aux textures haute rĂ©solution standard, les performances sont Ă peu prĂšs au mĂȘme niveau et la qualitĂ© peut ĂȘtre contrĂŽlĂ©e en mosaĂŻque et rĂ©glĂ©e beaucoup plus haut.
SystÚme de couche de matériau
Les gars d'Epic Games sont allĂ©s plus loin et ont prĂ©sentĂ© une version bĂȘta du «Material Layer System», qui n'a pas créé de battage mĂ©diatique et s'est avĂ©rĂ© ĂȘtre assez boguĂ©.
Un exemple de son travail peut ĂȘtre vu dans cette vidĂ©o:
Ătant donnĂ© que le systĂšme n'Ă©tait pas encore adaptĂ© au travail, nous nous sommes familiarisĂ©s avec lui, nous Ă©tions heureux qu'un jour nous le terminerions, mais pour l'instant nous avons refusĂ© de travailler avec lui et sommes passĂ©s Ă la crĂ©ation manuelle de shaders, en indiquant directement chaque masque dans le shader.
En conséquence, nous avons commencé à essayer et à expérimenter.
Comment nous nous sommes débarrassés des cartes normales
Au dĂ©but, travailler avec des textures ne s'est pas dĂ©roulĂ© sans heurts - nous avons obtenu l'effet souhaitĂ© avec les textures, mais nous Ă©tions toujours trĂšs inhibĂ©s par la carte normale, car elle devait ĂȘtre gĂ©nĂ©rĂ©e pour chaque objet afin de crĂ©er une sensation de beaux chanfreins. MalgrĂ© la qualitĂ© des textures créées par nous, Ă l'approche de l'objet camĂ©ra, les biseaux laissaient beaucoup Ă dĂ©sirer mĂȘme avec des textures 8k (je me souviens que nous dĂ©veloppions un projet pour VR). Mais la texture 8k est un trĂšs grand volume de texels. Si gros que 2 jeux complets de textures ont pressĂ© FPS jusqu'Ă 45 images (pour VR, vous en avez besoin de 90).
Ensuite, nous nous sommes familiarisés avec la méthode de création de biseaux, dont j'ai parlé briÚvement dans la 4e partie. La création de chanfreins sur des modÚles d'objets a permis de se débarrasser des cartes normales presque complÚtement. Oui, nous avons augmenté les modÚles de polygones, mais pas plus de 20 à 40%, tandis que la qualité des biseaux montait en flÚche.
Cette approche nous a permis de nous débarrasser d'un autre problÚme: les coutures sur les bords. En créant des chanfreins sur le modÚle, il n'était plus nécessaire de couper le modÚle le long des bords durs. En principe, il n'y avait pas de bords durs sur les modÚles, donc les ßles sont devenues grandes, elles ont commencé à inclure de grands espaces, et maintenant que nous appliquons de la texture aux modÚles, il n'y a pratiquement plus de coutures sur les modÚles.
Cela ne signifie pas que maintenant, sur tous les objets, nous n'avons pas de carte normale distincte. Simplement, la plupart des objets standard peuvent faire avec des chanfreins dans les modÚles sans carte normale supplémentaire.
Finalement, en réduisant progressivement les masques, en augmentant et en compliquant les shaders, nous avons commencé à créer des matériaux complexes qui nous permettent de texturer de trÚs belles surfaces:

Au-dessus du sol se compose de 2 textures - bandes de fer - 32x32 pixels et hexagones - 32x32 pixels. Le matĂ©riau a une formule trĂšs complexe - un trĂšs grand nombre d'opĂ©rations de calcul - environ 295 instructions. Pour un matĂ©riau ordinaire, un tel shader nĂ©cessiterait plus de puissance de calcul, mais nous n'utilisons que 32x32 = 1024 texels par canal. 9 canaux = 10k texels, qui doivent ĂȘtre pris en compte lors du calcul de ce matĂ©riau + masque 128x128. Un trĂšs grand nombre d'opĂ©rations sont nivelĂ©es par un petit nombre de texels pour le traitement. En consĂ©quence, nous avons obtenu une belle image avec un shader trĂšs rapide et facile.
GrĂące aux masques, au contrĂŽle compĂ©tent du carrelage et des canaux, vous pouvez crĂ©er des shaders trĂšs complexes qui gĂ©nĂ©reront de beaux matĂ©riaux et en mĂȘme temps ne consommeront pratiquement pas de ressources.
Par exemple, pour le moment, nous utilisons environ 10 Ă 15 textures pour l'ensemble du projet (plus plusieurs objets uniques entiĂšrement texturĂ©s Ă l'aide de la mĂ©thode standard). Le mĂȘme mĂ©tal se trouve sur presque tous les objets. Il est modifiĂ© dans les shaders - nous ajoutons diffĂ©rentes couleurs au matĂ©riau, nous dĂ©calons les cartes de rugositĂ© de la texture, appliquons des rayures sur le masque et leurs coordonnĂ©es sont contrĂŽlĂ©es par les coordonnĂ©es de l'objet (si nous parlons d'objets statiques), ce qui conduit Ă des objets uniques avec leurs copeaux, fissures, saletĂ©s .
Lorsque vous augmentez la rĂ©solution d'Ă©cran, il nous suffit d'ajuster simplement la mosaĂŻque de sorte que le nombre de texels corresponde au nombre de pixels sur l'Ă©cran. Avec la mĂ©thode standard de texturation, vous devrez pelleter toutes les textures, rĂ©cupĂ©rer les anciens projets dans Painter et les enregistrer Ă nouveau. Et vous devez vous assurer que la texture ne va pas. Et puis tout cela devra ĂȘtre rĂ©importĂ© dans le moteur et s'assurer que tout ira bien lĂ -bas, que les shaders calculeront rapidement des textures plus grandes qu'auparavant.
Penser avec des textures
Lorsque j'ai parlĂ© avec des artistes 3D sur le sujet des textures, on m'a dit Ă plusieurs reprises que la plupart des objets ne peuvent pas ĂȘtre assemblĂ©s Ă l'aide de textures, que cela nĂ©cessite une texture distincte avec des motifs uniques et d'autres composants. Par exemple, cette tonnelle:

La complexité de représenter cet objet dans le plan texturé est qu'il a des moments uniques:

Le motif de ceinture sur le dessus du tissu peut ĂȘtre une texture sĂ©parĂ©e et simplement appliquĂ© sur la texture du tissu. Ou cousez une ceinture dans la texture du tissu, puis nous obtenons une texture de tissu unique avec une ceinture:

Lorsque vous utilisez cette texture, la couture des ceintures sur le tissu sera constamment rĂ©pĂ©tĂ©e dans la mĂȘme zone, mais cela ne sera pas Ă©vident.
Les taches humides sont faites par un masque et de la saleté ou autre chose est appliqué. Et cela a déjà l'air unique.
La frange se distingue également par sa texture, et sa taille sera trÚs petite, car elle se répÚte. Vous pouvez l'afficher sur le modÚle à travers le masque.
Un motif unique sur un crochet mĂ©tallique peut ĂȘtre appliquĂ© soit avec un dĂ©calque soit avec une couche sĂ©parĂ©e d'une petite carte normale, qui peut ĂȘtre lissĂ©e sous la position de balayage et dĂ©veloppĂ©e Ă travers le masque.
Les plis sur un rouleau de tissu peuvent ĂȘtre rĂ©alisĂ©s par gĂ©omĂ©trie ou masquage avec ombrage. Dans la gĂ©nĂ©ration actuelle de fer, l'ajout d'un petit nombre de sommets ne causera aucune charge, et vous pouvez toujours les masquer avec des lods Ă distance.
Les objets en bois peuvent ĂȘtre chanfreinĂ©s et ainsi supprimer complĂštement la carte normale des calculs. Et ainsi de suite. La chose la plus importante ici est que tout cela se prĂȘte trĂšs rapidement Ă un ajustement sans programmes tiers et sans perte de temps.
Et surtout, toutes ces textures peuvent ĂȘtre utilisĂ©es dans n'importe quel autre shader, en ajustant les couleurs et les taches.
Exceptions
La plupart, je dirais, 95% de tous les objets du jeu sont couverts par cette mĂ©thode. En gĂ©nĂ©ral, mĂȘme la peinture Ă la main tombe sous la texture et peut ĂȘtre mise en Ćuvre Ă travers elle. Cependant, tous les objets Ă ce stade technologique ne peuvent pas ĂȘtre implĂ©mentĂ©s. Par exemple, des personnages complexes qui ont des Ă©lĂ©ments spĂ©ciaux. Et mĂȘme si vous y rĂ©flĂ©chissez bien, vous pouvez les recouvrir de textures - il est important de les voir en temps opportun, de les couper et de les assombrir.
On m'a proposĂ© de dĂ©montrer le canapĂ© (photo ci-dessous) comme un Ă©lĂ©ment qui ne peut pas ĂȘtre texturĂ©.

Cependant, si vous regardez de plus prĂšs, le canapĂ© a 3 textures (cuir sur le dessus, rembourrage, bois pour les jambes) et 2 difficultĂ©s - ce sont des plis et des coutures.Les plis peuvent ĂȘtre imitĂ©s de 2 façons:
- Sommets supplémentaires.
- Une petite carte normale supplémentaire qui émettra des ondes de pli (une méthode plus attrayante).
La mĂȘme chose s'applique aux coutures - elles peuvent ĂȘtre mises en Ă©vidence avec un masque et Ă©clairer la texture des coutures ou, encore une fois, avec une carte normale supplĂ©mentaire.
Toutes les ruptures, toutes les transitions peuvent ĂȘtre simulĂ©es avec des textures et des masques, crĂ©ant le mĂȘme rĂ©sultat, mais avec un plus petit nombre de textures (nous avons juste besoin d'utiliser les textures du tissu standard pour notre projet et juste changer sa couleur directement dans le shader).
Ici, vous pouvez poser une question - que faire avec la décoloration autour des oreillers? Les masques résolvent ces problÚmes avec un bang =)
De plus, nous pouvons utiliser les mĂȘmes textures pour les chaises. , . , . â . , , . , , , , .
. , , , â . , , .
, â , - , . , , . , , .
, , , , . , , . , - .
Substance Designer â , .
Epic Games "
Jobs in Unreal Engine â Surface Artist ", , . , , .
:, Qbercat Studio,
«Cat Movies» ( ,
, -. , ) . 3D- 1 . 1- 3-5 3D-. , , .
Snake discord- "
Unreal Engine â RuCommunity ", .
Flakky , .
, - â . , , , .
=)