• Jeux Vidéo
  • Toi aussi deviens indéveloppeur [Unity/UE4 pour platformers 2D osef]

y a-t-il qqun pour rebrancher le cerveau de binouz
Binouz

hichanbis - 28 Dec 2017

FIOU pepe_stress

J'ai mis du temps à comprendre ce que tu voulais faire mais je crois que j'ai compris. Pour moi je pense que ça aurait été plus simple de tout faire en JSON pour tes données (tu te fais une classe toute simple qui lit/écrit ton JSON au fur et à mesure), car les SO sont utiles justement pour se passer de structures JSON etc.

Mais bref maintenant que t'es parti là dedans ... :p

Je pense en effet que les GUID sont une solution pas connes smiley1 Un GUID (global unique identifier) c'est un numéro qui est garanti unique, tout simplement. La façon de l'utiliser est simple : tu associes un GUID (des infos ici => https://msdn.microsoft.com/fr-fr/librar … 110).aspx) à ton SO (c'est un champ string à la con).

Comme ça, t'as juste à sauvegarder le numéro GUID de l'objet côté JSON, et ensuite si la référence est missing, tu vas chercher parmi tous tes SO du type que tu veux celui qui a le GUID que tu cherches,et tu le réassignes, et voilà, le tour est joué.

Chui pas un grand master des SO (j'ai jamais trop compris pourquoi c'était la mode, même si je vois bien la praticité ici et là, je suis pas sur que ce soit vraiment "sein" d'en foutre partout) alors j'avoue que j'suis pas sur à 100% que ce que je dis c'est pas de la grosse merde, mais ça devrait marcher smiley122 Si Tim passe par là et qu'il a le temps pour tes conneries il te répondra ptet un truc plus opti.

Edit par Binouz (28 Dec 2017)

Invité(e)
profil_supprime

Ça doit être particulier une réunion de développeurs de JV.

Un mélange entre
tenor.gif

et

Edit par Lucien Brémart (28 Dec 2017)

hichlibedis
hichanbis

Binouz - 28 Dec 2017

Merci, oui c'est ce que je lis un peu à droite à gauche aussi.
Quand même dingue de devoir réassigner soi-même des réferences et que ça save pas des GUID par défaut au runtime (dans l'éditeur y a une classe qui permet de le faire mais pas au runtime, surement une raison qui m'échappe).

Pour ta première remarque ce que tu proposes c'est de passer complètement à côté de l'intérêt des SO...
Les SO c'est quand même très cool dans l'éditeur (et quand tu commences à foutre des custom inspectors c'est la surpuissance) et pour gérer de la donnée de jeu (en prime t'as même quelques callback et des méthodes). Tu peux faire des changements à la volée (qui sont conservés par défaut). Tu peux même en faire des singletons sauf que là au moins tu vois tout dans l'éditeur.

Et l'autre intérêt pour moi des SO c'est justement la facilité de serialiser/déserialiser en JSON pour pouvoir bosser aussi en dehors de Unity.
Je crée une BDD en SO, je la sérialise en Json via un bouton dans l'éditeur.
Et si je suis au bureau à Paris, ou n'importe où en fait, je peux bosser sur ma base de données en éditant le json (même directement dans github si je veux) et la désérialiser dans le SO via un autre bouton dans l'éditeur une fois de retour à la maison. Super pratique si je veux faire un mass edit aussi.

Ca fait environ 2 mois que je me gave de tutos/présentation sur les SO donc je suis assez chaud dessus.

Les meilleures prés pour comprendre la puissance du truc:



Edit: Enfin jusqu'à présent j'étais bien mais là le souci que je rencontre avec mon SO qui liste des SO édités au runtime, et que je dois sérialiser est pas hyper simple.
Edit2: Je vais peut-être me simplifier la vie et stocker dans mon SO GameProgress une liste de satisfiedConditions et qui sera juste la liste des GUID de conditions satisfaites. Comme ça au Load je refous le bool à true pour toutes les conditions dont le GUID matche. Simple efficace.

Edit par hichanbis (28 Dec 2017)

L'IA de la nuit dernière

hichanbis - 28 Dec 2017

C'est un non-sens de serialiser un ScriptableObject en JSON, puisque justement les ScriptableObjects sont serialisés de base.
T'as juste à écrire le ScriptableObject en dur. Ou même l'avoir déjà en fichier dans ton projet, de cette façon tout ce que tu lui fais est persistant...

y a-t-il qqun pour rebrancher le cerveau de binouz
Binouz

hichanbis - 28 Dec 2017

Ouais je vois mais comme dit Tim pour moi c'était soit tu pars full JSON, soit full SO, mais pour moi l'intérêt premier des SO c'était de tout foutre en dur et de se passer de JSON.

Bon après que j'en ai encore jamais utilisé de façon sérieuse donc j'ai pas d'avis tranché. Après voilà, tant que tu t'en sors avec ton système c'est le principal, je reviendrai peut-être te trasher dès que j'aurai un projet avec beaucoup de data à save smiley12

hichlibedis
hichanbis

.O. - 28 Dec 2017

... a écrit :

hichanbis - 28 Dec 2017
Ou même l'avoir déjà en fichier dans ton projet, de cette façon tout ce que tu lui fais est persistant...


Euh attends, un scriptable object c'est un asset de jeu. Il est soit en mémoire, soit dans ton dossier Assets.
Donc dans le cas où c'est un fichier asset tu peux pas le modifier de manière persistante au runtime, tout simplement parce que Unity utilise une instance de cet asset au runtime et pas l'asset lui-même.
Faut pas se laisser feinter par le mode éditeur, où Unity fait persister les changements dans l'asset quand tu sors du play mode. Une fois buildé ça se comporte pas pareil.
Tu peux faire des modifs de ton instance au runtime mais à la fin de ta session ça sera jamais persisté dans le fichier asset (ton OS le permettra pas de toute manière).

Voir: https://answers.unity.com/questions/344 … tom-a.html
ou https://forum.unity.com/threads/questio … me.477091/

Pour persister faut forcément que tu foutes ton fichier de sauvegarde dans le persistent path (eventuellement faire une copy direct du fichier SO sans passer par un json ça j'ai pas encore essayé mais je doute qu'il contienne les bonnes valeurs au runtime encore une fois...)

...ou alors y a un truc basique que j'ai pas compris

Edit par hichanbis (29 Dec 2017)

y a-t-il qqun pour rebrancher le cerveau de binouz
Binouz

hichanbis - 28 Dec 2017

Je réponds de façon short parce que je suis sur tel mais normalement de ce que j'ai compris le fichier .asset est justement fait pour être écrit sur le disque en dur smiley13 et être loadé à la volée par Unity. Ou j'ai loupé un truc ?

Edit par Binouz (29 Dec 2017)

hichlibedis
hichanbis

Binouz - 29 Dec 2017

Je vais attendre ta réponse moins short du coup smiley76

Invité(e)
profil_supprime

Le short en hiver en plus, c'est un coup à être grippé en plus.

ancien con embêtant
Ancien-Combattant

Lulu la marrade

Invité(e)
profil_supprime

Rendez vous sur le parking de Lidl Montesson, ce soir à 0h00. On va voir si tu fais le malin.

ancien con embêtant
Ancien-Combattant

profil_supprime - 29 Dec 2017
On avait compris la première fois Lulu la lourdeur. Je comprends que quelques mdr soient gratifiants et te font pousser des ailes mais le comique de répétition et les blagues h24 7/7 ça finit par lasser. Forcément, tu peux pas tjrs être au top. Lâche un peu le clavier et reviens-nous avec de l'inspi. En toute amitié.

tl;dr51

smiley68

Invité(e)
profil_supprime

Pète un coup, ça ira mieux.

ancien con embêtant
Ancien-Combattant

profil_supprime - 29 Dec 2017
Je te laisse le dernier mot et te prie de m'excuser si je t'ai blessé avec ce "Lulu la marrade" assez agressif il faut l'avouer smiley130

La parole est aux développeurs.

y a-t-il qqun pour rebrancher le cerveau de binouz
Binouz

hichanbis - 29 Dec 2017

Me revoilà smiley122

Mais du coup, parce que là j'suis un peu confus j'ai l'impression de m'embrouiller avec l'utilisation de base des Scriptable Object.

Au runtime :
- T'as un fichier bordel.asset dans le persistant data path
- Tu fais AssetDatabase.LoadAssetAtPath de bordel.asset
- T'as les datas
- Tu les modifies
- Tu réécris un fichier bordel.asset dans le persistant data path.

Même si c'était une instance on s'en fout non, le premier est écrasé et t'as bien ta nouvelle config en dur sur ton PC ?

Ou j'ai raté une histoire ?

hichlibedis
hichanbis
Binouz a écrit :

hichanbis - 29 Dec 2017

Me revoilà smiley122

Mais du coup, parce que là j'suis un peu confus j'ai l'impression de m'embrouiller avec l'utilisation de base des Scriptable Object.

Au runtime :
- T'as un fichier bordel.asset dans le persistant data path => Non dans le data path (en gros dans Assets/ ). Dans le persistent data path t'as un json/xml/binaire logiquement (sauf si je me prends la tête à serialiser pour rien mais j'ai trouvé aucune info sur comment loader un SO au runtime... A priori soit il est dans Assets/ et tu peux le réferencer dans un monobehaviour via l'éditeur Unity, soit il est dans Assets/Resources et tu peux faire un Resources.Load())
- Tu fais AssetDatabase.LoadAssetAtPath de bordel.asset => Non ça c'est une classe du namespace UnityEditor donc pas au runtime
- T'as les datas => Oui
- Tu les modifies => Oui sauf que ça modifie pas le fichier asset mais une instance de ton SO en mémoire
- Tu réécris un fichier bordel.asset dans le persistant data path. => Voir premier point.

Même si c'était une instance on s'en fout non, le premier est écrasé et t'as bien ta nouvelle config en dur sur ton PC ? => Nope. Si c'est un asset ben t'écrases pas des assets de jeu au runtime. Si c'est un fichier que tu loades du persistent data path, ben c'est pas un SO mais un fichier plat (xml, json, binaire) que tu désérialises en une instance. Voir mes liens précedents.

y a-t-il qqun pour rebrancher le cerveau de binouz
Binouz

hichanbis - 02 Jan 2018

pepe_stress WOW.

J'suis un peu choqué et déçu, du coup c'est quoi l'intérêt par rapport à un prefab avec un script dessus ? Je pensais que moi l'interêt des datas en .asset c'est que tu pouvais le tej ou tu voulais dans ton PC et le loader quand tu veux à la volée hors unity ?

Enfin à moins que je fais encore fausse route mais si tu écris directement le scriptable object en binaire, et que tu le récup en binaire en disant que c'est un type "MonScriptableObject", c'est bon non ? C'est de la serialisation de base.
J'ai du mal à croire qu'ils aient conçu tout un système pratique pour stocker des datas mais avec l'impossibilité qu'ils soient persistant sur le disque smiley20 En plus de pas donner une API haut niveau pour faire cette petite sauvegarde.

Tim, tu utilises des scriptable object dans ton projet toi ? Si oui, t'as un exemple d'utilisation qui change la vie ?

Edit par Binouz (02 Jan 2018)

hichlibedis
hichanbis
Binouz a écrit :

hichanbis - 02 Jan 2018

Enfin à moins que je fais encore fausse route mais si tu écris directement le scriptable object en binaire, et que tu le récup en binaire en disant que c'est un type "MonScriptableObject", c'est bon non ? C'est de la serialisation de base.

Voilà mais du coup je préfère le json parce que c'est éditable plus facilement.

Binouz a écrit :

hichanbis - 02 Jan 2018
J'suis un peu choqué et déçu, du coup c'est quoi l'intérêt par rapport à un prefab avec un script dessus ? Je pensais que moi l'interêt des datas en .asset c'est que tu pouvais le tej ou tu voulais dans ton PC et le loader quand tu veux à la volée hors unity ?

De la donnée ou du comportement (tu peux faire des objets delegates) que tu attaches pas à un objet en scène.
Genre pour un RPG stocker des abilities ou des stats d'ennemis. Si je fais une modif je casse pas tout j'ai un seul point de maintenance.
Et dans l'éditeur tu peux foutre des custom editors sympas.
J'ai vu un exemple d'un system de game event et listeners avec des SO. Tu mets un bouton "Raise Event" dans ton custom editor et tu peux raise des events quand tu veux en play mode pour tester ton comportement. C'est quand même bien pratique.

Edit par hichanbis (02 Jan 2018)

y a-t-il qqun pour rebrancher le cerveau de binouz
Binouz

hichanbis - 02 Jan 2018

Ah oui je vois pour l'utilisation, ça permet de centraliser les valeurs du game design. Je fonctionnais pas mal avec un plugin qui téléchargeait des données depuis Google Sheets moi (ça permettait au GD d'être "collaboratif") mais j'avoue que les Scriptable Object ça me tente de me lancer dedans depuis un pti moment, j'suis toujours en mode vieux con avec mon gsheet.

Du coup faut vraiment séparer data du game design (SO) et data à sauvergarder.

Edit par Binouz (02 Jan 2018)

Fiché HS
Britney

Bon et sinon,c est en quelle année qu on verra Hichanbis à l'E3 afficher un tatouage Xbox sur son biceps?

Edit par Britney (02 Jan 2018)

L'IA de l'antimatière

La nouvelle sensation des projets indépendants, le "Braid" de hichanis.

"Bread". smiley18

y a-t-il qqun pour rebrancher le cerveau de binouz
Binouz

Putain je suis ptet grave à la bourre et vu que j'ai majoritairement dev en VR ces derniers temps j'ai pas trop regardé les dernières tech de mise en scène, mais je viens de découvrir la Timeline et Cinemachine dans 2017, cette tuerie smiley115

Tellement ez de faire des caméras fixes et des transitions de plans comme dans MGS ou RE maintenant, ou même suivre son perso sans que ce soit la grosse cahute.

Vivement le Package Manager dans 2018, ils viennent d'intégrer ProBuilder aussi smiley45 J'l'ai utilisé sur mon premier projet, ça sert bien pour prototyper voir dépanner quelques formes simples

Edit par Binouz (21 Feb 2018)

hichlibedis
hichanbis

Binouz - 21 Feb 2018

hichanbis a écrit :

Cinemachine miracle

smiley9

y a-t-il qqun pour rebrancher le cerveau de binouz
Binouz

hichanbis - 22 Feb 2018

Bien vu smiley12 je suis donc bien à la grosse bourre feelsbad

Je travaille chez l'Euromaster du JV
nanarcorp

Je ne savais pas trop où poster ça, le topic le plus approprié me semblait être celui-ci. Je me suis dis pourquoi pas partager quelques travaux que j'ai enfin le droit de diffuser sur THE CREW 2 :
https://www.artstation.com/artwork/BZy36
https://www.artstation.com/artwork/VeGPN
https://www.artstation.com/artwork/mV5Od

Ceiling Clott is watching you masturbate
clott

nanarcorp - 01 Jul 2018

En moyenne combien de temps de boulot pour une roue ?
C'était assez libre au niveau du design des jantes ou il fallait le plus possible se rapprochait de modèles existants ?

J'ai pris cher man !
sherman

nanarcorp - 01 Jul 2018

smiley114
Je sais pas si le jeu est bon mais c'est sur qu'il a une sacrée gueule

Je travaille chez l'Euromaster du JV
nanarcorp

Thanks !
Clott: en moyenne 1 semaine on va dire. J'avais une liberté totale pour le design mais il fallait malgré tout que ça rappel ce qui se fait dans la réalité

Edit par nanarcorp (02 Jul 2018)

tl;dr51

nanarcorp - 01 Jul 2018

Pas mal, t'es issu de quel formation ? Mon pote commence a faire de la 3d en deuxième année a new edge mais vla le prix de l'école smiley71 cependant les profs/matières sont ouf askip

Invité(e)
Invite

à une epoque je me moquais de ceux qui voulaient bosser dans le jv en disant « tout ça pour modeliser des chaises pour le prochain assassin »

bon, là c est des roues pour the croute

ma question est donc la suivante, qd on fait ce metier c est quoi la suite ? passer des roues à la carrosserie est une promotion ?
on change d employeur pour voir autre chose ? (c est une question serieuse)

Edit par Peach (02 Jul 2018)

Nintentraumatisé
Cheftrottoir
Peach a écrit :

(c est une question serieuse)

C'est encore plus grave qu'on le pensait. pepe_stress

hichlibedis
hichanbis

Cheftrottoir - 02 Jul 2018

Pourquoi? C'est un peu sec dans le ton (c'est peach) mais fondamentalement c'est pas inintéressant comme question.

