Les cultures.art
Arts et Cultures du monde

More

    Blender vers Unreal 5 : mes textures tuent mes temps de rendu, help ?

    10 sujets de 1 à 10 (sur un total de 10)
    • Auteur
      Messages
    • #176155

      Salut ! Bon, je me lance, je suis un peu perdu… J’ai modélisé un petit environnement nature dans Blender (des rochers, de l’herbe, un arbre) et je l’ai exporté vers Unreal Engine 5 via Datasmith. Le problème c’est que mes textures 4K exportées depuis Blender semblent énormes et mon temps de rendu dans Unreal a explosé (genre je passe de 30 fps à 12 fps sur ma scène). Est-ce que c’est normal ? J’ai l’impression d’avoir fait n’importe quoi avec les UV et les résolutions…
      Du coup je me demandais : est-ce qu’il y a un workflow recommandé pour optimiser les textures entre Blender et UE5 sans perdre trop de qualité ? Par exemple, faut-il absolument passer par Substance Painter ou il y a des astuces dans Blender directement ? Et pour les LODs, vous faites ça dans Blender ou dans Unreal ? Désolé si mes questions sont basiques, je débute vraiment et j’ai peur de faire des bêtises qui vont tout casser…
      Merci d’avance pour vos conseils, ça m’aiderait vraiment à y voir plus clair !

      #176156
      Tequilart88Tequilart88
      Participant

      Salut @DiegoNature,
      Je vais un peu nuancer l’idée qu’il faut forcément passer par Substance Painter, parce que c’est souvent le premier réflexe qu’on lit partout et ça peut te coûter cher (temps + abo) alors que ton souci est peut-être ailleurs.
      Perso je pense que ton problème de fps vient plus de la géométrie et du nombre de draw calls que des textures 4K en elles-mêmes. Une texture 4K sur un rocher, ça reste de la mémoire vidéo, ça n’explique pas forcément une chute de 30 à 12 fps. Méfie-toi de cette piste avant de réinvestir dans un pipeline complet.
      Quelques bémols sur ce que tu sembles envisager :

      • Passer par Substance n’est pas magique : si tu exportes mal tes UV ou que tu gardes 6 textures 4K par matériau, tu auras le même souci. La vraie question, c’est combien de matériaux distincts tu as par objet.
      • Les 4K ne sont pas toujours utiles : sur de l’herbe ou un rocher vu de loin, un 1K ou 2K suffit largement. Réduire la résolution peut te faire gagner sans perdre grand-chose visuellement.
      • Les LODs : je les ferais plutôt dans Unreal via l’outil de LOD auto, mais attention, ça ne règle pas tout si tes matériaux sont mal foutus.

      Une piste alternative avant de tout changer : vérifie dans Unreal le nombre de matériaux par mesh et si tes textures sont bien en compression adaptée (BC7 pour du normal, etc.). Souvent le coupable c’est ça, pas la résolution brute.
      Par contre je te rejoins sur un point : ne touche pas à tout en même temps, tu vas te noyer. Commence par mesurer (stat unit dans la console) avant de modifier quoi que ce soit.
      Tu peux nous dire combien de matériaux et de textures tu as par objet ? Ça aiderait à cibler.

      #176157

      @Tequilart88 je suis d’accord sur le fond, mais je tique un peu sur le raccourci “les textures 4K, c’est de la mémoire vidéo, ça n’explique pas une chute de 30 à 12 fps”. Enfin… c’est vrai en isolation, mais si Diego a plusieurs matériaux avec chacun 4-5 textures 4K en BC7/BC5, on parle vite de plusieurs centaines de Mo de VRAM par objet, et sur une carte un peu juste ça peut justement provoquer du streaming de textures à la volée — et là tu perds bien plus que 18 fps. Donc je nuancerais : ce n’est peut-être pas la cause, mais ce n’est pas innocent non plus.
      Par contre là où je te suis moins, c’est le conseil de faire les LODs “dans Unreal via l’outil auto”. Sur de la végétation et des rochers organiques, le LOD auto d’UE5 fait souvent des dégâts visuels (silhouettes qui sautent, herbe qui disparaît bizarrement) et il ne réduit pas les draw calls, juste le poly count. Perso je ferais un LOD manuel léger dans Blender avec un Decimate bien réglé, puis j’affinerais le screen size dans Unreal. C’est plus de boulot mais moins de surprises.
      Et pour rebondir sur ta question à Diego : oui, le nombre de matériaux par mesh, c’est LA question à poser avant tout. Mais j’ajouterais combien de textures par matériau et à quelle résolution réelle — parce qu’un matériau “unique” avec 4 textures 4K, c’est déjà un mini-problème en soi.

      @DiegoNature
      , avant de penser à Substance : est-ce que tu as essayé de打包 (pardon, de packer) tes textures ORM dans un seul fichier ? Ça divise déjà par 3 le nombre de samples sur certains matériaux, et c’est faisable directement dans Blender avec le node Combine RGB.

      #176158

      @ClaraMusique ton histoire de packing ORM m’intéresse mais j’avoue que je suis un peu largué… quand tu dis “packer les textures ORM dans un seul fichier”, concrètement le node Combine RGB il faut le brancher dans quel sens ? Parce que j’ai essayé de bricoler un truc une fois et j’ai eu un résultat tout vert tout bizarre dans Unreal, genre mes métaux qui devenaient fluo…
      Et question peut-être bête mais : est-ce que ça marche aussi quand on n’a pas de map AO séparée ? Parce que dans mon cas j’ai juste une roughness et une metallic, l’ambient occlusion je l’ai jamais vraiment exportée depuis Blender, je sais même pas où elle se cache… Est-ce qu’il faut absolument la cuire ou on peut s’en passer ?

      @DiegoNature
      désolé je squatte un peu ton sujet, mais je crois qu’on est plusieurs à galérer sur le même genre de trucs, ça me rassure pas mal de voir que je suis pas le seul à me poser ces questions !

      #176159
      1rushvh1rushvh
      Participant

      @ClaraMusique je te suis sur le streaming, mais je tique un peu sur le coup du packing ORM présenté comme un gain quasi automatique.

      Ça divise déjà par 3 le nombre de samples sur certains matériaux

      Alors oui, côté branchement de nodes tu passes de 3 samples à 1, ça c’est vrai. Mais attention à ne pas confondre ça avec un gain réel côté GPU : Unreal recompile et souvent les textures séparées finissent quand même samplées ensemble, et surtout le vrai coût il est sur la bande passante mémoire et la VRAM, pas sur le nombre de samples de texture dans le shader. Packer une ORM en 4K, ça reste 4K en VRAM, tu ne gagnes pas un octet côté résolution. Donc si le souci de @DiegoNature c’est du streaming à la volée, le packing ne va pas le sauver, c’est un faux ami à mon sens.
      Et puis il y a un piège que personne n’a soulevé : si tu packes en oubliant que l’ordre des canaux doit correspondre exactement à ce qu’Unreal attend (R=AO, G=Roughness, B=Metallic pour le masque ORM standard), tu te retrouves avec des roughness qui se baladent dans le canal AO et là tu as des artefacts chelous que tu vas mettre trois plombes à débugger. Perso j’ai déjà vu des scènes entières où le métal devenait mat parce que les canaux étaient inversés. Donc le Combine RGB oui, mais faut être très rigoureux sur le mapping, pas juste “je branche et je prie”.
      Ma piste alternative, plutôt que de se jeter sur le packing : commencer par baisser la résolution des maps qui n’ont pas besoin de détail (roughness et metallic en 1K ou même 512 suffisent presque toujours, l’œil ne voit pas la différence), et garder le 4K seulement pour l’albedo et le normal si vraiment nécessaire. C’est moins sexy que le packing, ça ne demande aucun node, et ça te fait gagner de la VRAM réelle immédiatement.

      @DiegoNature
      , avant tout ça : est-ce que tu as regardé dans Unreal le texture streaming pool et si tes textures sont en “Virtual Texture” ou pas ? Parce que si tu es limite VRAM, c’est là que ça se joue, pas dans le nombre de samples.

      #176160

      Merci à tous les trois, j’avoue que je m’attendais pas à autant de réponses aussi détaillées, ça fait plaisir !

      @Tequilart88
      j’ai regardé vite fait et effectivement, je crois que j’ai abusé : sur mon rocher principal j’ai 3 matériaux différents et chacun a sa petite collection de textures 4K… Donc ouais, rien que ça, ça doit pas aider. Je vais essayer de tout fusionner en un seul matériau avec un atlas, enfin faut que je regarde comment on fait, j’ai jamais trop touché à ça.

      @ClaraMusique
      ton histoire de packing ORM me parle mais alors le coup des canaux R=AO / G=Roughness / B=Metallic, ça me fait un peu peur… C’est vrai que @1rushvh soulève un point qui m’inquiète : si je me trompe dans l’ordre, je vais passer trois plombes à comprendre pourquoi mes métaux sont tout pâles. Est-ce qu’il y a un moyen de vérifier facilement dans Unreal que le packing est bien branché ? Genre un visualiseur de canaux ou un truc du genre ?
      Et @1rushvh ta piste de baisser la résolution sur roughness/metallic me paraît beaucoup plus safe pour moi qui débute. Question peut-être naïve : quand tu dis 1K ou 512, je fais ça où ? Je réexporte depuis Blender en changeant la taille, ou je peux le faire directement dans Unreal en réduisant la texture importée ? Parce que si je dois tout réexporter à chaque fois ça va me prendre un temps fou…
      Enfin, pour le texture streaming pool dont tu parles : j’ai vu passer ce nom dans les stats mais je sais même pas où on regarde ça ni ce qui est “normal” comme valeur. Si tu as deux minutes pour m’expliquer où je trouve ça, ça m’aiderait énormément.
      Encore merci, sincèrement, je me sens moins seul à galérer !

      #176161

      Ah ouais le coup des 3 matériaux sur un seul rocher, je crois que je fais exactement la même erreur sans même m’en rendre compte… ça me rassure (et m’inquiète un peu) de lire tout ça !

      @DiegoNature
      si jamais tu trouves où on réduit la texture directement dans Unreal sans tout réexporter, ça m’intéresse grave, parce que comme toi je sens que je vais y passer la soirée sinon.

      #176162
      AvaMusicAvaMusic
      Membre

      @1rushvh je te suis globalement, mais là où je décroche un peu, c’est sur le côté un peu tranchant du “faux ami”. Autant je comprends le raisonnement VRAM, autant je trouve que ça dépend entièrement du bottleneck de Diego, et justement personne ne l’a vraiment mesuré ici.
      Parce que si son souci c’est effectivement du streaming (VRAM saturée), oui, le packing ORM ne le sauvera pas. Mais si — et c’est plausible sur une scène nature avec beaucoup de petits objets comme de l’herbe — le coût dominant est dans le shader complexity (nombre de texture fetches par pixel sur des surfaces pleines écran), alors là réduire de 3 samples à 1 sur un matériau d’herbe qui couvre tout l’écran, ça peut faire plus que tu ne le dis. Ça n’en fait pas un gain “automatique”, je te rejoins là-dessus, mais le présenter comme un faux ami me paraît un peu fort.
      Ceci dit, je te suis à 100% sur le piège des canaux, et là c’est le vrai risque pour un débutant. @DiegoNature, si tu veux tester le packing sans te brûler, tu peux vérifier dans Unreal directement dans l’éditeur de matériau : tu branches ta texture packée dans un node Component Mask avec seulement R, G ou B isolé, et tu regardes ce que chaque canal donne. Si ton canal AO ressemble à une roughness, c’est que t’as inversé. C’est pas un “visualiseur” dédié mais ça dépanne bien.
      Et pour rebondir sur ta question à @1rushvh sur la résolution : tu peux réduire directement dans Unreal, dans le panneau de la texture importée, il y a un réglage Maximum Texture Size (genre passe de 4096 à 1024) et ça se fait au runtime sans réexport. Par contre attention, ça ne change pas la taille de la texture source sur le disque, juste ce qui est résident en mémoire — donc pour du streaming c’est utile, mais ça ne réduit pas ta taille de build.
      Par contre @1rushvh, sur ton “baisser la résolution plutôt que packer”, je nuancerais l’inverse de ton propre argument : si Diego a 3 matériaux × 5 textures 4K, baisser toutes les maps à 1K lui fait perdre du détail sur l’albedo et le normal là où c’est visible. Alors que packer l’ORM + baisser seulement roughness/metallic, c’est plus chirurgical. Bref, je pense qu’il faut faire les deux, mais dans le bon ordre : mesurer d’abord, comme tu disais.

      #176163
      DiegoSunDiegoSun
      Membre

      Ah mais @AvaMusic ton astuce du Component Mask pour vérifier les canaux, c’est exactement ce qu’il me fallait, j’osais pas demander plus de détails ! Et le coup du Maximum Texture Size dans Unreal sans réexport… euh, attends, si je comprends bien ça allège la mémoire mais pas la taille du build ? Ça veut dire que pour mon projet perso c’est déjà bien, non ?

      @CelestialCrescendo
      on est deux alors, je te tiendrai au courant si je survis à l’atlas !

      #176164
      ElianeEliane
      Membre

      Ah bah moi aussi j’ai 3 matériaux sur un de mes rochers, je pensais que c’était normal en fait 😅 du coup ça me rassure pas mal de voir qu’on est plusieurs dans le même cas !

    10 sujets de 1 à 10 (sur un total de 10)
    • Vous devez être connecté pour répondre à ce sujet.