oZone3D.Net Forums
September 11, 2010, 03:12:24 AM *
Welcome, Guest. Please login or register.
Did you miss your activation email?

Login with username, password and session length
News: Corsair AX1200 PSU And Two Highly Stressed GTX 480 in SLI (FurMark and EVGA OC Scanner)
 
   Home   Help Login Register  
Pages: [1]
  Print  
Author Topic: [ACCEPTED] "Particules 3D" : instances multiples d'un objet  (Read 3999 times)
0 Members and 1 Guest are viewing this topic.
shadow
Capo Regime
***
Posts: 353



WWW
« on: February 15, 2008, 11:44:45 AM »

Est-ce qu'il serait envisageable de créer un système de gestion de  "particules 3D" ? L'idée serait de créer plusieurs instances d'un objet 3D, gérées un peu comme les particules classiques. C'est pas vraiment le principe habituel, mais pour faire des explosions avec débris, des forêts  ou des bancs de poissons, ce serait très, très, très pratique.
« Last Edit: February 15, 2008, 02:26:45 PM by JeGX » Logged

3D, photos panoramiques : http://www.shadows.fr
Steph3D
Capo Regime
***
Posts: 399


« Reply #1 on: February 15, 2008, 12:10:59 PM »

Ouais, ça, je l'aurais demandé un jour  mrgreen

Enfin, on peut déjà le faire facilement en LUA, les particules 3D, ce n’est pas dur à faire des truc que se ballade à partir d'une sources, sauf si tu veux mettre des collisions complexes. Encor plus simple pour poser des arbres aléatoire, meme sur un decor accidenté, ça je vais le faire .
Ce qui a, c'est que je sais pas se que ça donne en perf par rapport à une vraie fonction implémentée. Sur mon test, j'avais plus de 500 objets que se baladé avant que mes FPS passe en dessous de 60, mais je serais jamais si c'est le LUA ou le nombres de polys  mrgreen

Pour les bans de poissons, tu peu aussi faire se balladé un poisson master, soit avec un path (plus simple) soit programmer, et les poissons esclaves le suivront avec  differents parametres de position interpolé plus ou moins fort. L'idéal et de leur poser aussi une repulsion de distance entre eux, pour qu'il se touche pas, notament avec GetDistanceBetween.

Pour les explosions, ça serait plutôt cool une fonction qui détache les polys en morceaux  Cool
Logged
shadow
Capo Regime
***
Posts: 353



WWW
« Reply #2 on: February 15, 2008, 12:25:28 PM »

Quote
Pour les explosions, ça serait plutôt cool une fonction qui détache les polys en morceaux
Ca s'appelle un moteur physique, et PhysX le fait, je pense.  mrgreen
Faut juste l'implémenter dans Demoniak...
Après on pourra faire ça fingers in the nose dans Demoniak :
http://www.ageia.com/physx/videos.html <-Cellfactor, 4eme vidéo

Oui... bon, presque ! Cool

Quote
Enfin, on peut déjà le faire facilement en LUA, les particules 3D, ce n’est pas dur à faire des truc que se ballade à partir d'une sources, sauf si tu veux mettre des collisions complexes. Encor plus simple pour poser des arbres aléatoire, meme sur un decor accidenté, ça je vais le faire .
On peut faire plein de choses en LUA, mais quand on débute, c'est pas évident... Si tu veux nous faire un ptit tuto n'hésite pas !

Quote
Pour les bans de poissons, tu peu aussi faire se balladé un poisson master, soit avec un path (plus simple) soit programmer, et les poissons esclaves le suivront avec  differents parametres de position interpolé plus ou moins fort. L'idéal et de leur poser aussi une repulsion de distance entre eux, pour qu'il se touche pas, notament avec GetDistanceBetween.
Ca devient presque de l'IA, là... Va falloir que je teste ça, ça peut être intéressant.
Logged

3D, photos panoramiques : http://www.shadows.fr
JeGX
Global Moderator
Capo Crimine
*****
Posts: 2171



WWW
« Reply #3 on: February 15, 2008, 02:26:31 PM »

Il faut juste que j'améliore un peu le support de l'instancing et ensuite avec LUA vous faites ce que vous voulez  punk
Logged

Steph3D
Capo Regime
***
Posts: 399


« Reply #4 on: February 15, 2008, 02:33:22 PM »

Ben moi au aussi je débute, mais j'avance très vite, car je suis maso.  mrgreen

Pour faire tes particules, faut d'abord faire une boucle qui génère plein de clones, pense à utiliser la fonction math.random () à leur création.

