Raydium 3D Game Engine

Official forum for everything about Raydium, ManiaDrive, MeMak, ...
It is currently Fri Mar 29, 2024 7:34 am

All times are UTC




Post new topic Reply to topic  [ 25 posts ]  Go to page 1, 2  Next
Author Message
PostPosted: Wed Aug 27, 2008 10:15 pm 
Offline

Joined: Mon Aug 25, 2008 1:08 pm
Posts: 67
a test6 , je remarque un lag assez pousé pour la cause, quand on fait apparaitre des caisses (une trentaine) les fps passent a 200 (alors que normalement je fais du 1000fps) et avec 50 caisses, les fps sont a 2

passer de 1000 a 2 avec 50 caisses, c'est beacoup , nan?

_________________
Image


Top
 Profile  
 
 Post subject:
PostPosted: Tue Sep 02, 2008 8:07 am 
Offline

Joined: Sun Oct 09, 2005 10:46 pm
Posts: 759
Bonjour,

J'ai a peu pres le meme comportement ici.

Les tests d'ode seuls ne semblent par avoir ce probleme.

Bonne journée.
Ouille.


Top
 Profile  
 
 Post subject:
PostPosted: Tue Sep 02, 2008 7:28 pm 
Offline
User avatar

Joined: Sun Mar 16, 2003 2:53 am
Posts: 2591
Location: gnniiiii (Scrat)
C'est tout à fait normal. Le moteur physique doit ici multiplier les tests de collisions de manière exponentielle. Il n'y a pas si longtemps, une dizaine de caisse suffisaient à écrouler test6.

Pour éviter que le framerate ne s'écroule avec "si peu" d'objets, voilà quelques solutions :

- Disposer d'une accélération matérielle (carte PhysX ou même son "émulation" dans les GPU de Nvidia). ODE ne supporte pas cette option, et de toutes façons, ça ne colle pas trop à l'esprit de Raydium.

- Isoler les groupes d'objets pour faciliter le travail des AABB. Il s'agit bien ici de la seule solution viable pour une application Raydium à l'heure actuelle. RayODE travaille en "deux temps" à chaque itération : une recherche des collisions entres objets (à l'aide de boite englobantes), puis pour chaque collision trouvée, une recherche des éléments de ces objets qui sont concernés. C'est cette seconde phase qui est très gourmande en CPU. Or dans test6, les caisses sont spwanées dans l'objet GLOBAL, donc RayODE doit réaliser tous les tests possible entre chaque boite et les autres, et chaque boite et le sol. A contrario, si on a 10 voitures composées de 5 éléments (chacune), soit 50 éléments aussi, le framerate va à peine souffrir (sauf si toutes les voitures entrent en collision entre elles). C'est donc surtout la construction de la scène physique qui influe sur la lourdeur des calculs d'ODE. Donc soyez malins lors de la déclaration de votre scène, et évitez les objets trop grands, avec des éléments éparpillés (boite englobante inefficace) et/ou les objets "colliding" (voir raydium_ode_object_colliding()), comme l'est "GLOBAL".

- Réduire la précision de la physique en jouant sur le timestep et la fréquence de RayODE.

- Jouer avec l'auto-disable. RayODE ne supporte pas actuellement cette fonctionnalité d'ODE, mais elle peut être intégrée assez facilement et rapidement. Elle consiste à exclure des calculs physiques les objets immobiles depuis un certain temps. Ces objets (ou éléments ?) sont réactivés lors d'une nouvelle collision avec un élément "vivant". Cette technique peut être ensuite étendue à ODENet pour ne plus envoyer sur le réseau des informations sur les éléments "dormants" de la scène, et ainsi gagner en bande passante.


Top
 Profile  
 
 Post subject:
PostPosted: Wed Sep 03, 2008 11:15 am 
Offline

Joined: Mon Aug 25, 2008 1:08 pm
Posts: 67
petit probleme: pour memak en reseau, vu kle nombres d'objets qu'il risque d'y avoir sda serait embetant de pouvoir y jouer seulement avec un C2D et une 9600gt


enfin perso, sa me derange pas trop, mais tout le monde n'a pas un gros buget informatique

_________________
Image


Top
 Profile  
 
 Post subject:
PostPosted: Wed Sep 03, 2008 12:58 pm 
Offline

Joined: Sun Oct 09, 2005 10:46 pm
Posts: 759
Bonjour,

Effectivement en activant l'auto disable on passe de 6fps à 30fps (a peu pres).

