matrix3 m = qconvert(p@orient);
v@up = set(m.yx, m.yy, m.yz);
v@N = set(m.zx, m.zy, m.zz);
v@P += v@up * chf('push');
//vector4 turnx = quaternion({1,0,0} * chf('scale'));
//vector4 turny = quaternion({0,1,0} * chf('scale'));
//p@orient = qmultiply(p@orient, turnx);
// Gradient
vector vg = -volumegradient(0,"density",v@P);
vg = normalize(vg);
vector v = normalize(v@vel);
//curlnoise
float t = f@Time * ch('speed');
vector p = v@P * ch('frequency');
vector4 p4 = set(p.x,p.y,p.z,t);
vector n = curlxnoise(p4)*ch('mult');
//dotproduct
float dot = fit(dot(v, vg), -1, 1, 0, 1);
float blend = chramp('ramp', dot);
//apply curl X dotproduct
v@vel += n * blend;
v@v = lerp(v@v, length(v@v) * normalize(qrotate(q, v@v)), blend);
int posprim;
vector param_uv;
float maxdist = 10;
float dist = xyzdist(1,@P,posprim,param_uv,maxdist);
i@posprim = posprim;
v@param_uv = param_uv;
vector pos = primuv(1,"P",i@posprim,v@param_uv);
@P = pos;
if (vertexprimindex(0, @vtxnum) == primvertexcount(0, @primnum) - 1) i@group_root = 1;
if (vertexprimindex(0, @vtxnum) < 1) i@group_root = 1;
int pts[] = primpoints(0, @primnum);
vector P_pts[] = {};
float t = chf("t");
string basis = chs("basis");
vector P, uv, basis_sample;
float uvx_t;
foreach(int pt; pts)
{
P = point(0, "P", pt);
append(P_pts, P);
}
foreach(int pt; pts)
{
P = point(0, "P", pt);
uv = point(0, "uv", pt);
uvx_t = uv.x * t;
basis_sample = spline(basis, uvx_t, P_pts);
setpointattrib(0, "P", pt, basis_sample, "set");
}
// Get mirrored value from @curveu
float u = (abs(@curveu * - 2 + 1) * -1 + 1) / 2;
// Feed that value in a ramp that defines half of the resulting curve
f@pscale = chramp("point_scale", u);
float rot = chf('rot');
vector angle = chv('angle');
matrix3 xform = primintrinsic(0, 'transform', i@primnum);
rotate(xform, radians(rot), angle);
setprimintrinsic(0, 'transform', i@primnum, xform, 'set');
matrix m4 = primintrinsic(0,'packedfulltransform',@ptnum);
matrix3 m3 = matrix3(m4);
@orient = quaternion(m3);
@scale = cracktransform(0,0,2,0,m4);
v@pivot = primintrinsic(0,'pivot',@ptnum);
float percentage = chf('percentage');
if(rand(@ptnum, 1) % 100 < percentage) removepoint(0, @ptnum);
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);
float val = f@surface;
int pt = addpoint(0, @P);
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));