Nintentraumatisé
Cheftrottoir

hichanbis - 02 Jul 2018

C'est debile. Ca s'applique a tout les metiers, a toutes les activites du monde.

qd on fait ce metier c est quoi la suite ? passer des steack à l'entrecote est une promotion ?
on change de restaurant pour voir autre chose ? (c est une question serieuse)

qd on fait ce metier c est quoi la suite ? passer des bilan au compte de resultat est une promotion ?
on change de cabinet pour voir autre chose ? (c est une question serieuse)

qd on fait ce metier c est quoi la suite ? passer des dp au gang bang est une promotion ?
on change de compagnie pour voir autre chose ? (c est une question serieuse)

qd on fait ce metier c est quoi la suite ? passer des caries à l'arrachage de dent est une promotion ?
on change de cabinet dentaire pour voir autre chose ? (c est une question serieuse)

Mon père est un pigeon
DarkAnother

Cheftrottoir - 02 Jul 2018

Ce post est certifié blanc-bleu-rage.

Invité(e)
Invite

fais gaffe t as un sushi coincé dans l anus

Nintentraumatisé
Cheftrottoir
Peach a écrit :

fais gaffe t as un sushi coincé dans l anus

smiley116

J'ai pris cher man !
sherman

La question est interessante quand meme
Je comprends que pour le studio il y a gain de temps et surement une meilleur cohérence en donnant à un mec de faire des roues, un autre les phares, un autre la carrosserie et un dernier de tout assembler

