Willow Tree Process (Part 1) & Bezier Curves

The last week has been a bit nuts!

Family is up from the States this week, so there was a family dinner. I also took a bit of free time earlier today to pick up a lovely vintage table for my kitchen, which is sorely lacking in the style department.

I am overseeing and creating content for a couple of new work projects and hope to be able to talk more about them soon – in the mean time, I figured I’d touch a bit on some work in progress I’ve got in mind for an upcoming Organica release.

It’s been a *long* while since Organica offered a weeping willow. Simply put, it’s mainly because I am not real big on flexi prims being linked in to mesh and, back when I did make some, we only had alpha blending (and not masking) – so it would be common to run in to issues where some textures would overlay others in an undesirable fashion.

With those caveats in mind, I figure it’s a good time to revisit willows, because let’s face it – a naturally moving  tree would be a great example of non-animal Animesh.

While I won’t touch on the rigging just yet here, I will at this point discuss my general modelling & UV layout process.

The process begins with a simple cylinder – usually with no more than 12 sides, and with the length divided a multitude of times. I usually create the UV layout for this cylinder pretty early on (even though I do later unwrap the geometry again) because multiple copies will be made of this cylinder and it’d be nice not to define seams for each and every one.

While I could probably define the shape of the geometry by moving the verts around,  lately I’ve taken to adding a Bezier Curve nearby and applying the curve as a modifier to the cylinder, taking care to apply scale and location before any heavy modification takes place.

By using a modifier, non-destructive changes can be made, allowing for a considerable amount of experimentation in placement and rotation prior to committing to a final shape. In this case, I am moving various nodes in the bezier curve to direct the overall direction of the mesh.

How does one use Bezier curves?

Assuming you are already familiar with how to move, rotate, scale and extrude vertices, edges and faces in geometry, Bezier curve nodes are similar to individual vertices (although more accurately, they are very similar to NURBS nodes).

A Bezier Curve in Blender (in object mode on left, edit mode on right)
A Bezier Curve in Blender (in object mode on left, edit mode on right)

Basically, each node along a curve is accompanied by a pair of handles which control the direction of the curve directly before and after the node. They are always 180 degrees from each other. The closer these handles are to the node, the shorter the area of influence they will have.

The default bezier curve will give you two nodes. You can add nodes in between by dividing the space between the two in the same manner as you would between two vertices. You can also extrude additional nodes from the start or end of the curve.

You can either apply this curve to existing geometry (using the ‘Curve’ modifier’) or extrude some basic geometry along the curve (using the ‘Curve’ properties menu, when the curve is selected). There are some additional advanced things you can do to this extruded geometry (such as non-destructive tapering or bevelling) but for the purposes of this demo, I have only applied my curves to geometry as a modifier.

It should be noted at this point that, even at top level geometry, I do not subdivide at this point. This is important, since fixes will later be necessary to clean up the results of proceeding workflow. It’s way less hassle to redirect and merge fewer vertices than more. If smoother, more curvaceous transitions are needed, subdivisions should occur after the final UV layout has been finalized (IE: not now!)

After the trunk has been defined, I select both the mesh and the curve and duplicate them at the same time, adjusting basic position, scaling and rotation at the Object level, then editing individual branches for variety by selecting the appropriate curve and editing in edit mode.

After I am satisfied with all the branch placement, I join each branch to the main trunk using a Boolean Modifier (‘union’ setting) to create the branch geometry in the same object as the trunk and also to join it with the trunk. This leaves behind a copy of the original branch, which can either be archived to a different layer or deleted entirely.

I do this for all of the branches, then go back and check each of the joints between the branches and trunk.

Before (left) and after (right) some vert cleanup at the branch/trunk joint. Also, seam assignment.

Typically, use of the boolean modifier will create extraneous verts, showing the point at which each face intersected with its adjacent geometry. This is, by and large, undesirable and I will usually either merge several extraneous verts to converge on one desired vert OR i’ll select edge loops and slide them in the correct direction, taking care later to remove any remaining duplicate vertices. Checking for N-gons (polygons with more than 4 edges) should also be done at this stage.

Cleanup is done around each joint, after which I attempt another UV unwrap to achieve a nice layout that is fairly clean, not overly stretchy, correctly scaled and laid out in a convenient direction.

Tree trunk & branch UV layout

The overall silhouette and UV layout have been achieved. Further modifications  within these constraints (additional edge loops to create more curves, for example) would be ideal at this point.

We’ll leave it here for now. Next week, I’ll discuss foliage geometry, layout and general texture creation.


Did you know I have a Patreon account? If you enjoy this content, please consider becoming a Patron! It helps me create more like it and offers a variety of rewards. Alternatively, if you like the sorts of things that I make for Second Life, drop by my Marketplace listing or my in-world stores and check out what I have to offer!

Unless otherwise noted, I (Aki Shichiroji) and this blog are not sponsored in any way. My thoughts are my own and not indicative of endorsement by any associated or discussed product/service/company.