Jump to content


Popular Content

Showing most liked content on 01/07/2019 in all areas

  1. 4 points
    Hi everyone, Herer's a little personal project I did over the last year. No keyframes where used for the animation. Each movement is generated through physical simulation or procedural noise. The Bananas and Pears are done in H16.5 using CHOPs controlled Bones and then fed into a FEM simulation. All the other fruits are done using H17 and Vellum. ÖBST: "How would fruits move if they could?" Hope you like it.
  2. 3 points
    This operator allows you to call a collection of nodes on any data or simply no data (generators). It gives you full control over how the lambda function should be run.
  3. 2 points
    not by default, but just open Hotkey Manager (Edit/Hotkeys..) and set your custom hotkey for Houdini/Panes/Network Editor/Reconnect Around Selected
  4. 1 point
    Hold the Y key and drag across the lines you want to break
  5. 1 point
    string pointattribs[] = detailintrinsic(0,"pointattributes"); this gives you a list of pointattribs that allready exist, the problem is to create the attributes on your new point. The problem is that you dont know the attribtype (float,string,vector). You can somehow use attribsize combined with pointattribtype to check what it is. It becomes alot of if statements if you want it to be rock solid. Personaly i have ignored some types to make it simpler. void transferPoint(int input;int fromPoint ;int toPoint){ string pointattribs[] = detailintrinsic(input,"pointattributes"); foreach(string name;pointattribs){ int found = 0; int size = attribsize(input,"point",name); int type = pointattribtype(input,name); if(type == 0){ int attrib = pointattrib(input,name,fromPoint,found); setpointattrib(0,name,toPoint,attrib,"set"); } if(type == 1 && size == 1){ float attrib = pointattrib(input,name,fromPoint,found); setpointattrib(0,name,toPoint,attrib,"set"); } if(type == 2){ string attrib = pointattrib(input,name,fromPoint,found); setpointattrib(0,name,toPoint,attrib,"set"); } if(type == 1 && size >= 2){ if(size == 4){ vector4 attrib = pointattrib(input,name,fromPoint,found); setpointattrib(0,name,toPoint,attrib,"set"); } else{ vector attrib = pointattrib(input,name,fromPoint,found); setpointattrib(0,name,toPoint,attrib,"set"); } } } }
  6. 1 point
    you can freeze an animated object on the first frame with Timeshift SOP, do the transfer, and then reapply the animation with Attribute Copy SOP. this is topology dependent so you can't do any topology alterations in this process.
  7. 1 point
  8. 1 point
    it's pretty straightforward out of the box just use v@N, v@up or p@orient on your instancing points in such a way that resulting reference frame has Y pointing in up-down direction of your ocean (so in normal direction of the ball) and X in the direction you want wind to blow in in your file, since v@N is pointing outwards and v@N defines Z axis, your ocean deforms in a tangential direction and therefore you are seeing weird deformation here is the modified file ts_ocean_on_ball.hip
  9. 1 point
    what if the self buttons were creating DOP setups inside one SOP network instead of having a Geometry node, a DOP network for simulation and another Geometry node to import the data and save to disk. It makes much more sense to see the data flow from top to bottom in one network without having to jump to different levels for no reason. maybe it's just me... grains.hipnc
  10. 1 point
    More VR tools, particularly a HMD preview mode, if not from the viewport, then from a flipbook (which would require a top/bottom latlong veiwport display from the spherical camera), or even the render window as a last resort. This would make Houdini infinitely more usable for VR.
  11. 1 point
  12. 1 point
  13. 1 point
    Basic: // 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); } Advanced: // 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); } curl.hipnc
  14. 1 point