[WIP] Simu Course réaliste + Map + Volant

Modérateur : Administrateurs Suppléants

djulio74
Messages : 432
Inscription : 19 Déc 2009 22:55
Contact :

Re: [WIP] Simu Course réaliste + Map + Volant

Message par djulio74 » 03 Oct 2018 10:34

Me revoilà!! ;-)
et me revoilà aussi avec un problème :hehe:

Jusque là je n'avais pas ajouté de collider a ma map. chose que j'ai voulu faire aujourd'hui.
J'ai donc plusieurs parcelles de terrain, chacune avec un component <meshfilter> et son mesh calculé. j'ajoute a chacun un component <meshCollider>. Jusque là tout va bien.
Mais dès lors que je veux assigner: <meshCollider>.sharedMesh = <meshFilter>.mesh , le temps de génération explose et passe de 10 sec à 40 sec...
Donc l'ajout d'une simple ligne multiplie par 4 le temps total !!!
Est-ce vraiment si long d'assigner un meshCollider ??!! ou ai-je raté quelque chose?
Merci d'avance.

sniff.. personne n'as voulu tester le standalone.. lol

______________________________________________________________
\_______________________ Impossible is nothing _______________________/

Avatar de l’utilisateur
Alesk
Messages : 1928
Inscription : 13 Mars 2012 09:09
Localisation : Bordeaux - France
Contact :

Re: [WIP] Simu Course réaliste + Map + Volant

Message par Alesk » 03 Oct 2018 10:38

Yo !

J'ai complètement zappé le test de ta version standalone ! Fais péter en MP !

Pour ton souci de collider, combien y a t-il de vertices sur celui-ci ? S'il y en a trop, ça pourrait être un indice.
En général il vaut mieux avoir un collider ayant une géométrie plus simple que le mesh affiché.

djulio74
Messages : 432
Inscription : 19 Déc 2009 22:55
Contact :

Re: [WIP] Simu Course réaliste + Map + Volant

Message par djulio74 » 03 Oct 2018 11:20

pas de soucis :)

il y a au max 30000 vertices par parcelle, c'est peut être en effet beaucoup, mais c'est déjà un peu un "lowpoly".
Mais oui je viens de faire un test en augmentant le nombre de parcel, donc en en diminuant la taille, et par la même le nombre de vertices ( 4x plus de parcelles, donc 4x moins de vertices pour chacune). c'est un peu mieux , ne fait que doubler le temps. un peu plus long pour le calcul des parcelles ( 10 à 15sec) mais plus rapide pour les collider ( 30 à 10sec).

Il y a donc du mieux mais c'est pas encore ça. lol

lien telechargement

______________________________________________________________
\_______________________ Impossible is nothing _______________________/

Avatar de l’utilisateur
Alesk
Messages : 1928
Inscription : 13 Mars 2012 09:09
Localisation : Bordeaux - France
Contact :

Re: [WIP] Simu Course réaliste + Map + Volant

Message par Alesk » 03 Oct 2018 11:29

Oué... C'est beaucoup trop... Il faut trouver une optimisation en contournant ça.

djulio74
Messages : 432
Inscription : 19 Déc 2009 22:55
Contact :

Re: [WIP] Simu Course réaliste + Map + Volant

Message par djulio74 » 04 Oct 2018 18:32

pas facile cette optimisation...
- Je peux en effet augmenter le nombre de parcelles, ce qui m'arrange pas vu que chaque jonction entre parcelles n'est pas "smooth", dans le sens ou on voit la discontinuité entres les parcelles.. pas top en visuel et augmentation des drawcall..
- je peux aussi subdiviser chaque parcelles en plusieurs collider.
de 0 a 200 tri => new GameObject et son collider.
de 201 a 400tri => idem
etc..
Mais bon avec la voiture j'avais fais un bout de script pour lisser les collision-arretes ( contact roue/sol) en se basant sur les Vertices voisin, normals.. Donc plus j'augmente le nombre de collider, plus j'augmente les "cassures" entre chaque.. d'ailleurs c'est la même chose pour l'autre solution..

je bute un peu donc si quelqu'un a une autre idée.. je suis preneur..

______________________________________________________________
\_______________________ Impossible is nothing _______________________/

Avatar de l’utilisateur
Alesk
Messages : 1928
Inscription : 13 Mars 2012 09:09
Localisation : Bordeaux - France
Contact :

Re: [WIP] Simu Course réaliste + Map + Volant

Message par Alesk » 04 Oct 2018 19:12

Alors...

Déjà il faudrait régler ce souci de jonctions entre les parcelles ;)

Ensuite, une autre solution pour les colliders... c'est compliqué !
Apparemment les terrains d'unity ont des colliders spécifiques plus optimisés, mais ça ne nous aide pas car là tu génères un terrain à ta sauce et je ne crois pas que l'on puisse générer juste un collider de terrain.

Il me vient une idée un peu plus tordue :
- tu fais une représentation spatiale de chaque parcelle, dans un octree par exemple, afin d'accéder facilement et rapidement à chaque triangle.
- une fois que tu as ça, en fonction de la trajectoire de ton véhicule, tu peux anticiper où il va entre en contact avec le terrain et alors générer/mettre à jour un mesh collider simple juste à cet endroit, où même juste positionner/orienter un mesh collider de base (comme un plan)

Bon, c'est du gros taf (mais en même temps, ça ne te fais pas peur) et l'avantage c'est de n'avoir qu'un seul petit mesh collider à gérer.

