QUICK VEX SNIPPETS
// OUT OF OBJECT
int type;
// CREATE A INT PARAMETER WITH A MENU
// 0 GEOMETRY
// 1 SDF
type = chi("type");
if (type == 0){
int nr_prim;
vector pos_geo,dir_geo,n_geo,nr_uvw;
pos_geo = minpos(1,@P);
dir_geo = pos_geo - @P;
xyzdist(1,@P,nr_prim,nr_uvw);
n_geo = primuv(1,"N",nr_prim,nr_uvw);
n_geo = normalize(n_geo);
if (dot(normalize(dir_geo),n_geo) > 0){
@P = pos_geo;
}
}
if (type == 1){
float vSam;
vector vGrad,offset;
vSam = volumesample(1,0,@P);
vGrad = volumegradient(1,0,@P);
offset = normalize(vGrad) * -vSam;
if (vSam < 0){
@P += offset;
}
}
// FOR LOOP TRAIL
vector dir = normalize(v@v);
vector pos = @P;
int count = chi("count");
for (int i=0;i<count;i++){
pos += dir * chf("gap");
int npt = addpoint(0,@ptnum);
setpointattrib(0,"P",npt,pos,"set");
}
// PC DENSITY
int nrpts[],maxpts,use_vis;
float rad;
rad = chf("search_radius");
maxpts = chi("max_points");
use_vis = chi("visualize"); //toggle
nrpts = pcfind(0,"P",@P,rad,maxpts);
@pc_density = len(nrpts)/float(maxpts);
if (use_vis == 1){
@Cd = chramp("density",@pc_density);
}
// PSCALE SETUP
float r1 = fit01(pow(rand(@id+369),10),0.2,2);
float u = @curveu;
float ramp = chramp("uRamp", u);
f@age_mask = 1 - abs(@nage);
float age_ramp = chramp("age_ramp", @age_mask);
float fields_age_ramp = chramp("fields_age_ramp", @age_mask);
@pscale = ramp + 0.2;
@pscale *= age_ramp * r1;
@pscale *= chf("pscaleMult");
@fuel = 1 - fields_age_ramp;
@temperature = 1 - fields_age_ramp;
@Cd = set(@pscale,0,0);
addvariablename(0,"pscale", "PSCALE");
// TRANSFORM STATIC GEOMETRY TO ITS ANIMATED LOCATION
// Input0 - Static geometry, packed as single point
// Input1 - Animated geometry, select one piece to use its transforms
matrix tm;
tm = primintrinsic(1,'packedfulltransform',0);
// Set the rotation
// To get the rotation you need matrix3
setprimintrinsic(0,'transform',0,matrix3(tm),'set');
// Set the transform
setpointattrib(0,'P',0,vector(cracktransform(0,0,0,0,tm)),'set');
// cracktransform gets us the transform
// CUSTOM SPIKE VELOCITY
vector cen = getbbox_center(0);
f@distance = fit(distance(@P, cen), chf("max_distance"), chf("min_distance"), 0.25, 1);
@distance = chramp("distance_ramp", @distance);
@Cd = @distance;
vector dir = normalize(chv("direction"));
float speed = chf("speed");
v@v = dir * speed;
v@v *= @distance;
float ang;
vector axis;
matrix3 rtm;
ang = radians(-25);
axis = normalize({0,0,1});
rtm = ident();
rotate(rtm,ang,axis);
@P -= cen;
@P *= rtm;
@P += cen;
v@v *= rtm;
// RANDOM N
@N = set(0,0,1);
@N += sample_sphere_cone(chv("direction"),ch("angle"),rand(@ptnum));
// INSTANCE PATH
i@selectionPiece = int(rand(@id + 123) * chi("number_of_pieces"));
string path = split(chs("file_path"),".")[0];
s@instancepath = sprintf("%d.000%d.bgeo.sc",path,i@selectionPiece);
//VELOCITIES WRAP AROUND OBJECT
//N and v necessary
vector cross1 = normalize(cross(@v,@N));
vector cross2 = normalize(cross(cross1,@N));
float dt = dot(normalize(@v),@N);
float speed = length(@v);
@v = cross2 * (speed * 0.1) * fit(dt,-0.1,0.75,0,1);
//CRACK TRANSFORM
vector t,r,s;
cracktransform(0,0,0,primintrinsic(0,'packedfulltransform',@elemnum),t,r,s);
v@tm_trans = t;
v@tm_rot = r;
v@tm_sca = s;
//
float speed = length(@v);
vector downv = set(0,-1,0);
downv *= speed;
@v *= 0.125;
@v += downv;
vector cp = point(1,"P",0);
vector cv = @P - cp;
float cvlen = length(cv);
vector ncv = cv / cvlen;
ncv *= ch("bias2center");
@v += ncv;
@v *= fit(cvlen, 0, 10, 0.1,1);