Author Topic: 1M particules  (Read 8282 times)

0 Members and 1 Guest are viewing this topic.

Offline Elrick

  • Base
    • View Profile
  • Groupe: SFX
  • Rôle: Code / GFX
  • Ville: Lyon
1M particules
« on: 30 April 2012 à 19:43:04 »
http://youtu.be/YwS1WAtm6-w

d'après d'autres vidéos de lui, il utilise une texture 1024x1024 pour contenir la position de ces particules<- ya de la doc quelque part sur la technique utilisée ?

Offline LittleWhite

Re : 1M particules
« Reply #1 on: 30 April 2012 à 19:48:40 »
Bonjour,

Dans le ReadME de Shoal ils disent avoir 4 Million de particules (OpenGL + OpenCL)

Offline LLB

  • Base
    • Pouet.net
    • Coup de coeur
    • View Profile
    • site perso
  • Ancienneté: 2000
  • Groupe: Ctrl-Alt-Test
  • Rôle: code
  • Ville: Munich
Re : 1M particules
« Reply #2 on: 30 April 2012 à 19:56:50 »
Sinon, Smash fait ça (en mieux) depuis un moment : blunderbuss, agenda circling forth, ceasefire (all falls down..), numb res...
Il explique les techniques sur son blog : http://directtovideo.wordpress.com

Offline Patapom

  • Base
    • View Profile
    • www.patapom.com
  • Ancienneté: 1988
  • Groupe: Bomb!
  • Rôle: Coder
  • Ville: Lyon
Re : 1M particules
« Reply #3 on: 30 April 2012 à 20:10:17 »
Y a plus rien d'étonnant sur les cartes modernes d'afficher 1 million de particules...

Tu alloues 2 render targets de 1024x1024 puis tu appliques un shader simple pour faire évoluer tes particules, ensuite tu appliques un vertex shader qui affiche 1 million de points qui vont sampler leur position dans la render target précédement calculée, puis tu appliques un pixel shader qui affiche une couleur moisie et voilà !
.  Pom  .

Offline Elrick

  • Base
    • View Profile
  • Groupe: SFX
  • Rôle: Code / GFX
  • Ville: Lyon
Re : 1M particules
« Reply #4 on: 30 April 2012 à 20:15:37 »
@llb&littlewhite c'est pas tant le nombre que le "comment qu'on fait"

@patapom, ok donc la on oublie la manipulation des particules une a une pour la durée de vie et tt et tt, tu initialises juste les textures et ensuite tout se fait ds le VS ?
j'imagine que toute la difficulté réside donc dans la manière rendre l'ensemble parametrable non ?

Offline Patapom

  • Base
    • View Profile
    • www.patapom.com
  • Ancienneté: 1988
  • Groupe: Bomb!
  • Rôle: Coder
  • Ville: Lyon
Re : 1M particules
« Reply #5 on: 30 April 2012 à 20:41:43 »
Non tout se fait dans le PIXEL shader. En fait tu as 2 pipelines si tu veux :

1) Le premier est un quad avec un pixel shader qui travaille uniquement sur la render target contenant les positions et qui fait :
  . Lit le pixel contenant la position courante de la particule depuis la Render Target 0
  . Applique une formule à la con pour modifier cette position (là dans la vidéo on dirait une simulation de ressort un peu foireuse)
  . Stocke la nouvelle position dans la Render Target 1
Puis tu swappes RT0 / RT1 chaque frame

2) Le second pipeline c'est un VS, un GS et un PS, tous très simples :
  . Le VS prend 1 million de points en entrée (en réalité, un seul point instancié 1 million de fois). Tu samples la position du point depuis la render target courante calculée par le pipeline précédent.
  . Le GS étend chaque point en un tout p'tit quad (ou un triangle si vraiment tu comptes afficher des points)
  . Le PS se contente d'afficher une couleur. Une couleur unie ou une couleur calculée dans le VS que tu passes au PS...


NOTE: Quand je parle de PS, je parle pas du parti politique de connards mais bien de pixel shaders...  8)
.  Pom  .

Offline Elrick

  • Base
    • View Profile
  • Groupe: SFX
  • Rôle: Code / GFX
  • Ville: Lyon
Re : Re : 1M particules
« Reply #6 on: 30 April 2012 à 20:47:02 »

NOTE: Quand je parle de PS, je parle pas du parti politique de connards mais bien de pixel shaders...  8)
j'avais bien compris  :)

tain j'ai la mort je comprend le principe ... mais j'ai la fleme de le coder :'(

Offline wullon

  • Base
    • Pouet.net
    • Coup de coeur
    • Slengpung
    • View Profile
    • wullon homepage
  • Ancienneté: 2006
  • Groupe: Adinpsz
  • Rôle: orga/zik/design
  • Ville: Paris
Re : 1M particules
« Reply #7 on: 30 April 2012 à 21:39:21 »

