Author Topic: GL2.x / GLSL1.x Particules avec GL_POINTS et coords sur textures  (Read 12086 times)

0 Members and 1 Guest are viewing this topic.

Offline krabob

  • Base
    • Pouet.net
    • View Profile
    • www.m4nkind.com
  • Ancienneté: 1994
  • Groupe: Mankind
  • Rôle: code amiga / linux / OpenGL
  • Ville: Toulouse
 :o Hop ! Quelques petites questions comme ça avant de me lancer dans un petit moteur de particules en GL2.x / GLSL1.2 pour montrer des trucs à mon frangin prof.

 J'ai encore jamais utilisé de VBO pour les vertex, mais d'après ce que je lis de vos posts,
faut quand même gérer les positions de vertex au CPU, et rebalancer des tables.

 Je pensais plutôt dessiner la dernière passe de dessin avec des GL_POINTS, mais passer non pas des positions x,y,z aux .vert mais des index de points (0,1,2,3,...), et mettre les position dans une texture que je lirais depuis le vertex shader.

... dans les premières passes, j'utiliserais d'autres shaders pour appliquer les calculs des mouvements de particules depuis des .frag, sur une série de textures 2D/FBO.
 J'aime bien: comme ça, ya aucun calcul CPU, tout dans le GPU (en plusieurs passes).

Est-ce que c'est une bonne idée, est-ce ça peut être efficient ? (peu d'expériences en "texture2D() depuis un .vert", certaines implé GL ES 2 ne le permettent pas par exemple. ) Est-ce qu'il y aurait pas des problèmes quelconques ? Est-ce qu'il y a des alternatives de ce genre avec des VBO ? Est-ce que des VBO c'est mieux ou pas mieux que des textures pour stocker des coords de vertex ?
Votez comme ça Mélenchon ... ou Clément Wittman, ... ou Eva ! Oo

nystep

  • Guest
Re : GL2.x / GLSL1.x Particules avec GL_POINTS et coords sur textures
« Reply #1 on: 06 December 2010 à 12:59:32 »
je pense que c'est une bonne idée, c'est très efficient..

tu peux utiliser une texture au format rgb_float32 pour stocker les positions,
une texture au même format pour le vecteur vitesse... ect

ensuite il faut utiliser une technique de ping-pong pour faire le rendu d'une texture vers une autre, ça se fait très bien (je suppose que smash utilise les équivalents directX).

pour les point sprites, c'est une bonne idée oui.. tu seras quand même obligé de donner des positions à tes vertex... le système te force à faire un VBO qui contient le nombre de points que tu vas rendre..

Ensuite pas besoin d'indices, tu peux faire un glDrawArrays( ... )

http://www.opengl.org/registry/specs/ARB/point_sprite.txt

et le manuel GLSL pour comprendre comment GLSL interagit avec les point sprites..

ponce

  • Guest
Re : GL2.x / GLSL1.x Particules avec GL_POINTS et coords sur textures
« Reply #2 on: 06 December 2010 à 13:29:18 »
(Note: si vous faites des point sprites, c'est très très lent sur GeForce 6 et 7 d'après mon expérience)

Offline TarMil

  • Base
    • Pouet.net
    • View Profile
    • Greek Sugar Cake
  • Ancienneté: 2006
  • Groupe: Ctrl-Alt-Test
  • Rôle: Code
  • Ville: Villejuif
Re : GL2.x / GLSL1.x Particules avec GL_POINTS et coords sur textures
« Reply #3 on: 06 December 2010 à 14:24:55 »
pour les point sprites, c'est une bonne idée oui.. tu seras quand même obligé de donner des positions à tes vertex... le système te force à faire un VBO qui contient le nombre de points que tu vas rendre..
Sauf si tu as moyen de générer les positions des vertices dans le geometry shader :)
- De l'eau ?
- J'ai la gorge sèche, pas les pieds sales.

Offline ok3anos

Re : GL2.x / GLSL1.x Particules avec GL_POINTS et coords sur textures
« Reply #4 on: 06 December 2010 à 16:12:54 »
L'idée me paraît bonne.

J'ai moi-même utilisé les VBO pour mon moteur à particules afin de créer des d'objets 3D plus ou moins complexes en tant que particules et les perfs sont bien meilleures.

Pour les particules texturées, j'utilise une méthode classique de billboarding (quad orienté face caméra), j'utilise le GL_POINTS  pour les particules lointaines ou très petites.

Là ta méthode semble un peu différente. Comment vas-tu gérer le billboarding?

Offline krabob

  • Base
    • Pouet.net
    • View Profile
    • www.m4nkind.com
  • Ancienneté: 1994
  • Groupe: Mankind
  • Rôle: code amiga / linux / OpenGL
  • Ville: Toulouse
