Ici, on parlera de VEX
@Cd = 0;
// Orientation des faces à garder
vector faceDir = chv("vector");
// Entre -1 et 1, plus on est proche de 1, plus on garde les faces qui sont dans la même direction que faceDir
float select = ch("select");
if (dot(@N, faceDir) > select) {
@Cd.x = 1;
}
// On garde seulement les faces qui ont une orientation similaire à faceDir
else {
removepoint(0, @ptnum, 1);
}
// une geo en input 0, un vdb (vdbfrompolygon) en input 1
if (volumesample(1,"surface",@P)<0)removepoint(0,@ptnum,1);
// check si il y a un att id sur les points
if (haspointattrib(0,"id")==0 ){@id = @ptnum;}
// random globale
@pscale = fit01(rand(@id+454654),ch("min"),ch("max"));
// pourcentage des plus gros
if (rand(@id+987)<ch("pctDePlusGros")){
@pscale = fit01(rand(@id+454654),ch("minGros"),ch("maxGros"));
}
// un scale globale
@pscale *= ch("globalMult");
// trouve le vecteur perpendiculaire au plan represente par deux vecteurs
vector simpleCross = cross(@N,set(0,1,0));
vector doubleCross = cross(@N,simpleCross);
v@N = doubleCross;
Pour s'aider a representer le cross product on peut utiliser la regle de la main droite. Le resultat de la fonction cross entre a et b est le pouce :).
int maxIt = chi("maxIt");
for (int i=0; i<maxIt; i++) {
int rNum = int(rint(rand(@Frame+i*100)*@numpt));
if (@ptnum == rNum){
i@group_ToMouv = 1;
}
}
vector trail = point(1,"v",0);
trail/=24;
int prerollStart = chi("preStart");
int startF = chi("startF");
int intervall = startF - prerollStart;
if (@Frame<startF){
@P-=trail*(intervall-(@Frame-prerollStart));
}
// input 0: une simulation de smoke
// input 1: la meme chose avec un time shift
vector tempP = point(1,"P",@ptnum);
v@P += set(-tempP.x,0,-tempP.z);
on va ce servir de la fonction sample_discrete pour faire un degradé entre deux attribus
f@mask1= relbbox(0,@P).z ;
f@mask2= 1-f@mask1 ;
derriere le scatter mettre un autre wrangle en points
vector color[];
append(color,set(1, 0, 0));
append(color,set(0, 1, 0));
float mask[];
append(mask,f@mask1);
append(mask,fit01(f@mask2, 0,ch("poid")));
int result=sample_discrete(mask,rand(@ptnum+654));
v@Cd = color[result];