Skip to content

Instantly share code, notes, and snippets.

if (vertexprimindex(0, @vtxnum) == primvertexcount(0, @primnum) - 1) i@group_root = 1;
if (vertexprimindex(0, @vtxnum) < 1) i@group_root = 1;
// 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 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);
@rest = v@P;
int vtx = pointvertex(0, @ptnum);
vector uv = vertex(0, 'uv', vtx);
v@P = lerp(@P, uv, chf('blend'));
vector cd = point(1, 'Cd', @ptnum);
v@P += normalize(v@N) * fit01(cd.r, -0.5, 0.5) * chf('scale');
detail(0,"rotx",1)
int pt = nearpoint(1,@P);
v@vel = point(1,'v',pt);
v@P += chf('scale') * v@N;