Yop, alors en ce moment je travail sur un programme qui puissent rendre une galaxie en 3d, le problème c'est que pour le moment les bras de la galaxie sont fait de GL_POINTS et à moins d'en mettre une quantité astronomique (sans jeu de mot) je vois pas comment bien rendre l'espèce de brouillard qui y demeure.
Je me cherche pas à influencer la physique ou quoi de la fumée mais seulement le meilleur moyen de la rendre.
Merci d'avance
Tu devrais te pencher du coté des systèmes de particules et regarder comment les gens font pour avoir un rendu qui ressemble a de la fumé:
J'ai trouvé ca vite fait (je sais pas ce que ca vaut) :
http://prideout.net/blog/?p=63 (part 1)
http://prideout.net/blog/?p=67 (part 2)
Le mec donne le code de son fragment shader :
uniform vec4 Color;
uniform vec2 InverseSize;
varying float gAlpha;
varying vec2 gTexCoord;
uniform sampler2D SpriteSampler;
uniform sampler2D DepthSampler;
void main()
{
vec2 tc = gl_FragCoord.xy * InverseSize;
float depth = texture2D(DepthSampler, tc).r;
if (depth < gl_FragCoord.z)
discard;
float d = depth - gl_FragCoord.z;
float softness = 1.0 - min(1.0, 40.0 * d);
softness *= softness;
softness = 1.0 - softness * softness;
float A = gAlpha * texture2D(SpriteSampler, gTexCoord).a;
gl_FragColor = Color * vec4(1, 1, 1, A * softness);
}
EDIT: T'as le code complet + les sprites en bas de la page
Le 05 mars 2015 à 13:45:26 bithive a écrit :
Tu devrais te pencher du coté des systèmes de particules et regarder comment les gens font pour avoir un rendu qui ressemble a de la fumé:
J'ai trouvé ca vite fait (je sais pas ce que ca vaut) :
http://prideout.net/blog/?p=63 (part 1)
http://prideout.net/blog/?p=67 (part 2)
Le mec donne le code de son fragment shader :uniform vec4 Color; uniform vec2 InverseSize; varying float gAlpha; varying vec2 gTexCoord; uniform sampler2D SpriteSampler; uniform sampler2D DepthSampler; void main() { vec2 tc = gl_FragCoord.xy * InverseSize; float depth = texture2D(DepthSampler, tc).r; if (depth < gl_FragCoord.z) discard; float d = depth - gl_FragCoord.z; float softness = 1.0 - min(1.0, 40.0 * d); softness *= softness; softness = 1.0 - softness * softness; float A = gAlpha * texture2D(SpriteSampler, gTexCoord).a; gl_FragColor = Color * vec4(1, 1, 1, A * softness); }
EDIT: T'as le code complet + les sprites en bas de la page
Merci, je vais essayer ça !
Billboard ou système de particules
Tu devrais te pencher du coté des systèmes de particules et regarder comment les gens font pour avoir un rendu qui ressemble a de la fumé:
J'ai trouvé ca vite fait (je sais pas ce que ca vaut) :
http://prideout.net/blog/?p=63 (part 1)
http://prideout.net/blog/?p=67 (part 2)
Par contre je dois avouer que je comprend pas tout
Le 05 mars 2015 à 14:13:29 bugar a écrit :
Billboard ou système de particules
J'ai déjà checké de ce coté la, mais ce que je me demande c'est comment faire ces particules justement, parce que des points ne suffisent pas.
bha les particules, généralement, c'est un ensemble de carré texturé, avec une source d'émission tournée vers la camera qui subissent des transformations (rotation, translation) .
Donc 4 points avec une texture = 1 particule/billboard ( c'est le même principe).
Tu utilise le pipeline dynamique ( gerer par toi via shader ) ou pipeline static (gestion par opengl) d'openGL?
Le 05 mars 2015 à 16:32:20 bugar a écrit :
bha les particules, généralement, c'est un ensemble de carré texturé, avec une source d'émission tournée vers la camera qui subissent des transformations (rotation, translation) .Donc 4 points avec une texture = 1 particule/billboard ( c'est le même principe).
Tu utilise le pipeline dynamique ( gerer par toi via shader ) ou pipeline static (gestion par opengl) d'openGL?
Dynamique, mais le problème du billboard c'est qu'il est gênant quand on se déplace, on vois trop la rotation des particules, je pensais plutôt à un système de particules
Mais les particules sont des billboard avec des propriété en plus ( durée de vie, nombre, orientation, mouvement, vitesse, atténuation vitesse,...)
Si tu vois la rotation c'est qu'elle est pas au point