djulio74
Messages : 432
Inscription : 19 Déc 2009 22:55
Contact :

Re: [WIP] Simu Course réaliste + Map + Volant

Message par djulio74 » 04 Oct 2018 20:32

alors pour la jonction entre parcelles :
Actuellement je fais mes mesh, et après un RecalculateNormals(). Je pourrais, avant de faire mes parcelles, alors que j'ai encore tout mes tri/points dans une seule struct, Calculer par moi-même les normals pour chaque points, et m'en servir pour les assigner aux vertices correspondant de chaque parcelles. faut juste tester que ce soit pas trop long en calcul, même avec le multiThread. ou peut être récupérer juste les points limitrophe des parcelles pour leur calculer manuellement leur normal. Déjà ça, c'est gérable et ça réglerait les problème de discontinuité entre les parcelles.

pour ton idée, assez intéressante, je vais voir ce que sont ces octree que je ne connais point. ^^

sinon dans les sens tout aussi tordu serait de :
- faire un double de chacune des parcelles, et leur mettre un shader specifique : couleur de gris fonction de l'altitude.
- une cam en iso dirigé vers le bas en low res ( 16x16 par exemple), enfant de la voiture.
- une plan correspondant a la vue cam,
- me servir du renderTexture de la cam comme heigthMap pour positionner mon plan ( ses vertices).

ou même mieux :
- faire un double de chacune des parcelles, et leur mettre un shader specifique : alpha fonction de l'altitude, couleur fonction de la normal.
- une cam par roue, mais avec une reso de 1x1. a l'image d'un rayCast,
- l'unique pixel du renderTexture me donnerais l'altidude et l'orientation un plan basique sous chaque roue.

Mais tout ça risque d’être gourmand en RunTime.

je vais potasser un peu sur ces Octree, voir ce que je pourrais en tirer.

Merci bien Alesk! ;-) :super:

______________________________________________________________
\_______________________ Impossible is nothing _______________________/

Avatar de l’utilisateur
Alesk
Messages : 1928
Inscription : 13 Mars 2012 09:09
Localisation : Bordeaux - France
Contact :

Re: [WIP] Simu Course réaliste + Map + Volant

Message par Alesk » 04 Oct 2018 21:01

Ouep, pour les jonctions, faut calculer les normales à la main en tenant comptes des parcelles voisines.

Pour ton idée de heightmap, ça risque de manquer de précision pour la version "globale" et être trop lourd dans la version avec les caméras.
Et dans les deux cas, pas super précis.

Pour les octrees :

https://www.youtube.com/watch?v=m0guE7804to

https://github.com/Nition/UnityOctree

;)

djulio74
Messages : 432
Inscription : 19 Déc 2009 22:55
Contact :

Re: [WIP] Simu Course réaliste + Map + Volant

Message par djulio74 » 05 Oct 2018 07:50

oui les normales ça devrait aller, récupérer juste les points "partagé" entre parcelles, donc les limitrophe, leur calculer les normales et les modifier direct dans les mesh. ça ne devrait pas être trop long comme calcul. Un peu plus long a implémenter dans le code. ^^

juste histoire d'etre borné ( même si me penche sérieusement sur les octree):
dans mon premier cas avec cam, elle ne couvrirait qu'une zone de 5m x 5m par exemple, juste de quoi englober toute la surface sous la voiture. la Cam me sertirais une pseudo heightmap de la zone, non a partir du zéro absolu mais fonction de la position de la cam. l'alpha du rendu correspondrait a une altitude de -5m a 0m par rapport a la cam. donc une valeur de 0.0-1.0 convertie en -5.0-0.0, la précision serait pas si mauvaise nan?

si javais bien compris pour les octree, grossierment:
- je divise l'espace en 8 "box"
- je divise chaque "box" en 8 nouvelles "box", qui seront lieés a la "box" précédente.(genre enfant/parent)
- et ainsi de suite jusqu'a avoir un volume couvert pour chacune des dernières "box" qui me corresponde.
- j'assigne chaque tri a la box parmi les n dernières en fonction de sa position
- InGame, j'ai juste a retrouver dans quelle "box" je suis parmi les n dernières en descendant la pyramide étage par étage. ( dans laquelle des 8 première je suis, puis laquelle de ses 8 "enfant" et ainsi de suite.
- je retrouve donc les tri correspondant pour gérer mon collider.

Du coup si c'est bien ça, peut être meilleur en perf de faire un "quadtree" étant donné que la map est plutot une surface plate plutôt qu'un volume cubique. je divise donc la map 4 "Rect" au sol (y =0), et ainsi de suite 4 par 4 sur un plan au lieu de 8 par 8 dans un volume. Du coup au lieu de n "box" dans le volume, je n'ai que sqrt(n) "Rect" sur plan pour la même résolution. Je n’utilise du coup plus que des vector2 pour les position ( x et z) au lieu de vector3..

Je continue de potasser.. :super:

______________________________________________________________
\_______________________ Impossible is nothing _______________________/

Avatar de l’utilisateur
Alesk
Messages : 1928
Inscription : 13 Mars 2012 09:09
Localisation : Bordeaux - France
Contact :

Re: [WIP] Simu Course réaliste + Map + Volant

Message par Alesk » 05 Oct 2018 08:23

Oui tu as tout bien compris, et oui le quadtree serait suffisant dans ce cas précis ;)

Répondre

Revenir vers « Vos créations, jeux, démos... »