Pour lancer les tutoriaux, voici un petit script pour gérer la création de la mousse :
- Code : Tout sélectionner
from random import randint
def onSimulationStep():
liquid = scene.getEmitter("champ")
foam = scene.getEmitter("mousse")
particles = liquid.getParticlesColliding()
for particle in particles:
pos = particle.getPosition()
vel = particle.getVelocity()
if particle.getVelocity().module() > 6:
foam.addParticle(pos, vel)
liquid.removeParticle(particle.getId())
fparticles =foam.getParticles()
for fparticle in fparticles:
fpos = fparticle.getPosition()
fvel = fparticle.getVelocity()
fnor =fparticle.getNormal()
if fparticle.getAge() > (15 + randint(0,15)) and fnor.getY() < 0:
liquid.addParticle(fpos, fvel)
foam.removeParticle(fparticle.getId())
Tout d'abord il faut créer 2 emitter, le premier nommé champ et le second nommé mousse.
On initialise nos deux variables qui contiennent les particules des deux emitters :
- Code : Tout sélectionner
liquid = scene.getEmitter("champ")
foam = scene.getEmitter("mousse")
Le but est que le "champ"(le "liquid") se transforme en "mousse" ("foam") lorsqu'il entre en collision avec quelque chose. Ce script s'exécute à chaque Step (def onSimulationStep():). Il récupère les particules qui sont rentrées en collision lors de ce Step
- Code : Tout sélectionner
particles = liquid.getParticlesColliding()
for particle in particles:
Il enregistre donc ces particules dans "particules" et vérifie pour chacune sa vitesse. Si cette dernière est supérieure à 6 il rajoute une particule dans "foam" en y ajoutant la position et la vitesse de la particule entrée en collision puis la supprime de "liquid".
Et voila! à partir de ce moment notre champagne s'est transformé en mousse

Mais bon, si je montre ça à Roch (de MaxwellRender.fr) il me dévisage en me disant :
Roch a écrit:Bien gentil tout ça, mais la mousse, au bout d'un moment, ça redevient du champagne, t'es nul !

- Code : Tout sélectionner
for fparticle in fparticles:
fpos = fparticle.getPosition()
fvel = fparticle.getVelocity()
fnor =fparticle.getNormal()
if fparticle.getAge() > (15 + randint(0,15)) and fnor.getY() < 0:
liquid.addParticle(fpos, fvel)
foam.removeParticle(fparticle.getId())
Et voila, le cycle complet de notre beau champagne.
Voyons ce que ça donne :

Roch a écrit:Il ne reste plus qu'à deguster