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

djulio74
Messages : 682
Inscription : 19 Déc 2009 22:55

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

Message par djulio74 » 12 Nov 2018 08:50

au plaisir de t'avoir aidé :super:
qu'entend tu pas les job? tu veux dire les Thread?

______________________________________________________________
\_______________________ Impossible is nothing _______________________/

Farstone
Messages : 187
Inscription : 04 Déc 2016 09:38

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

Message par Farstone » 12 Nov 2018 10:41

Le "Unity Job System". C'est un système qui a été ajouté à la sortie de Unity 2017~ en même temps que l'ECS, ça permet d'utiliser les threads sans les problèmes qui vont généralement avec (thread pool, race condition, dépendance), un très bon ajout au moteur.

L'autre spécificité qui n'est pas des moindre c'est la possibilité de manipuler les composant Unity dans t'es thread (ou plutôt t'es Jobs), ce qui n'est pas possible avec l'utilisation des thread c# classique, par exemple tu peux appliquer des transform, tirer des raycast et autres en parallèle. La communauté attendait ça depuis plusieurs années.

Tu devrais te renseigner dessus, c'est peux être ce qui va te pousser à enfin upgrade à une version plus récente, comme j'ai cru comprendre que tu aimais la génération procédural en temps réel. Non seulement ça rend le multithread "safe" mais ça facilite le débugage de ton code en plus de l'aéré, hésite pas si tu a des questions un peu plus poussé dessus.

Juste une précision, il est encore considéré en développement du fait que Unity ajoute continuellement le support d'autres composant, je sait qu'il supporte déjà les transform, les raycast, raycasthit, et quelques truc lié à l'IA. L'API est très stable et ne change pas vraiment (juste des ajout, pas de changement sur l'api de base) donc on peux l'utiliser sans craindre de voir son code obsolète :-D .

Avatar de l’utilisateur
Liven
Messages : 268
Inscription : 30 Nov 2017 01:48

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

Message par Liven » 12 Nov 2018 13:17

Twiixy a écrit :
12 Nov 2018 10:41
Le "Unity Job System". C'est un système qui a été ajouté à la sortie de Unity 2017~ en même temps que l'ECS, ça permet d'utiliser les threads sans les problèmes qui vont généralement avec (thread pool, race condition, dépendance), un très bon ajout au moteur.

L'autre spécificité qui n'est pas des moindre c'est la possibilité de manipuler les composant Unity dans t'es thread (ou plutôt t'es Jobs), ce qui n'est pas possible avec l'utilisation des thread c# classique, par exemple tu peux appliquer des transform, tirer des raycast et autres en parallèle. La communauté attendait ça depuis plusieurs années.

Tu devrais te renseigner dessus, c'est peux être ce qui va te pousser à enfin upgrade à une version plus récente, comme j'ai cru comprendre que tu aimais la génération procédural en temps réel. Non seulement ça rend le multithread "safe" mais ça facilite le débugage de ton code en plus de l'aéré, hésite pas si tu a des questions un peu plus poussé dessus.

Juste une précision, il est encore considéré en développement du fait que Unity ajoute continuellement le support d'autres composant, je sait qu'il supporte déjà les transform, les raycast, raycasthit, et quelques truc lié à l'IA. L'API est très stable et ne change pas vraiment (juste des ajout, pas de changement sur l'api de base) donc on peux l'utiliser sans craindre de voir son code obsolète :-D .
Tu aurais des conseils sur des tutos ou documentation clair sur le sujet car j'ai essayé plusieurs fois de m'y penché, mais les patern m'ont toujours paru un peu obscures jusqu'à maintenant.
De plus comme tous les composants ne sont pas encore présents, est ce que ça se mixe bien avec le c# tradi?
Utilise tu aussi l'ECS? (et même questions)

Farstone
Messages : 187
Inscription : 04 Déc 2016 09:38

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

Message par Farstone » 12 Nov 2018 14:13

Salut Liven, je te conseille de regarder les unite talk et autres convention de Unity sur le sujet, sinon tu a la documentation officiel de Unity, ils ont déjà fait pas mal de doc dessus.

Sinon oui, le Job System se mixte très bien en POO ou en ECS, ça serrais un peu long a expliquer là d'autant que je n'ai plus l'api exact en tête mais c'est très rapide à mettre en place une fois que tu à compris. Le seul inconvénient c'est qu'ont doit utiliser des arrays spéciaux (NativeArray, TransformAccessArray) pour l'envoie des variables dont ont veux récupérer la valeur une fois le job effectué.
Alors si tu a une list et que tu fait un ToArray il faudra aussi récupérer l'array à la fin du job pour faire un ToList et actualiser la list principal.

Donc y'a quand même un peu de micro-optimisation à faire derrière si ont veux utiliser une list vue qu'ont traite souvent avec des milliers d'objets. Cependant Unity propose une NativeList mais qui ne peux être utiliser que dans 1 thread parallèle (ce qui potentiellement réduira la vitesse des proc multicoeurs).
Sa parait compliqué mais on parle seulement de 1 ou 2ms sur le main thread si on optimise pas, donc ça reste plus rapide que faire le calcul des jobs sur le main thread :lol: .

Sinon je n'utilise pas l'ECS, j'aime bien la programmation orienté objet et je pense que l'ECS est destiné à des jeux avec beaucoup d'entité qui voudrait garder un gameplay fluide, pour un jeu de stratégie en temps réel avec des milliers d'unité par exemple (hâte de voir ça).

djulio74
Messages : 682
Inscription : 19 Déc 2009 22:55

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

Message par djulio74 » 28 Nov 2018 12:44

Merci à vous deux pour tout ces renseignement, que j'ai potassé avec attention. :super:
Cela dit je suis sur un autre coup : Les Compute Shader, qui permettent d'utiliser le GPU pour les calculs par exemple.
Et après quelques tests, je serait presque sur, pour pas dire certains, que ce sera plus rapide ( et de loin ) que le Unity Job Systeme ou autres utilisation des threads du CPU.

Les test en question découle d'un post posté par un autre membre (ici) et qui dans mon cas consiste à
- avoir une sphere de 25159 vertex.
- avoir 1550 point (Vector3) choisis aléatoirement parmis les vertex du mesh , assigner à chaque point une couleur
- rechercher, pour chacun des vertex du mesh, lequel de 1550 points lui est le plus proche, et lui assigner sa couleur

Le différenciation CPU / GPU se fait juste sur la dernière étape ce qui fais quand même quasi 39 millions de calculs et condition.(if)

Le temps mis pour cette seule étape :
-Calcul avec CPU : environ 2.45s
-Calcul avec GPU : environ 0.01s
==> soit environ 240 fois plus rapide!! :|

De plus, les compute shader peuvent avoir un partage de donnée inter thread pour éviter les conflit d'écriture sur la même variable par exemple.

Si j'arrive a utiliser ça pour la génération de la Map, je serais refais!! ::d ::d

EDIT :
Suite a la suite de mes test, le gain est même largement suppérieur!!
au début je ne faisait qu'une fois le calcul pour chacun (CPU - GPU), et lançait autant de fois que voulu le playMode et faisais les calcul a la main, en faisant la moyenne de chaque résultat. Cette fois j'ai plutôt lancé un certain nombre d'itération via script : 1000 pour le GPU, 10 pour le CPU. que 10 car 2.5s par itération..
et le résultat est là, avec la solicitude en continue du GPU avec le script je tombe à :
- temps CPU : 2.4s
- temps GPU : 0.0024s
==> soit environ 1000 fois plus rapide!! :|

Ce qui semble logique car le GPU utilise 1024 threads en fait pour le shaderModel 5.0 ( 768 pour le SM 4.0)
je partage un petit UnityPackage pour ceux qui veulent tester

______________________________________________________________
\_______________________ Impossible is nothing _______________________/

djulio74
Messages : 682
Inscription : 19 Déc 2009 22:55

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

Message par djulio74 » 29 Déc 2019 12:36

Salut a tous et bonne fêtes de fin d'année!!
Comme à mon habitude, après un temps d'absence je reviens aux sources ici !^^

J'ai pas grand chose à montrer pour l'instant mais le fait de relancer ce sujet me motivera a continuer. ;)
Depuis quelques jours je me suis remis à la création de ma map générée aléatoirement et j'aborde le problème sous un angle différent, et bien que tout ne soit pas terminé,les résultats sont encourageant.
J'étais a l'époque à environ 100K tri/seconde à une étape donnée de la génération, et aujourd'hui à 2500K tri/seconde, et encore sans utilisation de multithread ou compute shader pour l'instant ^^

Je pense pouvoir en montrer d'avantage d'ici quelques jours. ;)

______________________________________________________________
\_______________________ Impossible is nothing _______________________/

Avatar de l’utilisateur
Max
Messages : 8763
Inscription : 30 Juil 2011 13:57
Contact :

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

Message par Max » 29 Déc 2019 12:50

Bonjour,

bonne fêtes de fin d'année à toi aussi, c'est sympa de te revoir dans le coin ;)
djulio74 a écrit :
29 Déc 2019 12:36
Je pense pouvoir en montrer d'avantage d'ici quelques jours. ;)
Intéressant... Alors on s'assoit, et on attend :mrgreen:
Image
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
Alesk
Messages : 2303
Inscription : 13 Mars 2012 09:09
Localisation : Bordeaux - France
Contact :

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

