[C#] GLWireframe

Cette section est destinée aux scripts partagés par la communauté. Chaque post est destiné à un script. Suivez bien les recommandations.
Avatar de l’utilisateur
axel
Messages : 1924
Inscription : 26 Avr 2012 09:10
Localisation : Lille - Dunkerque
Contact :

Re: [C#] GLWireframe

Message par axel » 22 Fév 2013 12:03

J'ai également testé cette nouvelle version.
Effectivement comme tu le disais avant le first baking est plus efficace avec beaucoup d'objet à peu de face, que peu d'objet avec plus de face.
Sur mes 7 objets comprenant en tout 22 000 sommets (29 891 triangles) voici les stats:

En remove edge true:
first baking : 70365 ms (contre 4500ms pour Max qui à 1 fois et demi plus de faces que moi)
edges : 42173
fps : 39 FPS

En remove edge false:
first baking : 49262 ms (quand même...)
edges : 89673
fps : 24 FPS


Le nombre de FPS est quand même bien amélioré, et la fonction perform culling est très efficace. Le gros point noir reste ce temps de traitement initial.

Sinon sur cette nouvelle version je n'arrive plus à masquer la géométrie pour n'afficher que le filaire. J'avais rajouté un:

Code : Tout sélectionner

mf[i].GetComponent<MeshRenderer>().enabled=false
dans la boucle for de ta fonction "GetSetMeshes ()", mais désormais le filaire n'apparait que si le mesh est visible...

Avatar de l’utilisateur
axel
Messages : 1924
Inscription : 26 Avr 2012 09:10
Localisation : Lille - Dunkerque
Contact :

Re: [C#] GLWireframe

Message par axel » 22 Fév 2013 12:08

Je n'avais pas encore tester ton script avec un build, une fois compilé:
- Remove edge sur true, first baking : 50428 ms
- Remove edge sur false, first baking : 39895 ms

Il va falloir que je teste sur toute la scène juste pour voir :)

Avatar de l’utilisateur
axel
Messages : 1924
Inscription : 26 Avr 2012 09:10
Localisation : Lille - Dunkerque
Contact :

Re: [C#] GLWireframe

Message par axel » 22 Fév 2013 12:46

J'ai voulu faire d'autres tests, et je suis tombé sur un truc bizarre.

J'ai fais une scène avec des cubes et des sphères. Et lorsque j’exécute la scène, je vois le filaire qui ne correspond pas à certains meshes.
En y regardant de plus près je me suis aperçu que cela ne concerne que les cubes que j'ais mis en statiques et qu'ensuite j'ai déplacés, tournés et modifiés l'échelle.
Du coup j'ai placé 8 sphères dans un gameobject, mis le tout en statique, et modifié les transformations, et là j'ai eu ça.
Image

avec ces stats:
first baking : 170765 ms
edges : 121390 !!!

si j’enlève le "statique" des objets, j'obtiens:
first baking : 1277 ms
edges : 11230 (10 fois moins)

Avatar de l’utilisateur
artemisart
Messages : 1893
Inscription : 21 Juin 2011 19:51
Localisation : Centre
Contact :

Re: [C#] GLWireframe

Message par artemisart » 23 Fév 2013 12:06

axel a écrit :Sinon sur cette nouvelle version je n'arrive plus à masquer la géométrie pour n'afficher que le filaire. J'avais rajouté un:

Code : Tout sélectionner

mf[i].GetComponent<MeshRenderer>().enabled=false
dans la boucle for de ta fonction "GetSetMeshes ()", mais désormais le filaire n'apparait que si le mesh est visible...
Oui, vu que le renderer n'est plus visible la fonction Render ne s’exécute plus (si t'enlève le performCulling ça devrait marcher).

Sinon (si c'est possible) tu peux m'envoyer en package la scène où tu as 40-70s de first baking ? (en mp)

Très étrange pour le coup des go statiques, tu as modifié le transform en editor ou ingame ?

Avatar de l’utilisateur
artemisart
Messages : 1893
Inscription : 21 Juin 2011 19:51
Localisation : Centre
Contact :

Re: [C#] GLWireframe

Message par artemisart » 23 Fév 2013 13:11

Update du script :
- Les wires des meshes qui ont bougés ne sont plus bakés s'ils ne sont pas visibles.
- J'ai mis en cache l'array de triangle au lieu d'accéder à chaque fois directement à celui ci... perf du baking x1.5-2 !
- Je stocke les edges en double dans une liste de boolean, pour ne pas les afficher sur les meshes qui bougent -> perf du rendu x2 sur les meshes dynamiques !
- Utilisation de linq pour transformer les vertices en coordonnées globales, aucun changement de perf mais c'est plus propre ^^.

Je mets à jour le premier post dans 2s.

Avatar de l’utilisateur
artemisart
Messages : 1893
Inscription : 21 Juin 2011 19:51
Localisation : Centre
Contact :

Re: [C#] GLWireframe

Message par artemisart » 23 Fév 2013 14:08

Le script et la description sont à jour ;) .

Avatar de l’utilisateur
Max
Newser
Newser
Messages : 7913
Inscription : 30 Juil 2011 13:57

Re: [C#] GLWireframe

Message par Max » 23 Fév 2013 20:27

Tiens, cela me faisais penser à un truc cette histoire de Wireframe sur les objets. (bon, je sais, tu va dire que je me réveille à la fumé des cierges ...)

C'est pas aussi perfectionné que ton code, mais en passant par les MeshTopology, on arrive à facilement faire basculer un rendu de mesh en WF,
genre code comme ça: (en 'point' aussi par exemple si on veut, on à même les shadows)

Code : Tout sélectionner

		Mesh mesh;
		
		mesh = GetComponent<MeshFilter>().mesh;		
		for(int id=0; id<mesh.subMeshCount; id++)
		{
			int[] indices = mesh.GetIndices(id);
			mesh.SetIndices (indices, MeshTopology.LineStrip, id);
		}
ça donne ça
Image

A creuser, ça peut être un autre type de piste pour ce genre de tools ;)
Pas d'aide par MP, le forum est là pour ça.
En cas de doute sur les bonnes pratiques à adopter sur le forum, consulter la Charte et sa FAQ

Avatar de l’utilisateur
artemisart
Messages : 1893
Inscription : 21 Juin 2011 19:51
Localisation : Centre
Contact :

Re: [C#] GLWireframe

Message par artemisart » 23 Fév 2013 20:33

C'est vrai, j'y ai pensé aussi mais j'aimerais bien garder la compatibilité avec la 3.5 donc...

Un retour sur les perfs du nouveau code sinon ?

Avatar de l’utilisateur
Franck
Bricoleur
Bricoleur
Messages : 2885
Inscription : 08 Jan 2011 18:43
Localisation : Tours

Re: [C#] GLWireframe

Message par Franck » 23 Fév 2013 20:34

Vous étes des grosses bétes les gars 8-)
Dés fois j'bug, dés fois j'bug pas.

Avatar de l’utilisateur
Max
Newser
Newser
Messages : 7913
Inscription : 30 Juil 2011 13:57

Re: [C#] GLWireframe

Message par Max » 23 Fév 2013 21:20

Franck a écrit :Vous étes des grosses bétes les gars 8-)
mais non, mais non, juste des bricoleurs un peu illuminés :lol:
artemisart a écrit :C'est vrai, j'y ai pensé aussi mais j'aimerais bien garder la compatibilité avec la 3.5 donc...
arf, la 3.5, pas pensé. ( T'as pensé au render DX11 ?) :mrgreen:
artemisart a écrit :Un retour sur les perfs du nouveau code sinon ?
Oups, j'ai oublié de mettre les valeurs ( x'cuse, occupé au bouche à bouche à mon cochon dinde)
C'est mieux, en tous les cas niveau first baking, puisque je suis passé de 4500 à 1870 ms, donc il n'y a pas photo, ça évolue dans le bon sens
;)
Pas d'aide par MP, le forum est là pour ça.
En cas de doute sur les bonnes pratiques à adopter sur le forum, consulter la Charte et sa FAQ

Répondre

Revenir vers « Scripts »