Draw Curve

The Ultimate Houdini node reference

Visit the Node Bible

To learn more, please log in or sign up for free to explore the Node Bible.
Write your awesome label here.

Draw Curve

Write your awesome label here.

The Draw Curve SOP allows you a free-hand method of drawing curves.

Drag to resize


    The draw curve sop is perfect for times when you want to free-hand draw a curve in your viewport.  This node works best when paired with the resample and convert sop.  The draw curve will also create useful attributes along the curve.  You can also snap the drawn curve onto a construction plane or geometry.  The First input on this node is asking you for geometry that you would like to project on to.  The second input is there to add in any existing curves to whatever you draw out.

Drag to resize

Main Parameters:


--  Create Width Attribute & Radius = This will create a primitive attribute called "width."  This attribute could be used by another node, (such as the polywire or sweep) to determine the width of a wire.  In practice, I skip this parameter and instead set the @width manually with a point wrangle.  Even though width is created as a primitive attribute, it's most likely that you'll need to set it as a point attribute to get any use from it.

--  Tool =  There's a primitive attribute called "stroke_tool" which gets set to whatever value you set here on the tool parameter.  In practice, this basically allows you to create a user-defined id for each curve that you draw.  In practice, you could, as an example, use this @stoke_tool to determine which shader a drawn curve gets.  (ex: an index of 1 = gold shader while an index of 2 = silver shader).  Set this id before you draw each curve.

--  Create Color Attribute/Color =  Creates a @Cd primitive attribute 

--  Create Stroke Attributes = This stores attributes such as @stroke_angle, v@stoke_dir, stroke_hit, @stroke_pressure, @stroke_prim, @stroke_roll, @stoke_tilt, @stroke,time, v@stroke_uv, v@stroke_opacity, v@stokeprojcenter, v@projdir, and @stroke_projtype.  Most of these attributes are capturing data from your tablet.  Most useful is probably the @stroke_pressure because that allows you to take your tablet pressure and use it to control other attributes (such as the width or opacity).  These attributes can then be used by other nodes in your network to determine width/opacity/pscale effects.  

--  Opacity = Sets the "Opacity" attribute value.  This can be used by other nodes down the line to control the opacity of something.


--  Live Reprojection = When trying to draw curves onto an object, there are different methods for doing so.  In general, the defaults of "None" ought to work for most situations - unless you have deforming geometry.  If the geometry is deforming, then you have two options to keep the curves on the surface.  "Send Rays" which will reproject the curve by resending rays on underlying changing collision geometry.  And you have "Use UVs" which uses the uv coordinates from the initial projection on changing collision geometry. 

--  Trim Curves =  When drawing curves onto an object, parts that do not hit the mesh will be deleted when this is turned on.  In general, it is advised to leave this on.

--  Projection/Show Guide Geometry/Projection Center =  You have various options for how you'd like to draw the curve.  XY, YZ, and ZX planes allow you to draw along a projection plane.  You can move this projection plane around in x,y,z.  You can also use "Screen Plane" and that is useful for times when you'd like to use your viewport to define a particular plane angle.  Geometry will project curves onto geometry.


--  Enable Stroke = allows you to enable/disable the stroke
--  The rest of these attributes relate to the attributes which are described above in the "Curve" tab.  If you need to change out any of these attributes after the stroke is drawn, then you can do so here.