Mais en effet comment t'évolue dans ce système, tu te retrouve à coordoner ?
Et surtout est-ce que c'est interessant de bosser en quelque sorte à la chaine ? A moins qu'à coté t'aie aussi fait des immeubles, morceaux de carte, etc. Mais si t'as vraiment passé un an à faire des roues ça ressemble à l'usine quoi...

et le sushi dans l'anus m'a fait sourire smiley76

Singe-Gobelin
Sage-Goblin

Si je regarde le dernier, Nanar n'a pas l'air de faire que des roues, y a un décors, ou c'est pas lui, et c'est juste histoire de montrer les roues, et dans ce cas la, c'est un peu triste.
Après en bossant chez Ubi, je m'attends quand même a un certain boulot a la chaine, on va dire, avec des trucs pas super intéressants pour le grand public, mais qui font bien dans le portfolio.

Je travaille chez l'Euromaster du JV
nanarcorp

Oula beaucoup de réaction, mais la question est loin d'être inintéressante.
Alors pour commencer :

Peach > Non il n'y a pas de "pneu artiste" ou de "chaise artiste", du moins pas à Ubisoft. j'ai eu l'occasion de bosser sur The Crew 2 et...c'est un jeu de caisse quoi ! Par exemple là je bosse en ce moment sur The Division 2 et je fais des trucs totalement différent. En fait ça me paraît évident, un projet = une thématique. Bah jeu de bagnole c'est inévitablement des voitures, des pneus, des stands à merguez, etc.