Message par Alesk » 29 Déc 2019 18:17

Yay ! \o/

djulio74
Messages : 682
Inscription : 19 Déc 2009 22:55

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

Message par djulio74 » 18 Jan 2020 18:19

Merci pour vos retours!! ;)
Bon j'ai trainé un peu histoire de faire durer le suspens (ou plutôt m'en sortir pour avoir une génération pas trop lente ^^)
et puis j'ai découvert qu'avec les mesh générés, on peut passer outre la limite des 65K vertice par mesh! ;)

Alors voilà ou j'en suis :
- ile de 40km de diamètre,
- Génération de 3,5M à 4M de triangles, soit presque 2M de vertex,
- Elévation réaliste à mon gout de l'ile ( même si parfois des sommets top haut),
- Mesh unique créé avec calcul des normales..
-> Le tout en à peine plus d'une seconde en standalone (1.6s sous unity)...

Et oui, j'en suis pour tout ça à plus de 3,3Mtri/seconde! :-D :-D (loin de mes 120Ktri/s précédent)

Donc j'ai utilisé les multithreading et les compute shader pour faire les lourds calculs.

Si certains sont intéressés par la démarche adopté, je peut faire un petit post explicatif des étapes.
Promis pour demain je posterai des image et aussi un petit standAlone en zip pour ceux qui voudraient tester.

Allez hop j'y retourne!

______________________________________________________________
\_______________________ Impossible is nothing _______________________/

Avatar de l’utilisateur
Max
Messages : 8763
Inscription : 30 Juil 2011 13:57
Contact :

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

Message par Max » 18 Jan 2020 19:10

Salut,
djulio74 a écrit :
18 Jan 2020 18:19
Donc j'ai utilisé les multithreading et les compute shader pour faire les lourds calculs.

Si certains sont intéressés par la démarche adopté, je peut faire un petit post explicatif des étapes.
Moi ça m’intéresse, donc je suis preneur :intello:
Image
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 « Vos créations, jeux, démos... »