unkeiknown
1/18/2017 - 2:04 PM

forDopVorticleForce.cs

//vel apdate

//properties
float glscale = 1.0;
float vxscale = 1.0;

float densthr = 9;
float distthr = 2;

float vmult = .75;

//set new vel
vxscale *= glscale;
int cls[] = pcfind_radius(1,"P","pscale",1.0,@P,vxscale,1);
if(len(cls)){

    vector ptpos = point(1,"P",cls[0]);
    vector ptvel = point(1,"v",cls[0]);
    float ptscale = point(1,"pscale",cls[0]);
    
    float ptage = point(1,"age",cls[0]);
    float ptmaxage = point(1,"maxage",cls[0]);
    
    vector ptlook = @P-ptpos;
    vector crvel = v@vel;
    
    float dist = length(ptlook);
    ptscale*=distthr;
    float ptvmult = chramp("./vba",(ptage/ptmaxage));
    ptvmult *= chramp("./vbd",fit(dist,0,ptscale,0,1));
    
    vector outvel = (cross(crvel,normalize(ptvel)));
    outvel = cross(normalize(ptlook),outvel) * ptvmult * vmult;
    
    if(f@density>densthr)outvel=0;
    if(dist>ptscale)outvel=0;
    
    v@velcurl = outvel;
    v@vel += outvel;
    
}



//vel advect 
//prperties
float glscale = 1.0;
float pscalemin = .09;
float pscalemax = .11;

float minage = 1;
float maxage = 3;


//set attributes
float seed = rand(i@ptnum*(f@Frame+1));

f@pscale = fit( seed ,0,1, pscalemin, pscalemax)*glscale;
f@maxage = fit( seed ,0,1, minage, maxage);
v@v = set(0,0,0);

//remove if close to others
int cls[] = pcfind_radius(1,"P","pscale",1.0,@P,f@pscale,1);
if(len(cls)>0)removepoint(0,@ptnum);