comme dit : voici un premier rendu de masses/GLSL entièrement commandé par pd et pmdp (il n'y a bien sûr aucune saccade au niveau du rendu, de même que sa qualité est infiniment supérieure en vraie).
les 5 particules sont toutes autonomes, on pourrait leur donner ce que l'on veut en tant que mouvement. le gradiant des particules est lui-même modulable.
en bref >> un seul .frag (pas de vertex)
le principe est celui du float makepoint(float x,float y,float fx,float fy,float sx,float sy,float t) { }
Dernière modification par philippe boisnard (2011-12-21 19:27:34)
Hors ligne
Salut philippe, tu arrives à combien de points de rendu avec ce shader? parce que pour moi passé les 500, j'ai l'impression que c'est le CPU qui prends le relai et du coup ça bug a fond... Du coup je cherche un autre type de rendu ou le calcul des points se ferait dans la texture et le rendu dans une autre mais ça coince un peu pour le moment... Dis moi si tu as une piste
1rNO
Hors ligne
Yeap >>> en fait je n'ai pas développé cela sur 500 points !! mais bravo ! !! ! !
en fait oui cela bloque le cpu au niveau de puredata, en fait il faut essayer de transformer le mode positionnel de chaque masse = pmpd ancienne version n'est pas terrible, je vais essayer de passer en pmpd2 qui est bien meilleur, puisqu'il a le moteur msd, et qye c'est le nouvel algo de Cyril Henry et Nico Montgermont.
Mais là j'étais dans d'autres algo => notamment la gestion de 10000 lettres environ dans ma carte e voeux.
Hors ligne
en fait je rfléchissais là et j eme disais que deux voies possibles :
> la première avec un push matrix ??? à voir
> la seconde directement dans le script .frag >> à partir de fractal
> la troisième en déclarant une itération et faisant varier le positionnel à chaqu eitération :
exemple :
#ifdef GL_ES
// là je dois sortir, je réédite mon post plus tard, pour expliquer le fract du GLSL.
precision mediump float;
#endif
uniform float time;
uniform vec2 mouse;
uniform vec2 resolution;
void main(void)
{
float scale = sin(0.3 * time) * 2.5 + 5.0;
vec2 position = (((gl_FragCoord.xy / resolution) - 0.5) * scale) + scale * 0.75 * (mouse - 0.5);
float gradient = 0.0;
vec3 color = vec3(0.0);
float fade = 0.0;
float z;
vec2 centered_coord = position - vec2(0.5);
for (float i=1.0; i<=128.0; i++) //ici changer le nombre d'itération pour les particules
{
vec2 star_pos = vec2(sin(i) * 64.0, sin(i*i*i) * 64.0); //position à chaque itération
float z = mod(i*i - 128.0*time, 256.0);
float fade = (256.0 - z) / 256.0;
vec2 blob_coord = star_pos / z;
gradient += ((fade / 384.0) / pow(length(centered_coord - blob_coord), 1.5)) * (fade * fade);
}
color = vec3(gradient * 2.0, gradient, gradient / 2.0);
gl_FragColor = vec4(color, 1.0 );
}
Hors ligne
Ouais ,en fait j'utilisait une déjà itération pour mon rendu sur 500 points, (enfin itération sur un texture2D(Sampler, vec2..)) c'est pour ça que je comprends pas pourquoi ça rame; enfibon, ma petite idée est que chaque itération se fait sur le tableau de vecteur (gl_texcoord...)donc 500 iterations reviendrais à lire/ecrire 500 fois le tableau de texture, mais bon c'est une supposition.
Sinon, c'est marrant, je pensait que ta gestion de 10000 lettres était tout simplement une image gérée manière texture. Tu affiche réellement 10000 lettres séparées?
Hors ligne
oui il y a 10000 abs >> cela me permet d'écrire ce qu eje veux dans lécran, de faire défiler, quand tu regardes le clip en entier, des lignes de texte, là je termine le mouvement vertical, tu peux taper en live les textes, et hop tu les lances ils circulent.
L'ensemble en fait pèsent pas lourd car il n'y a en fait que peu de textures, puisque je ne fais tourner qu'une dizaine de matrices en gemframebuffer qui se répartissent aléatoirement sur es 10000 abs. ...
là je vais mettre une seconde carte de voeux, avec spécial dédicace shader en cascade (pas multipass, mais qui se suivent.
Hors ligne
voici mon .frag, si tu veux bien test et me dire si c'est pareil pour toi...
Je teste le tien de ce pas...
uniform vec4 mouse;
uniform float timer;
uniform float aa_th;
uniform float max_th;
uniform sampler2D mytex;
float smoothMult = 1.0/(aa_th-max_th);
float calcMetaBalls(vec2 pos){
float val = 0.3 / distance(pos, vec2(1.0, 0.80));
val += 0.1 / distance(pos, mouse.zw/512.);
float i,j;
/*
//test avec calcul blob issu texture
for (i=1.;i<100.;i++)
{
float j = 0.1;
vec4 color= texture2D(mytex, vec2(i, j));
vec2 coord= color.xy;
val += 0.1 / distance(pos, coord/100.);
}*/
//test avec calcul blob incrémenté
for (i=1.;i<100.;i++)
{
for (j=1.;j<100.;j++)
{
float k, l;
k = i/100.;
l = j/100.;
val += 0.01 / distance(pos, vec2(k,l));
}
}
return val;
}
void main(void)
{
vec2 screenPos = (gl_FragCoord.xy / 512.);
float val = 0.0;
float temp = calcMetaBalls(screenPos);
//thresholding
if(temp<max_th){
val = 0.0;
} else {
if(temp<aa_th){
val = smoothstep(1.0, 0.0, (aa_th-temp)*smoothMult);
} else {
val = 0.7;
}
}
gl_FragColor = vec4(val);
}
Hors ligne
Yop
testé rapide : 1/ t'as une variable déclarée qui sert à rien (timer)
2/ en effet c'est grave tout bloque sur mon macbook pro quand je le lance donc je ne vois rien.
3/ en fait tu essaies de faire quoi ? de mêler des particules à une texture ? si oui : il vaudrait mieux travailler avec d'abord la création de particules puis ensuite en les mettant en buffer de les lancer sur une texture ? à vérifier.
mais en effet là cela bloque pour moi immédiatement
voici un exemple au niveau du lettrage (de happy new year)
128 blobs en GLSL
qui sont en gemframebuffer et envoyés dans un extrude-shader mis en gemframebuffer et envoyé dans
un dernier shader de détoureur
Dernière modification par philippe boisnard (2012-01-09 18:02:35)
Hors ligne
Poy,
pour le timer, j'ai oublié de le virer...
en fait, là c'est incrémenté 10000 fois, donc c'est normal que ça bugg, déja que 500 chez moi ça traine (faut dire que mon ordi à bien quelques années de trop...), vire l'incrémentation du j pour que ça tourne...
Non, en fait ce que je veux faire, c'est utiliser les couleurs xy d'une texture comme makepoint.(cf le passage en commentaire)...
Mais je pense que c'est tout simplement l'algo de rendu de points qui est trop lourd, du coup je travaille sur un autre...
Dernière modification par nononononono (2012-01-09 18:07:29)
Hors ligne
Yo !!
Un petit message pour vous dire, qu'avec Pascale et Benj, on vient de se frapper 3 jours d'initiation au GLSL avec Jack Boyer d'RYBN...
C'est juste magique !!
Je vous colle un petit patch obtenu cette aprèm...
C'est du déjà vu, mais le coup du [pix_delay] et des [texunit ( ouvrent de formidables perspectives...
A noter que les textures peuvent être chopées n'importe où dans le patch... elles n'ont pas besoin d'être nécessairement dans le [gemhead] du [glsl_program]...
le fichier vidéo est inaccessible : http://openatelier.labomedia.org/2F/I-and-I.flv (HTTP/1.1 301 Moved Permanently)
citation :
c'est un peu plus compliqué de les mettre en "série" comme les pix
Avec des [gemframebuffer] la chose semble, a priori, assez simple...
En tous cas, ils permettent d'obtenir des feedback tranquilou Bilou...
Je vous posterai ça...
Pour info, on a tissé ça sur une Vanilla avec un GEM 0.93.3 compilé aux p'tit oignons...
Vu le confort de la chose, je ne sais pas si je vais retourner un jour sur Pd-extended...
Il nous reste encore 2 jours avec Jack... (lundi et mardi)
Si vous avez des questions très spécifiques, c'est le moment... :-)
Dernière modification par Olivier (2012-02-05 01:04:28)
Hors ligne
J'ai pas pu résister...
Hors ligne
as t il des abstractions personnelles ?
Hors ligne
Salut olivier, cool j'ai une pléthore de questions!
Hors ligne
Question n1 :
comment traverser la limite des 0-1 pour les couleurs? (donc les utiliser comme tableaux de valeurs )
Hors ligne