Par contre cela risque de corrompre une partie de raydium.

- Il faut au minimum reactiver chaque objet si necessaire dans l'ensemble des primitives d'ajout de force entre autre.

- L'affichage en mode debug gère deja les corps desactivés.

Quelques autre effets de bords à prévoir xfennec ?

Bonne journée
Jacques.


Top
 Profile  
 
 Post subject:
PostPosted: Thu Sep 04, 2008 8:12 pm 
Offline
User avatar

Joined: Sun Mar 16, 2003 2:53 am
Posts: 2591
Location: gnniiiii (Scrat)
Difficile à imaginer ... A priori, je ne vois pas de gros problème à prévoir, mais il faut s'attendre a devoir ajuster pas mal de petits paramètres, et en particulier les seuils limites (linéaires, angulaires, steps, ...) pour s'ajuster au mieux aux applications typiques de Raydium.

Il faut aussi se poser des questions à propos des mouvements et rotations des éléments (raydium_ode_element_move*() par exemple, doit probablement réactiver l'élément si il était désactivé)

A vrai dire, il faut faire un tour rapide de tout RayODE pour essayer de détecter les éventuels effets de l'auto-disable.

Accessoirement, pour des raisons évidentes d'invariance, cette fonctionnalité doit être désactivée par défaut, en tout cas pour l'instant.


Top
 Profile  
 
 Post subject:
PostPosted: Fri Sep 05, 2008 4:15 pm 
Offline

Joined: Mon Aug 25, 2008 1:08 pm
Posts: 67
peut etre creer un systeme (je sais aps si c'est possible) de "ignoarance) par exemple pour des elements de decor, mais pas dans le decord, par exemple, des poteau ou autes, les desactiet tout le temps

_________________
Image


Top
 Profile  
 
 Post subject:
PostPosted: Fri Sep 05, 2008 4:26 pm 
Offline

Joined: Sun Oct 09, 2005 10:46 pm
Posts: 759
Bonjour,

Les objets désactivés se reactivent tout seul lors d'une collision.

Par contre il est possible de filtrer les collision dans la routine de collision. On peut meme les creer dans un espace (objet) a part pour gagner du temps et ignorer les collision entre ces deux espaces.

C'est donc possible.

Bonne journée.
Ouille


Top
 Profile  
 
 Post subject:
PostPosted: Fri Sep 05, 2008 8:12 pm 
Offline

Joined: Sun Oct 09, 2005 10:46 pm
Posts: 759
Bonjour,

En ajoutant l'auto disable à raydium on arrive a ceci pour les fps en fonction du nombre de boites deposées.

Image

Si ce n'est pas clair je commente un peu.

En utilisant test6 et en ajoutant des boites regulièrements.
2 tests en regardant la scene et en ne la regardant pas (pour voir l'influence du rendu).

Sans rendu les fps montent plus haut vers 400 pour 10 boites.
Avec rendu on est à 210. Ce qui semble tout a fait normal.

Sans l'autodisable on passe en dessous de 50fps à 50 boites.

Avec on reste au dessus jusqu'a 60 guerre plus.

La modif dans rayode etant assez importante il faut que je teste un peu tout les autres prog avant de faire un commit.

Bonne journée
Ouille


Top
 Profile  
 
 Post subject:
PostPosted: Sat Sep 06, 2008 8:27 am 
Offline

Joined: Mon Aug 25, 2008 1:08 pm
Posts: 67
merci ouille pour ces test ;)

_________________
Image


Top
 Profile  
 
PostPosted: Sun Sep 07, 2008 5:07 pm 
Offline

Joined: Sun Oct 09, 2005 10:46 pm
Posts: 759
Bonjour,

Le commit est fait. J'espère qu'il ne casse rien. :?
J'ai mis a jour les exemples, je les ai testé rien à signaler. :)

Par contre toutes les primitives addforces, torques de RayOde ... reactivent les elements inconditionnellement.

Attention toute autre appli qui utilise directement un dbodyxxx ne marchera pas avec l'autodisable activé.
Il serait pourtant bien qu'a terme il soit activé par defaut.


J'ai essayé de l'utiliser dans le netcode, mais je fonctionnement est etrange :?: , les elements disparaissent reaparaissent :roll: ... Bizarre.

Je fouillerais un peu plus à l'occase.

Bon tests et si il y a trop de probleme un revert est encore possible.

Bonne journée
Ouille


Top
 Profile  
 
PostPosted: Sun Sep 07, 2008 10:01 pm 
Offline
User avatar

Joined: Sun Mar 16, 2003 2:53 am
Posts: 2591
Location: gnniiiii (Scrat)
Bien, après une séance de nettoyage de code un peu fastidieuse :) , j'ai souhaité tester l'impact de l'autodisable sur les caisses de test6. Et malheureusement, il est assez faible. Et pour cause, le mode de rendu debug semble montrer que les éléments ne passent jamais en disabled.

C'est assez étrange, et je pense qu'on se trouve face un problème de version d'ODE. Pour Raydium Linux, nous sommes encore à la version 0.7 d'ODE, et j'imagine que les versions win32 et OSX utilisent des versions plus récentes. Peut-être les seuils par défaut (*) ne sont pas les mêmes pour ces différentes versions ? Ou la 0.7 aurait peut-être quelques bugs à ce niveau ?

Je vais tenter de prendre un peu de temps prochainement pour jeter un œil à ça.

(*) : J'ai finalement peu lu le détail de ton commit ouille, tu utilises bien les paramètres par défaut d'ODE ?

PS : Merci pour avoir amorcé le boulot sur ce sujet ouille, cette histoire d'autodisable trainait dans les cartons depuis un sacré bout de temps ! :)


Top
 Profile  
 
PostPosted: Mon Sep 08, 2008 7:41 am 
Offline

Joined: Sun Oct 09, 2005 10:46 pm
Posts: 759
Bonjour,

J'essaye de garder raydium windows synchro avec raydium linux.

Nous avions pas mal hesité avant de passer a la 0.7, je travaille toujours avec cette version (sous raydium en tout cas).

Les ajouts des dernières versions ne sont pas enormes. Mais surtout la 0.10 semble poser quelques problemes. Je pense qu'il faut attendre avant de faire l'upgrade.

J'utilise les parametres par defaut d'ode. Ici les caisses se desactivent bien toute seule (en mode debug l'info concernant la boite passe en noir).

Le gain en temps est effectivement limité.

En fait seul le solveur est impacté. Les collisions continuent d'etre testées avec l'ensemble des objets.

Je ferais des tests plus poussés.

Bonne journée.
Ouille

P.S. : Desolé pour le commit, je l'ai testé, corrigé (il fallait incorporer le nettoyage du code de vincente), mais j'ai complètement oublié les problèmes d'indentation.


Top
 Profile  
 
PostPosted: Mon Sep 08, 2008 5:36 pm 
Offline
User avatar

Joined: Sun Mar 16, 2003 2:53 am
Posts: 2591
Location: gnniiiii (Scrat)
C'est parfait que les versions d'ODE soit les mêmes. Je n'étais pas certain que ce soit toujours le cas vu les évolutions du SDK. A propos de l'auto-disable, je vais aussi fouiller de mon coté, tout ça me semble de plus en plus étrange, du coup.

PS : ODE est compilé en simple ou double précision dans le SDK win32 ?

PS2 : Pour le commit, il n'y a pas de problème. Ce n'est pas ton premier (auquel cas j'aurais eu un coup de panique) :)
"Précipitation est mère de trucs chiants !"


Top
 Profile  
 
PostPosted: Mon Sep 08, 2008 6:12 pm 
Offline

Joined: Sun Oct 09, 2005 10:46 pm
Posts: 759
Bonjour,


:( Après vérification j'ai fais les tests avec une autre version d'ode la 0.9. Il va falloir que je nettoye un peu tout cela.

Il faut que je vérifie que ce n'est pas la version packagée dans le win32 sdk. :?

Dans tout les cas il est possible d'upgrader raydium avec ode 0.9, par contre ne pas aller plus loin (la .10 semble avoir quelques defauts).

Ode dans le win32 sdk utilise la simple précision (dSingle) il me semble que ca a toujours ete la cas dans raydium (hope so) :shock:

Quote:
"Précipitation est mère de trucs chiants !"
, peux tu citer tes sources s.t.p. ?

Bonne journée
Ouille


Top
 Profile  
 
Display posts from previous:  Sort by  
Post new topic Reply to topic  [ 25 posts ]  Go to page 1, 2  Next

All times are UTC


Who is online

Users browsing this forum: No registered users and 32 guests


You cannot post new topics in this forum
You cannot reply to topics in this forum
You cannot edit your posts in this forum
You cannot delete your posts in this forum
You cannot post attachments in this forum

Search for:
Jump to:  
cron
Powered by phpBB® Forum Software © phpBB Group