Blog

This article is work in progress :)

In April 2011 I held a course in 3d at Denmark’s Design School where we built a real-time ship in 3ds max.
 
We went through how to set blueprint drawings into a 3d scene.
How to read drawings.
How to build the ship’s hull with ribs, and lines.
Strategies.
Textures and UV mapping.
Details.
 
To build a game model is a complex task which involves many challenges. A ship is neither a piece of static environment, nor is it a simple game object. It is something between a big house and a car… It has many details and if you do it wrong it will probably engulf the entire texture and polygon budget for the entire scene or game. In this exercise, we have built a 3D ship model, a warship from the 17th century.
 

First steps


We started to build planes in MAX and place the plan drawings of the ship we would build. When this was done we drew all the ribs which spline shapes by following layouts as illustrated here:

We did the first center rib based on the widest one in the mid-ship area, and then copied it out along the ship’s longitudinal axis (Z) by placing it as shown on the plan. (It is important to use the same rib model as the base because it is important thatvertex number is the same on all the ribs).Then we shaped each rib model individually from the ship center to the stem and rear, following the blueprints carefully (front view). When this initial task was done we roughed out the keel as marked up on the drawings(side view). It was placed exactly in the stage center cordinates 0.0.0
 

The Hull

When the ribs were in place and shaped correctly, we went on to make the surface of the ship’s hull.
There are several strategies. You can attache all splines with each other (we used splines to draw them), and using a surface modifier to create the surface. Or you can do it manually by collapsing all shapes to “editable poly” mode and build them together manually by extruding poly and connect with either snapping or bridging. We used the latter method since it is more sturdy and solid.

We started to collapse the elements for “editable poly” mode. This converts them into polygon models that could be edited. Then we walked to the edge edit mode and extruded side edge to the next rib element with snap tool so that each vertex was snapped to the same vertex on the next item. Then we deleted the interior polygons that were redundant.
When it was done, we ended up with a nice and controlled model of the outer hull surface. Finally we added a shell modifier to extrude the surface and provide the solid form.
 

Adding detail


When the basic hull was finished and welded together, we made deck and fore and aft castles. We implemented mesh planes and adjusted them according to the drawings. Then we added the Shell modifier to give them the desired thickness. The deck planes were aligned from the side view so they followed the cross-sectional drawings accurately. We also referenced to other original drawings from the 17th century.

When the decks was implemented it was time to make the gun ports. We turned off the the Shell modifier and then drew them into the edit poly cut tool in side view. When it was done, we enabled the Shell modifier again to make it solid.
 

UV’s and texture

This type of model should be mapped 100% generic as a piece of environment artwork, as it is quite large. The ship was mapped with a set of textures that all fits together in a large tile set, and can be combined with each other, both horizontally and vertically. Each texture type has it’s own material. The ships generic materials can be braked down to:
 

Bottom boards
Side boards
Details – Rails and ornament
Deck boards
The gallery – black paint

 

Each texture is first created by making a dummy placeholder to evaluate color, material, size and stretch before doing art.
 

We used a single multi-sub object in MAX to apply materials to the model. A Multi-Sub Object is a master material that holds many unique materials together in on material. All with a unique ID number that identifies the material. This number can be added to a polygon in the model, which will then show the material. The idea is that you can use many separate textures on a single mesh without having to split the object to separate parts to apply it.
 

Unwrapping
A ships hull is very curved and consists primarily of convex or concave shapes. This is difficult to express in a UV editor.
 
The whole model was first mapped to generic UV coordinates with a tile size of 4×4 meters by applying a standard UVW modifier and setting it to BOX mapping and setting size on all axes to 4 meters. The UV’s on the model was then reset to match 4 meters. This ensured that the size and pixel resolution of the textures was maintained throughout the whole model, so that all boards had the same size and detail to begin with.
 

UV’s were laid out in rows starting from the middle. By using a systematic approach, we made the model’s UV layout manually piece by piece. We started from the middle, because the shape of the model is least distorted here, and moved us towards both ends of the ship from here. UV’s was streched carefully and evaluated by keeping an eye on the texture. Texture has a circle drawn in to evaluate how much it is stretched.
 

