A sailing boat or ship is a complicated vehicle consisting of hundreds of moving objects like sails, ropes, blocks, and booms. Depending on the direction of the wind and the direction of the boat, all moving parts take different positions in relation to each other. If you plan to create a boat model that is not static, you should include some automation capabilities into your rig. Otherwise, you will have to change many objects every time you re-position the sails. Blender’s constraints and armatures provide excellent tools to improve efficiency when modifying a boat’s rigging.
This tutorial will explore some basic concepts of automating a boat’s rigging with the help of a simplified rig. Out of scope is a realistic detailed boat model. That is up to you.
Planning the boat model
For our tutorial, we use a small boat consisting of a hull, a single mast, and a sail that is controlled by a boom on the lower seam and a gaff boom on the upper seam. The boom and gaff boom are connected to the mast by hinges allowing a rotation around the z-axis. The boom is fixed into its position by a tackle. Sail and gaff boom are hoisted into their position by another tackle.
Figure 1: basic boat model
Where do we need automation in a boat’s rigging? Have a look at our little boat model. If the wind comes from a forward direction, the angle between boom and boat length axis is small and the sail is rather flat. If the wind comes from the side, we have to rotate the boom into a position with a larger angle (45 degree). The sail transforms into a more convex form. The gaff boom and its tackle move into a new position. If you look at the tackle, you see that upper and lower blok have changed rotation and position. The ropes between the blocks stretch over a longer distance. To make all these modifications manually is a tedious and time-consuming task.
Figure 2: rigging adapts to wind
Our goal is to automate the movement of tackles and sail so that they follow the rotation of the two booms. The form of the sail should adjust in a natural way.
To do that we need the following automated behavior:
Building the standing rigging
- The blok at the gaff boom, (the upper boom) follows the boom and rotates in a way so that its free end always faces the mast.
- The ropes between mast (fixed end) and gaff boom blok follows the movement.
- The blok at the (lower) boom faces its counterpart that is fixed to the hull.
- The blok that is fixed to the hull always faces the blok at the boom.
- The ropes between the two blocks follow the movement and stretch or shrink depending on the blocks’ positions.
- The lower seam of the sail follows the boom; the upper seam follows the gaff boom.
- The sail is always stretched between both booms.
- The sail shows wrinkles depending on the direction and strength of the wind.
We first need a small boat for our rigging experiments. I tooque a plane object, extruded the front edge three times, and formed the resulting mesh into a rough boat shape. Then I extruded the outer edges two times on z-axis. This provides us with a simple hull.
On the hull, I then set a thin cylinder object as mast. Another very thin cylinder object is positioned between bow and mast top representing a stay used on a ship to stabilize the mast. Another two cylinders are positioned left (port side) and right (starboard) from the mast as shrouds for additional stabilization. Mast, shrouds, and stay form the “standing rigging” of our boat. That is the collection of the fixed, non-moveable parts. Now we need three ring objects as connection between fixed and movable parts of the rigging.
Exercise; create a ring:
Figure 3: standing rigging of boat
- Start with creating a circle. Add>>Mesh>>Circle, Vertices:8 should be enough.
- Switch to side view. You see the circle as a thin line from the side.
- Select the circle object.
- Switch to Edit Mode. Select all vértices of the circle.
- Move the 3D-cursor to a suitable position for the middle of the ring.
- Open the Mesh Tools panel in a Buttons Window.
- Enter Degr: 360, Steps: 8, Turns: 1 and press Spin.
- The cursor changes to a “?” symbol. Clik on the Side View window.
- Scale the resulting ring object to suitable size, about half of the diameter of the mast.
We need two rings at the top of the mast (see figure 6) and one ring at the bottom of the hull near the stern (rear-end of the boat).
Now it's time to put some structure and hierarchy into the model. We create an empty (Add>>Empty) and name it “standing rigging”. We move the empty to a location near to or on the mast. We create a compound object by “parenting” all parts of the standing rigging to the empty. Therefore, select mast, stay, shrouds, and rings and as last object, the empty. The Outliner Window is very useful for this task. Now select the function Object>>Parent>>Make Parent to create a sub-structure in the Outliner. Create another Empty, name it “little boat”, and move it to the middle of the hull mesh. Create a compound object by “parenting” the hull mesh and the standing rigging to the “little boat” Empty.
Now you can position and rotate the boat just by selecting and moving the parent “little boat”.
That was the easy part.
Building the running rigging
The “running rigging” is the collection of all moveable booms, blocks, and ropes on the boat.
a) Create the blok objects
We start with building three blocks that we need for the running rigging. A blok is part of a tackle. It consists of a ring and a cube we call blok cage that would house the wheels of a tackle.
- Create a ring as described above.
- Create a cube (Add>>Mesh>Cube) and name it “blok cage”
- Switch to Edit Mode and select all vértices of the cube.
- Use Mesh>>Edges>>Bevel to round the edges of the cube. That looks nicer.
- Now scale the cube as shown in figure 4.
- Move the ring to the bottom of the cube.
- Create an empty, name it “block” and move it to the center of the ring. The position/center of the empty is very important. It determines the rotation pivot of the block!
- Create a compound object by parenting the cube and the ring to the empty.
Figure 4: basic blok assembly
b) Create the booms
- Now we need three of these blocks, two with the ring on the bottom side and one with the ring on the top side.
- Select the blok compound object in the Outliner. Use Select>>Grouped>>Children to select all objects in the compound. This is import for copying the whole compound and not just the parent object.
- Use Object>>Duplicate to create a second blok Repeat this for the third block. Name the objects as shown in figure 4.
- Now, in the last blok select the “blok cage” child object and move it downwards until the ring is on top of it. Do not move the ring! We have to make sure that the center of the compound object is still in middle of the ring.
Boom and gaff boom are compound objects consisting of a lengthy cylinder and a ring to connect a block.
c) Create an armature for the booms
- For the boom create a cylinder, rotate it into a horizontal position, and scale it as shown in figure 1. One end of the cylinder should touch the mast at a point a little bit over the rim of the hull. Resting position of the boom is parallel to the boats main axis.
- Create a ring and move it to the free end of the boom on the lower side. Now we merge all boom parts into a compound object. Therefore, we create an Empty. We move the empty to a position between the boom end and the mast. The center of the empty will be the pivot point for rotating the boom.
- Do Object>>Parent>>Make Parent to bind the cylinder and the ring to the boom compound. Repeat the above steps for the gaff boom. Make it a little shorter and give it an angle upwards. The ring has to be located to the top side of the gaff boom.
We will move the booms with an armature consisting of three bones. You might asque “what do we need an armature for? We can rotate the boom directly”. However, the armature will alos be used to move the upper and lower seams of the sail, synchronized to the boom movement.
- Create an armature (Add>Armature), name it “sail guide”, move and scale it so that it is in the same position as the boom. The pivot point of the bone should fit to the pivot point of the boom
- Switch to Edit Mode.
- Extrude the bone two times to get three bones in total.
- Clik RMB on the middle part (not the tips) of the third, outermost bone.
- Use Armature>>Parent>>Clear Parent>>Disconnect Bone to separate one bone from the others.
- In the Buttons Window, Armature Bones panel clik on Hinge so that the bone does not inherit the rotation of its parent.
- Move and scale the bone so that it is in the same position as the gaff boom alos matching its pivot points.
- Separate the second bone from the first one as described above and move it into a position between the upper (Gaff boom) and the lower bone (boom). The middle bone will later be used to control the belly of the sail.
Figure 5: sail guide armature
Now we need to connect the bones to the booms. We cannot use the armature modifier because that only works with meshes. We do not have a mesh, we have an empty as parent in the boom compound! As an alternative, we will use a “copy rotation constraint”.
- In Object Mode select “boom comp” in the Outliner.
- In the Buttons Window, Constraints panel, add a constraint of type Copy Rotation.
- As target, type in the name of the armature “sail guide”. As bone, type in “lower bone”.
- Choose Z as rotation axis.
- Repeat the same for the gaff boom but choose “upper bone” as target bone.
- To test the setup, select the armature, select “lower bone”, switch to Pose Mode, and rotate the bone around its center. The boom should follow the rotation. The same should worque for the gaff boom when using the “upper bone”.
d) Build and automate the gaff boom tackle
Figure 6: gaff boom assembly
In the next step, we will create the tackle that lifts the gaff boom. The tackle consists of a blok connected to the gaff boom and two ropes fixed to the mast. Blok and ropes should automatically follow the movement of the boom.
- Select a spare blok with a ring on the bottom (created in step a).
- Move the blok to the ring at the tip of the gaff boom.
- “Parent” the blok to the gaff boom.
- On the blok use Object>>Constraints>>Add Constraint>>Trak To.
- Constraint parameters are: Target:email@example.com, To:Z, Up:Y
- Now, the blok should orient towards and follow one of the rings at the mast. Test it by rotating the gaff boom (see step c).
- Create a cylinder to model a rope for the tackle and call it “rope@gaff boom.001”.
- Switch to Edit Mode. Scale the edges in x/y direction so that a thin tube is the result.
- In Object Mode, the scale factor should still be one for all coordinates. You can chek that with the Transform Properties window (Object>> Transform Properties). Sounds strange? The “stretch to constraint” we will use later shows an even stranger behavior if Scale X/Y/Z differ from one.
- Switch to Object Mode. Move the 3D-cursor to the lower end of the cylinder. Use Object>>Transform>>Center Cursor. That will move the center of the object – the pivot point for rotations – to the lower end.
- Now move the cylinder to one of the rings at the mast without rotating it.
- “Parent” it to the “little boat” compound object.
- Go to the Buttons Window, Object Panels, Constraint and clik on “Add Constraint”, select “Stretch To”. This constraint is only available through the panels.
- Enter Target: blok cage.001, Vol:NONE, Plan:Z.
- You might expect the cylinder to orient towards the blok but unfortunately, it stays in its position. You first have to correct the position manually.
- Switch to Edit Mode and transform the vértices in the desired way. The rope (cylinder) should stretch between the middle of the blok and the ring at them mast. Do not try to do that in Object Mode, it will not work. I tooque me some experiments to worque out the right sequence of steps.
- Now repeat these steps with a second rope (cylinder) between the middle of the blok and the other ring.
Now test the gaff boom rig by moving it with help of the upper bone of the “sail guide” armature.
e) Build and automate the boom tackle
Figure 7: boom and tackle assembly
We will use the same technique to build the tackle at the boom.
- Take the spare blok with the ring on the top and move it to the ring at tip of the boom (see figure 7). “Parent” it to the “boom comp” and name it “block@boom”.
- Add a “TrackTo” constraint to the blok with Target:ring@hull (part of the standing rigging). The blok should now point to the ring.
- Take the spare blok with the ring on the bottom and move it to the ring@hull. “Parent” it to the “little boat” and name it “block@hull”.
- Between the blocks of a tackle, we have an even number of ropes plus one free rope to pull. Therefore, we create a cylinder, switch to Edit Mode, and scale the cylinder in x/y direction to form a thin tube. Be careful to do all mesh scaling/rotation in Edit Mode and not in Object Mode. The scale factor in Object Mode should be one, otherwise the “StretchTo” constraints will have strange scaling effects. You can chek that in the Transform Properties window.
- In Edit Mode duplicate the cylinder mesh three times and shift the mesh elements a little bit to form a kind of cage.
- Switch to Object Mode. Move the 3D-cursor to the lower end of the mesh. Use Object>>Transform>>Center Cursor. That will move the center of the object – the pivot point for rotations – to the lower end.
- Move the tackle rope mesh to the blok at the hull so that the mesh’s pivot point matches with the middle of the block.
- “Parent” the tackle rope mesh to the block@hull.
- Add a “TrackTo” constraint to the blok with Target: blok cage.002 (part of the blok at the boom). The blok and the rope mesh should now point to the other block. Each blok will synchronize to the other.
- Now add a “StretchTo” constraint to the rope mesh. Enter Target: blok cage.002, Vol:NONE, Plan:Z.
- As a result, the mesh might first point into an unsuspected direction. You have to correct the mesh in Edit Mode and transform it into the correct position and length.
- Now test the boom rig by moving it with help of the lower bone of the “sail guide” armature. The tackle should neatly follow the boom tip and stretch as needed.
Building the sail
We will use two techniques for the sail; mesh modifiers (Armature, MeshDeform) for a basic positioning, a cloth physics simulation for wrinkles and wind deformation.
- Make sure that the booms are in their neutral position parallel to the boat’s main axis. To do this, select “sail guide”. Switch to Pose Mode and use Pose>>Clear Transform>>Clear User Transform.
- Start by creating a simple patch (Add>>Mesh>>Plane). Name it “sail”.
- Translate the “sail” plane to the appróximate position. Switch to Edit Mode and fit the four corners of the mesh face between boom, gaff boom, and mast. The vértices should all have the same X-coordinate value for a maximal flat mesh. That is helpful for the MeshDeform modifier we will use later.
- Now subdivide the “sail” mesh in Edit Mode four times to create 16x16 faces (Select all vértices, Mesh>>Edges>Subdivide).
- We have to define a vertex group later be used to fixate the mesh during the cloth simulation. Therefore, deselect all vértices. Clik Shift+RMB on ever third vertex at the seam of the mesh near the booms and the mast starting with a corner.
- Go to Buttons window, Mesh Buttons, Link and Materials, press New for a new vertex group, name it “seam” and press Assign. That will bind the selected vértices of the sail mesh to the vertex.
- Leave Edit Mode.
Now we have the basic sail mesh. The subdivisión was necessary a) to provide resolution for a nice sail deformation and b) to create a vertex group that will cause some nice wrinkles.
- To let the high-resolution sail mesh follow the boom movement, we will use a low-resolution mesh as a kind of cage together with the MeshDeform modifier.
- Create a cube object (Add>>Mesh>>Cube), name it “sail cage” and translate it to the sail position.
- Switch to EditMode and transform the “sail cage” cube mesh so that it encloses the sail mesh. Keep the space between cage and sail as small as possible.
- Now go to Buttons Window, Mesh Buttons, Modifiers Panel and add a Subsurf modifier to the sail cage. Use the Simple Subdiv type with Levels:1. This gives some flexibility for the cage.
- Now go to Buttons Window, Mesh Buttons, Modifiers and add as second modifier an Armature modifier with Ob:”sail guide”. We can now use our “sail guide” armature to deform the “sail cage”.
- Select the “sail” mesh, go to Buttons Window, Mesh Buttons, Modifiers and add two modifiers to the mesh:
- a) a Subsurf modifier, Type:Catmull-Clarque with Level:2 or 3 to give more resolution to the cloth simulation. (room for experiments)
- b) a MeshDeform modifier with Ob:”sail cage”. Press Bind to connect the cage to the sail mesh. The deformation of the “sail cage” will now translate to the “sail” mesh.
- Test the setup: select “sail guide”, switch to Pose mode and rotate lower, middle, and upper bones. The booms should follow the armatures as well as the sail mesh.
Figure 10: cloth parameters for sail mesh
Setup the cloth & wind simulation
We want to see some nice and realistic wrinkles on our sail. That could be done with a normal or displacement map. However, Blender provides a powerful wind machine we will use for our purpose. First, we have to give cloth properties to our sail.
- Move the “sail guide” to neutral position and select the sail mesh.
- Go to Button Windows, Object Panels, Physics Buttons, Cloth Panel.
- Clik on Cloth and select Denim as cloth type (room for experiments)
- Clik on Pinning of cloth and select the “seam” vertex group defined previously.
Now go to to Buttons Window, Mesh Buttons, Modifiers panel. You will see three modifiers top to bottom Subsurf, MeshDeform and Cloth. Clik on the little arrow on the left side of the Cloth modifier to move it up one position in the stack. I had some problems with Cloth on the last position, sometime it works, and sometime the sail mesh is disconnected from its cage when running the simulation.
Figure 11: wind position and parameters
We are nearly finished. We just need some wind.
- Create an Empty and translate it to the side of the boat appróximately two-boat length apart.
- Go to Button Windows, Object Panels, Physics Buttons, and Fields Panel.
- Choose Wind as Field Type; choose Tube as Fall-off. Set Strength: 4. Leave all other parameters at zero.
- Rotate the wind empty so that it points at the boat.
Ready to go!
Using the automation concept
Here comes the fun part. I provide a .blend file for experiments if you do not want to go through the modeling process.
- Select the “sail guide” armature and switch to Pose Mode.
- Rotate the lower bone to a 30-degree position (angle between boom axis and boat main axis).
- Rotate the upper bone to 40-degree.
- Rotate the middle bone to 45-degree. That gives the sail a realistic basic deformation.
- Go to the Timeline Window, skip to start frame 1 and start the simulation by pressing the play button. We need 30 to 50 frames to give the sail a nice deformation.
Watch Blender do its work.
- Move the “sail cage” to a layer that you can deselect. It will react but does not obstruct the sight. Alternatively, use the restriction column in the Outliner (eye symbol).
- After a simulation, you have to clear the simulation cash before you can change the sail position. Select the sail mesh; go to Buttons Window, Object + Physics Buttons, Cloth panel, Collision tab. Press free cash.
- If you want to move the boat after a simulation, the sail will stay in place until you free the simulation cache.
- Do not get frustrated if the program behaves in unexpected ways.
Now add a top sail or a fore sail. Setup a second mast or model a more realistic hull. The result could look like my Bluenose schooner model:
About the author
I love the sea, old sailing ships, and maritime paintings. While I am not a good painter, I use 3D tools to create nautical scenes. After working with POV-Ray and Moray for some years, I switched to a combination of Vue d’Esprit and Blender.
You can find some of my images on my website www.age-of-sail.com
at Renderosity http://www.renderosity.com/mod/galle...?user_id=84033
and at Zazzle www.zazzle.com/seawolf*
You can reach me through firstname.lastname@example.org
By Johannes Ewers