Showing posts with label normal. Show all posts
Showing posts with label normal. Show all posts

Monday 19 August 2024

houdini's unlock normals....

an equivalent to maya's "unlock normals" in houdini.. usually needed after a polyextrude -

 reverse sop node, followed by a normal node

Thursday 9 March 2023

Thursday 2 March 2023

curl curves with vex

VEX code taken from this forum post, by user F1 -
Curling hair curves with VEX - General Houdini Questions - od|forum (odforce.net)

Very hand bit of code that can curl up your curves for hairstyles, bits of fluff or any other curly things you might imagine. 

If you're going to use a path deform SOP after this (eg, you're using the curves to deform a bunch of snakes) you'll want to Attribute Delete the Normal "N" attribute that this script creates. Otherwise your geo might come out a bit flat/squashed/wrong in places.


 // Primitive wrangle.

#define TWO_PI 6.2831852

addpointattrib(0, "N", {0, 0, 0});
int pts[] = primpoints(0, @primnum);
int npt = len(pts);

// Loop variables.
vector rest = point(0, "P", pts[0]);
vector prev_pos = rest;
matrix3 frame = ident();

for (int i = 0; i < npt; i++)
{
    vector pos = point(0, "P", pts[i]);
    vector delta = pos - rest;
    rest = pos;

    // Make normal. Point normals could be used instead.
    vector normal = normalize(cross(cross({0, 1, 0}, delta), delta));
    if (length(normal) == 0)
    {
        normal = {0, 0, 1};
    }

    // Drive a shape with ramps and multipliers.
    vector axis;
    float ramp, angle;

    // Twist the bend axis.
    axis = normalize(delta);
    ramp = chramp("twist_profile", (float) i / npt);
    angle = fit01(ramp, -TWO_PI, TWO_PI) * ch("twist") / (npt - 1);
    rotate(frame, angle, axis);

    // Bend the curve.
    axis = normalize(cross(normal, delta));
    ramp = chramp("bend_profile", (float) i / npt);
    angle = fit01(ramp, -TWO_PI, TWO_PI) * ch("bend") / (npt - 1);
    rotate(frame, angle, axis);

    // Compute new position and normal.
    vector new_pos = delta * frame + prev_pos;
    prev_pos = new_pos;
    setpointattrib(0, "P", pts[i], new_pos);
    setpointattrib(0, "N", pts[i], normal * frame);
}




// Primitive wrangle.

int pts[] = primpoints(0, @primnum);

vector rest = point(0, "P", pts[0]);
vector prev_pos = rest;
matrix3 frame = ident();

for (int i = 0; i < len(pts); i++)
{
    vector pos = point(0, "P", pts[i]);
    rotate(frame, 0.1, {0, 0, 1});
    vector new_pos = (pos - rest) * frame + prev_pos;
    rest = pos;
    prev_pos = new_pos;
    setpointattrib(0, "P", pts[i], new_pos);
}

Saturday 3 December 2016

Attribute Reorient & giving animated geo new normals for fur

Sometimes you want to reorient your normals on an object. However when you do it & it turns out that your object is animated, the new normals might not behave as expected. The normals are probably "swimming" and not following the verts/points as you'd expect.
This is because you generally want your animation done AFTER the modelling process and your new normals don't know anything about the transforms that have happened before. Simply timeshifting and attribute interpolating doesn't seem to work.

Fortunately there's a node called Attribute Reorient. It will reorient more than just normals, but so far this is the use I've had for it.

Oh - my problem was having a pre animated alembic. I wanted to alter the normals for fur direction purposes, but the pre-animation was making the normals & thus also the fur behaviour freak out. By using the Attribute Reorient to essentially force new normals onto the animated geo I sorted out my problem! WINNER.
*note* seems like it looks for the vectors in the points section..so make sure your stuff is there!

Wednesday 5 October 2016

using object's rotation as a vector value.

A simple method would be to set the world aligned object's vector value to pure X,Y or Z (eg <<1,0,0>> for all X)before it ever gets transformed. As long as inherit attributes is active, the vector will also be transformed/rotated etc)
Useful for setting vectors to point in the direction of the object.