On a curved object it is practically impossible to completely avoid stretch. Instead use the streching to your advantache. A little stretch can make the texture appear more unique, and fool the eye to believe that there is more detail, than there actually is.

 

The Gallery

The Gallery is the aft area and rear parts of the ship. This is the where the captian and officers has quarters.
This is complex to sculpt because all shapes is bending and/or angles. There is also both interior and exterior details to consider.
Windows and gunports makes it even more complex. It is important to follow a clean and well structured workflow here in order to keep the model clean of errors.
 
Key is to separate problems from each other and work on each part separately. Snap vertices to each other and make shure everything fits befor re-attaching objects and welding.

Note: Always start out by using shape from something you already created if possible. In this case detach a chunk from the hull mesh, go to the sub-object tap and start to create the side gallery geometry based on the hull. Use cut tool and edge extrude new polys to shape the gallery.
MAX can hide a selected object from the rest by pressing Alt “Q”. This gives more overview.
 

Gallery ornaments texture


This sheet shows the steps for creating ornamental highres shapes for projection and baking a high frequency normalmap (deep normals).
 
Step one – Select splines and do a line with rectangular shape selected. Look at ship reference and try to simplify the shapes (works best in game meshes when stuff is simplyfied and a little exaggerated).
 
Step two: Collapse to poly and delete the faces pointing backwards. Now select the top front faces and add a push modifier (inside sub object). Shape them as shown.
 
Step tree. round the ends by applying a chamfer operation on the corner edges in the ends.
 
Step four: Apply a turbo smooth modifier. Done
 
See this post for details for specific details on Normals map:
http://skalle.dk/skalleblog/import-normals-to-crazybump
 
This one covers settings for baking in MAX:
http://skalle.dk/skalleblog/projecting-high-frequency-normalmap

 

The masts, sail and rigging

When the basic hull, decks and railing was finished in first pass we contimued by adding the masts and rig. We created rudimentary sail layout and shaped them roughly to outline the rigging.

The next steps on this model would be:
 
Second pass detailing
Adding small parts like guns and ports, fittings, doors and rig detail.
Making textures based on dummy templates.
Sculpting details to the gallery.
Sculpting ornaments.
Creating normalmaps, specular and diffuse maps.
Export to Unity
Adding interior

 
This is the exercises we went through on this project. There is a lot to do on the model to make it a complete game object but at this point the model is well structured, easy to overlook and very nice to work with.

I’ll plan to make a complete tutorial pdf doc based on this project, when i have some time…
Cheers C

At Frederiksberg castle there is a secret room called “The Chinese Room”. In this room are a mirror with an English name and a date scratched into the glass with a diamond ring. The name I have forgotten but the year is 1807 – the year of the Nelson terror bombardment of Copenhagen.


German SS officer “Hauptmann” game character modelsheet. The modelsheet concept is the base for sculpting a well designed game character in 3d.

The character model is build up matching the sheet in all viewports. This way the model ends up matcing the concept very close.

When doing this kind of work it is important to be precise with details and alignment. Any bad alignment ends up causing trouble in the modeling phase. Painting in Photoshop.

This church model was build extremely fast in Sketchup as a research project. It was build with a lego module system based on a box pre-mapped with a 4x4x4 meters texture. This way the object was mapped on the fly with dummy textures, correct UV’s and size.The boxes where instanced and piled on top of each other outlining the church floorplan. Every time a new shape was needed a box was modified and a new component added to the library with the modifications added. The modifications where applyed snapping to the nabour modules vertices. This lego system was later used as conceptual base for the environment building method on the Watchmen production.

This model was made as reference on my courses at the Danish Design School.

A train is a very large game object. It’s not really a prop and it’s not a building either. It has a load of small details but mapped with unique textures it will consume a wast texture amount very quickly.