Il faut aussi faire une boucle à chaque frame qui lis tous les objets enfants (utilise le gizmo comme layer, c'est bien plus simple) et à chaque objet, tu leur mets une incrémentation de trajectoire, le truc de noob toujours efficace, les cos et sin sur les positions ;-)

Pour créer les objets, il te faut utilise hyp.clone, et aussi remove pour les supprimer à la volée.

La premierre chose à faire, c'est d'étudier le Code Sample 41

Ensuite tu fais, la même chose, mais en les posant dans un gizmo, puis tu tentes de les animer avec une boucle.

Une fois maitrisé, pour aller plus loin, il te faut donner une mémoire indépendante à chaque particule pour pouvoir leur donner un comportement indépendant, la il te faut utiliser ma technique des contenaires http://www.ozone3d.net/smf/index.php/topic,1248.0.html

une fois que ta captée tout ça, tu peu faire déjà beaucoup de choses  Cool



Il faut juste que j'améliore un peu le support de l'instancing et ensuite avec LUA vous faites ce que vous voulez  punk

Ouias, le vrais instancing geré par les Cg assez recente en hard, pourrais foutre plein d'herbes partout  Cool
Logged
JeGX
Global Moderator
Capo Crimine
*****
Posts: 2171



WWW
« Reply #5 on: February 15, 2008, 03:14:15 PM »

Je ne parlais pas de l'instancing hardware (ca c'est demoniak3d v2.x) mais plutot d'avoir juste une géométrie partagée entre les instances. Car pour le moment il n'y a aucun support de l'instancing. Quand tu créé 10 meshes ou que tu les clones, la géometrie (vertices et faces) sont clonées aussi...
Logged

shadow
Capo Regime
***
Posts: 353



WWW
« Reply #6 on: February 15, 2008, 03:20:35 PM »

Quote
(ca c'est demoniak3d v2.x)
bave
Logged

3D, photos panoramiques : http://www.shadows.fr
Steph3D
Capo Regime
***
Posts: 399


« Reply #7 on: February 15, 2008, 03:47:44 PM »

ah, c'est malin, des faut clones  RED

fauderait un jour quand vois aussi comment optimiser au mieux les scènes, s'il faut gérer les objets hors champ, les masqués, etc... Par ce que si ça calcul, même quand la camera les vois pas, outch !

Difficile à dir, quand on ne sais pas comment fonctionne le moteur derriere, mais peut être faut'il masqué/désactivé les objets à certaine distance hors champ, pour gagner en perf, ou plein d'autres trucs que je sais pas encor.

Dans l'éditeur de l'unreal engine, on doit mettre des portails ou d'autres bricoles entre les pièces ou autres trucs pour optimiser, ça doit pas être la pour rien  roll
Logged
JeGX
Global Moderator
Capo Crimine
*****
Posts: 2171



WWW
« Reply #8 on: February 15, 2008, 05:14:04 PM »

Les objets sont updatés en permanence (genre calcul des rotations) mais c'est pas gourmand au niveau cpu. Au niveau rendu, seuls les objets qui sont dans le champ de vision de la camera sont envoyés dans le pipeline 3D.  Vu que Demoniak3D est généraliste, je n'ai pas codé des algos particuliers pour faire une gestion particulière des objets qui sont dans le frustrum de la cam (LOD pour ne pas en citer un). Donc pour encore mieux optimiser ton rendu, tu peux coder en LUA ton propre algo de LOD ou autre.
Logged

Steph3D
Capo Regime
***
Posts: 399


« Reply #9 on: February 15, 2008, 05:44:20 PM »

Champ de camera, ne veu pas forcement dir, visible, donc s'il y a un mur devans, ceux derriere, ils sont toujours calculé ?

Sinon, si on clone beaucoup d'objets, style 4 ou 500, le perf sont en chut libre, même si les objets sont derriere la camera, la ram ?
Logged
shadow
Capo Regime
***
Posts: 353



WWW
« Reply #10 on: February 15, 2008, 07:36:25 PM »

Quote
Champ de camera, ne veu pas forcement dir, visible, donc s'il y a un mur devans, ceux derriere, ils sont toujours calculé ?

Sinon, si on clone beaucoup d'objets, style 4 ou 500, le perf sont en chut libre, même si les objets sont derriere la camera, la ram ?
Au niveau de la carte 3D, une étape consiste justement à éliminer ces polygones ; maintenant, c'est vrai qu'en les occultant avant même de les filer à la carte, ça peut peut-être accélerer les choses...
Logged

3D, photos panoramiques : http://www.shadows.fr
Pages: [1]
  Print  
 
Jump to:  

Powered by MySQL Powered by PHP Powered by SMF 1.1.11 | SMF © 2006-2009, Simple Machines LLC Valid XHTML 1.0! Valid CSS!