2017-08-21 5 views
0

J'ai fait un système de particules avec la buffergeometry dans troisjs. Je veux que les particules reçoivent de la lumière. Est-ce difficile (impossible?) Car la géométrie n'a pas réellement de face à éclairer? Je travaille avec ceci principalement dans un shader que j'ai créé. Je viens de créer la géométrie dans threejs.Éclairage d'un système de particules dans THREEJS/GLSL

Les particules ne sont-elles pas dans l'espace mondial? Sont-ils dans l'espace de la caméra seulement? Qu'est-ce qu'une simple équation du shader de fragment GLSL pour l'éclairage des particules?

Répondre

2

Cela dépend du type de matériau que vous utilisez pour les particules. Si vous utilisez shaderMaterial et écrivez votre propre fragmenthader, vous devez implémenter vous-même l'éclairage dans le shader code. Par exemple, pour éclaircir des particules proches de la source lumineuse, il suffit d'éclaircir leur couleur par la distance entre chaque particule et la position de la lumière:

vec3 lightPosition = vec3(1.0, 2.0, 3.0); 
float lightStrength = 0.1; 

float distanceToLightSource = distance(particlePosition, lightPosition); 

vec4 lighterColor = particleColor * distanceToLightSource * lightStrength; 
+0

Wow, vous avez si bien simplifié les choses. J'apprécie votre réponse! J'ai pensé à quelque chose comme ça, mais je n'ai pas assez d'expérience avec GLSL pour formuler le code. Je comprends parfaitement votre réponse, car j'ai déjà ajouté une position de lumière dans mon shader et j'y jouais. – fallingCode

+0

C'est génial! Vous pouvez également vous rendre compte que la position de la particule n'est pas disponible nativement dans le fragment shader, elle doit donc être transmise par le vertex shader en tant que variable variable –

+0

Merci, je passais déjà les positions des particules. J'étais vraiment proche. Je n'avais tout simplement pas l'équation pour ça. – fallingCode