The train project shows how to map large objects with low texture cost. The model uses only two main textures. One boilerplate texture tile that is 100% general, and another texture with a slot arrangement that holds the details as the front, lamps, driveshafts, etc. Both textures has a very high re-useability value.

Elements from the detail texture are mapped on the model by cutting new edges where needed and modify the UV layout.

When creating the diffuse and normalmaps i prefer to bake them in max before painting anything.

The textures for this model was done by creating special highres projection models with details like nails and bolts, and project them to the texture with the Render to Texture panel in MAX.

I found a load of cool reference in Weitzmans book “Superpower”.  The book contains very good illustrations on those enormous super trains.

Reference: Weitzmans book “Superpower”

This sheet shows the steps for creating ornamental highres shapes for projection and baking a high frequency normalmap (deep normals).

Step one – Select splines and do a line with rectangular shape selected. Look at ship reference and try to simplify the shapes (works best in gamme meshes when stuff is simplyfied and a little exaggerated).

Step two: Collapse to poly and delete the faces pointing backwards. Now select the top front faces and add a push modifier (inside sub object). Shape them as shown.

Step tree. round the ends by applying a chamfer operation on the corner edges in the ends.

Step four: Apply a turbo smooth modifier. Done

When the high frequency map is baked from max it’s time to import it in Crazybump. Crazybump is a normal map generator/editor. It generates all other maps needed based on the imported normals or height information. It is also possible to mix new heightmaps with the normalmap  imported. A very powerfull tool.

In this case we import the normals we just created and get the other maps we need. Normal, Specular and diffuse…

  • Import normals into Crazybump.
  • Go to the diffuse tap and import the lightmap.
  • Make tweaks on the normals, specular and ambient occlusion maps. The specular and ambient occlusion is generated by Crazybump from the imported normal bump information.
  • When done tweaking output all maps from the save menu.

Guide to project texture with the Render to texture panel.

Now this panel is one of the more settings heavy panels in Max. The Render to texture feature we are going to look at now is the projection and bake feature. We are going to project topology from a highres model to the UV’s of a flat plane and generate a normalmap and lightmap based on those UV’s.

Prepare the mesh you want to project well in the scene.

  • Give all shapes and models proper names! The projection mesh should be named “MyName”_Lowres or something like that.
  • Make a square background plane marking the texture area.
  • Copy it and move it up (this will be the projection plane to bake from).
  • Go into Object Proberties and de-select cast shadows (Right click menu).
  • Add UVW modifier.
  • Place the ornament geometry on the plane and arrange it where you want it to be placed on the texture.
  • Make slots on the texture so you are able to add more stuff to it later.

Add a skylight to the scene and check the make shadows flag on.

Now go to the Rendering menu and select Render to Texture.

  • Select a destination path.
  • Select the projection plane we created before. It’s name appears in the panel under Name when selected.
  • Click “Pick” and add the highres models we just created in the menu named Add Targets.
  • Click options. Switch off the Use Cage flag.
  • Switch off Sub-object Levels.
  • Switch On Use existing channel (your UVW’s)
  • Under Output click Add and add a normalsmap and a Lightmap for output.
  • Choose size.
  • Click Render

When the basic hull is done it’s time to create gunports, gallery, railing and other detailing.
The gunports are simply cut in to the mesh below the Shell modifier. Add some new loop on the upper and lower side of the ports and adjust with the edge constraint button selected in the sub object panel. Delete the poly in the port and close the subobject. Switch on the Shell modifier and you got gunports. Now connect the vertices around them as shown on the picture.

The latest demo footage from Chase Ace – Off world leagues. Chase Ace is a super fast topdown retro shooter. Read more in the portfolio…

 

About me

Hello there! My name is Carsten Brandt.

I live in Copenhagen and work as a freelance art director & developer in games.

In addition, I teach computer games at the Danish Design School.


Hire me

You can hire me to do almost any kind of digital artwork, be it top-class concept paintings or any other type of digital media.



Get in touch by dropping me a mail here and i'll get back to you: