float scale = chf('scale');
matrix3 trn = primintrinsic(0, "transform", @primnum);
matrix scalem = maketransform(0, 0, {0,0,0}, {0,0,0}, scale, @P);
trn *= matrix3(scalem);
setprimintrinsic(0, "transform", @primnum, trn);
vector dir = chv('dir');
float angle = dot(@N, dir);
float fitangle = fit(angle, -1, 1, 0, 1);
float blend = chramp('blend', fitangle);
@Cd = blend;
vector tmp = cross(@N, dir);
vector cross = cross(@N, tmp);
v@N = lerp(@N, cross, blend);
@rest = v@P;
int vtx = pointvertex(0, @ptnum);
vector uv = vertex(0, 'uv', vtx);
v@P = lerp(@P, uv, chf('blend'));
float val = f@surface;
int pt = addpoint(0, @P);
setpointattrib(0, 'val', pt, val);
float sdf = volumesample(1, 0, v@P);
vector grad = normalize(volumesamplev(2,0, v@P));
vector cd = point(1, 'Cd', @ptnum);
v@P += normalize(v@N) * fit01(cd.r, -0.5, 0.5) * chf('scale');
float sdf = volumesample(1,0,@P);
if (sdf>0)
{
@density *= fit01(chramp('density', sdf),0,1);
}
float amp = chf("amp");
int matchpt = @ptnum;
string attr = chs("falloff_attr");
float falloff = point(1, attr, @ptnum);
float b = falloff;
float a = point(0, attr, @ptnum);
float out = 0.0;
if(a < .5)
out = 2.0 * a * b;
else
out = 1.0 - 2.0 * (1.0 - a) * (1.0 - b);
f@attr = lerp(f@attr, out, amp);
detail(0,"rotx",1)
vector a = @P;
vector b = point(1,'P',0);
@N = b-a;
int pt = nearpoint(1,@P);
v@vel = point(1,'v',pt);
detail(0, "__spreadmin")
matrix xform = getpackedtransform(1, @ptnum);
matrix rot = getpackedtransform(0, @ptnum);
4@xform = xform;
4@rot = rot;
@xform.xx = @rot.xx;
@xform.xy = @rot.xy;
@xform.xz = @rot.xz;
setpackedtransform(0, @ptnum, @xform);
@Cd = v@opinput1_Cd;
v@P += chf('scale') * v@N;
afofayodap@HPaste