Pour répondre à la question de "l'évolution" professionnelle, ça dépend de ton post quoi. Mais en gros tu évolues en confirmé, senior et/ou lead. C'est un peu le chemin classique du bordel. Maintenant "des pneus à la carrosserie", ça ne marche pas comme ça. Déjà car l'un n'est pas plus important que l'autre et que la "promotion" ne juge pas à l'importance de l'objet que tu vas avoir à réaliser. On te donne pas un susucre car tu as bien travaillé (des fois si, mais bon, c'est pas la norme quoi). Tu évolues en changeant de boîte et en montrant que tu as bien bossé sur tes précédents projets (à travers ton portfolio et des recommandations). Du coup une sorte de "confiance" s'instaure et tu peux négocier une meilleure position/salaire.

Maintenant "faire des pneus" et des "chaises" c'est super caricatural, car déjà il n'y a pas que ça. Mais surtout si tu aimes ton job, à savoir la conception d'environnement et de props, bah je ne vois pas où est le problème à passer son temps à faire ça à vrai dire. Réaliser des décors et des objets c'est quelque chose de génial. Passer du temps à concevoir et donner de la vie à l'objet et le voir tourner dans un jeu c'est super gratifiant. 

Sage-Goblin : ça ne veut rien dire "travail à la chaîne" dans le cas du JV. En tout cas pour un artiste, dans la mesure où chaque projet est différent et que les codes le sont aussi. Alors oui il y a un pipeline software qui va forcement être identique, mais tu penses pas pareil et tu ne fais pas la même chose quand tu passe d'un jeu comme Asura's Wrath à un Deus Ex.

Invité(e)
Invite

nanarcorp - 02 Jul 2018

ok merci

c est juste que

1/ j ai l impression que vous etes vraiment beaucoup de « petites mains » sur la modelisation d assets
faut dire que maintenant tout le monde veut faire ca

2 / en france tout le monde bosse pour ubisoft, directement ou indirectement, du coup ba j ai du mal à voir comment on peut facilement evoluer vu qu il n y a pas foule de boites pour bcp de main d oeuvre

apres si tu fais autre chose que des petites crottes 3d tant mieux

mpprrrrfffffchier

Bah c'est comme partout, au fur et à mesure que tu évolues, tu obtiens de plus en plus de responsabilités. Un artiste peut par exemple devenir lead et encadrer d'autres artistes, ou alors directeur artistique, ou encore directeur technique (ie. celui qui va mettre en place le pipeline utilisé par les artistes pour concrétiser la DA).

Après dans une grande prod comme celle des jeux ubi, il peut effectivement y avoir un côté travail à la chaîne vu qu'un projet peut représenter une centaine d'artistes chacun chargé d'un "bout" du jeu, mais là encore, ça n'a rien d'une fatalité, un artiste peut très bien aller changer d'air sur un projet plus modeste (rien qu'en France, ce n'est pas ce qui manque), où il aura mécaniquement plus de choses à faire vu que les artistes y seront moins nombreux.

Ceiling Clott is watching you masturbate
clott

De plus, à corriger si je m'égare, une grosse boite comme Ubisoft permet de se former entre deux projets justement grâce à l'importante main d'œuvre.

Che vais en vacanches en greyche
Grey-Che

nanarcorp - 01 Jul 2018

Faudrait expliquer aux collègues que sur une moto le guidon tourne dans la direction opposée du virage (contebraquage).


Les sensations ont l'air bonnes sinon.

Edit par Grey-Che (05 Jul 2018)

Y a des gens qui maitrisent DirectX 11 ici ? J'aurai quelques questions parce que j'avoue que j'ai du mal. feelsbad
- Faut il balancer toutes les vertices dans un seul buffer ? Peut-on définir le VertexBuffer morceau par morceau (j'ai 150 millions de vertices, donc de facto ça tourne pas sur 32 bits mais même avoir un tableau aussi grand c'est pas ouf).
- Dois-je utiliser plusieurs VertexBuffer chacun dans un slot ? (limité à 32 slots avec DirectX 11 c'est ça ?) mais du coup c'est la même fonction de Draw qu'il faut appeler ? Comment le context sait qu'il doit dessiner les 10 M de vertices qui sont dans le slot 0 et pas le slot 1 ?

J'essaie de faire un viewer 3D pour commencer.

Singe-Gobelin
Sage-Goblin

JVRS - 25 Jul 2018

Bon je connais pas DirectX 11, mais je travail avec OpenGL depuis de nombreuses années, et la philosophie des 2 API est la même, donc je peux te répondre.

Quand tu utilises une API bas niveau comme DX ou GL, généralement il faut réduire au maximum tes draw call, car c'est une fonction qui coûte cher, donc la meilleur idée est d'utiliser un VBO, mais ça c'est le cas idéal, la réalité impose que tu travailles généralement avec plusieurs VBO, l'idée est d'arranger tes vertex pour réduire au minimum tes VBO. Pour ça t'as plusieurs façon de faire, soit tu arranges tes vertex de manière "interleaved", c'est-a-dire chaque case mémoire représente un vertex offseter par ses attributs (généralement coordonnes | normal | textures, ainsi de suite).
Tu as la version "packed" (Toutes les coordonnes, suivis de toutes les normals, suivies de toutes les coordonnées textures, tout ceci dans un seul vbo).
Ou bien tu as un vbo par attribut, i.e un vbo pour les coordonnes, un vbo pour les normales, un vbo pour les textures, etc.

Dans l'ordre du meilleur au moins bon : interleaved -> packed -> vbo par attributs.

Décris un peu la topologie de ton ensemble afin d'en savoir un peu plus.

La 150 millions de vertex ça me semble un peu gros, mais j'ai déjà vu ça sur de très très gros assemblages avec beaucoup de part, dans un logiciel de CAO.

Est-ce un seul et unique mesh, ou bien, plusieurs sous-mesh ?

Sage-Goblin - 25 Jul 2018

C'est bien pour du CAO que je teste tout ça. Et j'ai plusieurs géométries (des milliers) mais elles sont statiques.
Donc je fais du interleaved du coup (position -> couleur) auxquelles je compte ajouter des normales pour la lumière, une matrix pour la transformation si je veux dynamiser l'ensemble un peu (des méthodes pour éclater le modèle) puis les coordonnées des textures un jour peut être.
J'arrive à tout faire tenir en un seul buffer (je dessine tous les opaques puis je désactive l'écriture dans le depth buffer et je dessine les vertex ayant de la transparence), ça tourne à 60 fps (pour l'instant, ou 10 fps sur la CG intégrée) et le plus long dans ce que j'ai chronométré c'est la création des buffers (mais je le fais qu'une fois au chargement du fichier, et j'ai pas mal d'idées pour optimiser la création de celui-ci) et la fonction de swap à la toute fin de la méthode de rendu.

Après justement en WebGL (la même chose qu'en OpenGL du coup ? mais c'est là où j'avais fait mes premiers tests) y a pas cette histoire de slots dans l'input assembler et du coup c'était plus simple à gérer et c'est ce qui me prend la tête avec DirectX (et tous les examples du monde font avec un seul slot feelsbad).

Singe-Gobelin
Sage-Goblin

JVRS - 25 Jul 2018

Bon j'ai compris cette histoire d'Input Slot, il y a peu près la même chose en GL 4.3
Input Slot et OpenGL

Pour en revenir a ton problème, faire tout tenir dans un seul VBO c'est bien mais ça impose que tu connaisses ta géométrie des le départ, et qu'elle ne bougera jamais (c'est-a-dire que l'utilisateur ne rajoutera pas d'objet sur son modèle, ce qui est peu probable).
Si c'est juste un viewer qui affiche l'objet sans modification, la je dirais oui alors c'est faisable (et c'est ce que tu fais donc c'est bien).

Concernant tes attributs, généralement un modèle a toujours au minimum des postions et des normales, le reste des attributs sont facultatifs. Voila les avantages et inconvénients son exhaustif, si tu veux faire plusieurs modes de rendu.
Si tu veux afficher ton modèle non texturé, et un affichage texturé, stocker les coordonnes de textures dans le même buffer que les autres, implique que tu doives recréer un nouveau vbo avec toute la topo incluant les coordonnes de textures, et comme tu l'as vue, créer un VBO n'est pas une opération gratuite, c'est pour ça qu'elle est généralement faite au début et après on ne s'en occupe plus (sauf dans certains cas, comme de la cinématique par exemple).

Donc dans un cas comme ça, il est préférable de faire un vbo supplémentaire qui ne contiendra que tes coordonnées de textures, c'est beaucoup moins lourd a gérer.

Concernant tes matrices, ce ne sont pas des attributs de vertex, mais plutôt des uniform. Dans la notion d'éclaté, on éclate des pièces, pas les vertex, si tu mets tes matrices en tant qu'attribut je te garantis que tu vas saturer ta mémoire.

Après pour le rendu tu as des techniques d'optimisations, par exemple dans ton fichier, regarde si tu as des instances d'une même pièce, dans ce cas il est préférable de faire un draw instancié plutôt que de tout redessiner.

Sage-Goblin - 26 Jul 2018

Ha merci. J'ai (enfin) compris cette histoire de slots. Je pensais en fait qu'on pouvait mettre un vertex buffer dans le premier slot et un autre dans le deuxième slot et ensuite faire un Draw call sur le premier puis sur le second. Mais c'est crétin en fait puisque les slots sont utilisés tous ensemble.

Pour ce qui est des instances ouais j'ai vu, mais vu que je dois faire des ray cast sur ma scène j'ai besoin de conserver tous ses triangles sur la RAM, après peut être qu'il y a quand même un gain à faire un Draw propre à ces instances. Et le Draw ne vaudra donc que pour une seule pièce ? J'imagine que je ne peux pas mettre plusieurs pièces dans un buffer et faire des instances distinctes ?

Pour le fun j'ai commencé à regarder comment mettre en place du SSAO
pepe_stress

Edit par JVRS (26 Jul 2018)

Singe-Gobelin
Sage-Goblin

Oulah je crois qu'il ne faut pas tous mélanger, si tu fais du ray casting ce n'est pas pour du temps reel (enfin pas avec l'API DX11), généralement on ne garde jamais sa tessellation (faite sur le CPU) après un rendu sur le GPU.
Le Ray Casting c'est une autre philosophie, la quand tu y seras vraiment, je te conseille de regarder du coté  des compute shaders, ca devrait t'aider a accélérer les choses.

Pour les instances, j'ai pas compris ta remarque, vu qu'en fait un draw instancié n'est juste qu'une autre façon dessiner, mais en soulageant le pipeline, en n'envoyant qu'un seul draw depuis l'hôte qui dit au GPU, ça c'est des instances, j'en veux tant, dessine les moi.

L'idée par exemple, prend un exemple comme minecraft, une optimisation, est d'envoyer un seul cube dans ton vbo, et de faire un draw instancié des dizaine de milliers d'autres cube a partir de ce cube, mais avec chacun leur matrice, leur matière, etc. Regarde sur le net, c'est un domaine largement couvert.

Pour le SSAO, ça n'a rien de compliqué au final, et il y a de très nombreux tutos, le HBAO est déjà plus intéressant a implémenter et plus complexe.
Par contre il y a quelque chose sur lequel il faut faire gaffe sur la plupart des tutos qui implémente le SSAO, c'est qu'ils travaillent tous en projection perspective, et a l'époque quand je l'avais implémenter dans le soft de ma boite, j'avais pas fait gaffe, mais je me retrouvais avec des résultats étranges, le truc c'est qu'en CAO on travaille plus avec une projection parallèle (orthographique), et la formule mathématique est différente, donc faut le savoir. J'essaierai de retrouver ça a l'occasion.

  • Jeux Vidéo
  • Toi aussi deviens indéveloppeur [Unity/UE4 pour platformers 2D osef]