Offline Elrick

  • Base
    • View Profile
  • Groupe: SFX
  • Rôle: Code / GFX
  • Ville: Lyon
Re : Re : 1M particules
« Reply #8 on: 30 April 2012 à 23:35:28 »

Offline Zavie

Re : 1M particules
« Reply #9 on: 03 May 2012 à 11:49:14 »
Non tout se fait dans le PIXEL shader. En fait tu as 2 pipelines si tu veux :

1) Le premier est un quad avec un pixel shader qui travaille uniquement sur la render target contenant les positions et qui fait :
  . Lit le pixel contenant la position courante de la particule depuis la Render Target 0
  . Applique une formule à la con pour modifier cette position (là dans la vidéo on dirait une simulation de ressort un peu foireuse)
  . Stocke la nouvelle position dans la Render Target 1
Puis tu swappes RT0 / RT1 chaque frame

Ça me rassure, c'est à peu près l'idée que je m'étais faite du machin. Avec éventuellement une partie supplémentaire : la (ou les pour un ping pong) RT représentant le vector field (en 3D, par slices) dans le cas où c'est implémenté de cette manière, typiquement pour des fluides.

Quote
2) Le second pipeline c'est un VS, un GS et un PS, tous très simples :
  . Le VS prend 1 million de points en entrée (en réalité, un seul point instancié 1 million de fois). Tu samples la position du point depuis la render target courante calculée par le pipeline précédent.
  . Le GS étend chaque point en un tout p'tit quad (ou un triangle si vraiment tu comptes afficher des points)
  . Le PS se contente d'afficher une couleur. Une couleur unie ou une couleur calculée dans le VS que tu passes au PS...

Il y a un intérêt a passer par un GS plutôt qu'un point sprite ?

Concernant le polygone, j'ai vu a plusieurs reprises déjà la recommandation d'utiliser un triangle avec des coordonnées de textures qui vont bien (je suppose avec un alpha test pour rejeter rapidement les fragments), pour éviter de gaspiller un deuxième triangle pour chaque particule.

Enfin la question que je me pose encore : comment on évite d'avoir un million de drawcalls ? Voire, est-ce que je peux ne faire qu'un seul drawcall, et le nombre de particules dépend des données sur le GPU ?


Quote
NOTE: Quand je parle de PS, je parle pas du parti politique de connards mais bien de pixel shaders...  8)

FS ? :)


P.S. : le sujet des particules et des fluides a pas mal été traité au SIGGRAPH l'année dernière (un mot clé qui est beaucoup revenu c'était "voxelization". :)

Offline Elrick

  • Base
    • View Profile
  • Groupe: SFX
  • Rôle: Code / GFX
  • Ville: Lyon
Re : Re : 1M particules
« Reply #10 on: 03 May 2012 à 13:00:49 »

Enfin la question que je me pose encore : comment on évite d'avoir un million de drawcalls ? Voire, est-ce que je peux ne faire qu'un seul drawcall, et le nombre de particules dépend des données sur le GPU ?


bah si j'ai bien compris vu que tu traites toutes tes particules d'un coup (dans la texture), tu as 2 draw call: 1 pour MAJ les particules et 1 pour afficher, non ?

Offline Patapom

  • Base
    • View Profile
    • www.patapom.com
  • Ancienneté: 1988
  • Groupe: Bomb!
  • Rôle: Coder
  • Ville: Lyon
Re : 1M particules
« Reply #11 on: 03 May 2012 à 13:43:32 »
Oui, y a qu'un seul draw call, c'est en fait un DrawInstanced( 1000000 );  ;D
Ensuite, dans le vertex shader (en tout cas en DX) c'est très facile d'utiliser SV_INSTANCEID pour connaître l'index du point traité et recalculer les UV dans ta render taret de positions depuis cet index.

Quote
Il y a un intérêt a passer par un GS plutôt qu'un point sprite ?
Bah c'est surtout qu'en DX on n'a plus le choix vu que les point sprites n'existent plus...
.  Pom  .

Offline octobinz

  • Base
    • View Profile
Re : 1M particules
« Reply #12 on: 21 May 2012 à 19:15:50 »
Quote
(je suppose avec un alpha test pour rejeter rapidement les fragments)
Moué, si je ne m'abuse, si ton fragment n'est pas discard par le Hiz/stencil, l'alpha test va pas améliorer tes perfs.

Offline RaHoW

  • Base
    • Pouet.net
    • View Profile
    • Apex - official site
  • Ancienneté: 1993
  • Groupe: Apex
  • Rôle: Gfx, code, orga
Re : 1M particules
« Reply #13 on: 23 May 2012 à 22:17:58 »
Hey Octo ^^
=RaHoW/Apex=

Offline maracuja

  • Base
    • View Profile
Re : 1M particules
« Reply #14 on: 24 May 2012 à 17:08:10 »
\o/