Re : GL2.x / GLSL1.x Particules avec GL_POINTS et coords sur textures
« Reply #5 on: 06 December 2010 à 16:38:11 »
quand tu utilises des GL_POINTS avec du GLSL, le .vert doit écrire gl_Position mais tu peux écrire aussi gl_PointSize (en pixel) , donc tu peux avoir la perspective sur la taille des points.
Ensuite dans le frag tu peux shader comme tu veux, ya une var gl_ qui te donne la coord x.y en [0,1] a l'intérieur du point (tu te retrouves dans le cas d'un billboard quad, tu écris du RGBA, tu profites du glblendfunc). c'est interessant parce que tu peux passer des tas de trucs par varying et rehausser le rendu.

 2 trucs chiants (au moins) avec cette techno:
- la taille du point reste inscrit dans un carré , impossible de faire suivre un ratio rectangle d'écran par exemple.
- c'est mal clippé sur les bords, mais je crois qu'il y a une troisiéme var gl_... a écrire dans le .vert pour ça. On a vite tendance a faire des "gros" points, c'est pas fait pour.

 ... mais bon, un seul glDrawArray pour tout dessiner, et un seul vertex shader exécuté PAR billboard. (sur mon nvidia ion de notebook j'affichais 8192 gros billboard procéduraux (sans texture en mem) avec des sinusoide défini dans le .vert, ça ramait pas trop ... (pas mesuré mais j'étais content)

 Si ça me pète trop les couilles, je vais étudier un gros fake avec GL_QUAD_STRIP pour faire plein de billboards avec un seul gldrawXXX (répéter un index de vertex 2 fois permet de sauter a un autre polygone de strip disjoint, défini dans le meme STRIP.) puis en fakant dans le vert, rattraper l'angle pour facer la camera. (edit) Non je dis une connerie là, il suffit de faire plein des _QUAD normaux.

« Last Edit: 06 December 2010 à 18:56:10 by krabob »
Votez comme ça Mélenchon ... ou Clément Wittman, ... ou Eva ! Oo

Offline ok3anos

Re : GL2.x / GLSL1.x Particules avec GL_POINTS et coords sur textures
« Reply #6 on: 06 December 2010 à 19:37:20 »
Ok. Tu passes tout en shaders.


J'ai développé un moteur à particules assez complet et minimaliste à la fois pour être utilisé dans des 4k/64kb.
pour mon billboard j'utilise des GL_QUAD_STRIPS ;) .
J'ai commencé à étudier les shaders il y a 3 mois et je ne les utilises que pour le post-process :D (shame on me!) . Mais c'est assez marrant et trippant quand on commence à manipuler.

D'ailleurs à ce propos, j'ai vu que point de vue perfs il valait mieux utiliser des GL_TRIANGLES, mais est-ce vraiment vrai, vu le niveau des cartes gfx de maintenant et vu qu'en utilisant les shaders il faut de toute façon des cartes qui supportent minimum OGL 2 ?

J'ai fait des tests et la différence n'est pas flagrante............. 

(au fait j'adore les particules :P)

En ce moment je développe mon propre synth composer/replayer. J'adore composer des synths musics. Mon replayer devrait être prêt pour la fin décembre et l'interface de composition sera développée en janvier 2011.


nystep

  • Guest
Re : GL2.x / GLSL1.x Particules avec GL_POINTS et coords sur textures
« Reply #7 on: 06 December 2010 à 21:12:33 »
joli screenshot ok3anos  :)

Offline ok3anos

Re : GL2.x / GLSL1.x Particules avec GL_POINTS et coords sur textures
« Reply #8 on: 06 December 2010 à 21:36:21 »
Merci, c'était une des scènes de la démo que je devais présenter à la tUM mais malheureusement ma carte gfx m'a lachée !! De toute façon j'étais en manque d'inspiration....  Ce n'est que partie remise... Peut être pour la Easterparty.

 Heureusement j'ai un PC de rechange mais je ne peux faire que le minimum...

 Alors du coup je m'acharne sur la synth music! :D
 

Offline RaHoW

  • Base
    • Pouet.net
    • View Profile
    • Apex - official site
  • Ancienneté: 1993
  • Groupe: Apex
  • Rôle: Gfx, code, orga
Re : GL2.x / GLSL1.x Particules avec GL_POINTS et coords sur textures
« Reply #9 on: 08 December 2010 à 12:54:32 »
joli screenshot ok3anos  :)

+1... t'es devenu un code-killer 0k3 !!!
=RaHoW/Apex=

Offline LittleWhite

Re : GL2.x / GLSL1.x Particules avec GL_POINTS et coords sur textures
« Reply #10 on: 08 December 2010 à 21:25:17 »
+1... t'es devenu un code-killer 0k3 !!!
Ouep ... c'est clair :)