Our thanks to Eric Keller for this tutorial. For more of his excellent work, head to his blog.
This tutorial first appeared in issue 84 of 3D Artist.
This tutorial demonstrates an approach towards creating an accurate, photorealistic image of a real butterfly based on reference material.
We will go through the modelling process for the insect in ZBrush 4R7 and demonstrate techniques for creating delicate wings, wrinkles and textures.
We chose to render the image using OctaneRender for Maya, which is extremely powerful, fast and easy to use. The main parts of this project are creating delicate wings from single-sided polygon surfaces and creating an Octane shader that shows a different texture based on the normal direction of the polygon faces.
Blue morphos have completely different colours on the underside of their wings and we will also demonstrate how to capture the brilliant iridescent quality of the wings using a few special OctaneRender nodes. In addition we show you how to create insect hair with Paint Effects and how to render that hair with Octane. The lighting is based on techniques used by professional macrophotographers.
Step 01 – Obtain butterfly references
Any attempt to create a realistic image of an animal has to start with gathering reference. Internet searches are pretty good but images posted online are often mislabelled. The great thing about insects is that obtaining the real thing is easy. If you can afford it, order specimens of the species you want to model from a place like Butterflies and Things (butterfliesandthings.com). Have a specific idea in mind of what species you want to model. For this tutorial we’ll be using Morpho menelaus.
Step 02 – Create a reference image
Butterflies are all about wings so you will want to make sure that the vein pattern is correct (don’t just make it up!). Scan the wings using a flatbed scanner – this may mean you’ll need to remove the wings from the butterfly to do so. Morpho menelaus has completely different patterns on each side of the wing. The topside is blue and the bottom is brown with spots. Scan both sides and then trace the vein pattern in Photoshop. Create a square image that clearly shows the pattern; you’ll use this in Maya and ZBrush as a guide.
Step 03 – Create low-poly wings in Maya
Start by making a rough model in Maya to establish scale even if most of the modelling will be done in ZBrush. Shape a polyPlane so that it roughly matches the shape of the wings and the vein pattern. You only need to create a forewing and a hindwing for one side of the butterfly since the wing can be symmetrically duplicated in ZBrush.
Step 04 – Import the model into ZBrush
Import the wings into ZBrush 4R7 as well as the reference image. Use Auto Groups to separate the wings into Polygroups and then use Group Split to create separate SubTools for the forewing and hindwing. Apply the reference image to the back of the grid so that you can match the reference. Use Mirror and Weld to duplicate the wings symmetrically. Avoid using DynaMesh or ZRemesher or any process that alters the topology. Subdivide the wings so that you have enough polygons to support the detail. Six levels of subdivisions with around 3 million points at the highest subdivision should work well enough.
Step 05 – Sculpt wrinkles
The approach to sculpting butterfly wings is very similar to sculpting clothing or drapery. You want to create the impression that the wing membrane is stretched between the wing veins. Start by using the Move brush to stretch the subdivided wings so that they match the reference. Use the Dam_Standard brush to draw in the wing veins. Don’t worry about the back side of the wings, those faces will be deleted. For the finer wrinkles, alternate using the Dam_Standard brush in Zsub and Zadd mode, then lightly smooth the strokes. A lazy mouse will help you keep the wrinkles straight.
Step 06 – Model the body
Append the polysurface star model, and use the settings in the Initialize palette to establish the body parts as primitives. For the antenna, you can use the Curve line brush to make long, thin cylinders, and then shape them with the Move and Smooth brushes. Create the segments using the Dam_Standard Brush. Don’t go overboard with detail since the surface will be covered in fur, but pay close attention to the number of segments in the abdomen and how they overlap. These segments can be drawn with the Dam_Standard brush. The proboscis is modelled using the Helix3D primitive and the Move brush.
Step 07 – Model the legs
Model a pair of legs using primitives. Pay close attention to the number of parts of the leg as each leg is made up of five major segments. The coxa is the largest part that attaches to the thorax. The thinner segments are the trochanter, femur, tibia and the tarsus. Once you have created one pair of legs, duplicate the SubTool twice and position them. You should have six legs in all.
Step 08 – Polypaint the wings
Create two versions of the texture maps for each pair of wings: a blue version for the top part of the wing and a brown version for the bottom. Delete the extruded wing polygon faces and then duplicate each pair of wings. Use the Standard and Smooth brushes with RGB turned on and Zadd/Zsub turned off. Activate Polypaint by turning on the paint brush icon in the SubTool palette. Then establish a base coat colour for each pair of wings and paint details on the base coats. For the brown sides, pay close attention to the location of the ‘eye spots’. Add the bright orange and pink colours that make up the design.
Step 09 – Polypaint the wings
The body is mostly dark brown and black with some bright orange spots. Use cavity masking and fill with black to bring out the details. Paint the eyes based on your reference images; some morphos have dull coloured eyes, some have bright blue eyes. Paint lightly speckled dots to create an organic feel to the colour. Add colour to the head, antennae, proboscis and legs. The coxa have bright orange spots on them as well.
Step 10 – Generate texture maps
Use the UV Master plugin to create UVs for each SubTool. Export the SubTools at the lowest subdivision level and import into Maya, and edit and lay out UVs in the UV Texture Editor. Place the UV shells for the wings in the 0 to 1 area, lay out the UV shells for everything else in the 1 to 2 range, and export as OBJs. In ZBrush, store a Morph Target for each SubTool and import the edited OBJs into them to import new UVs. Use the Multi Map Exporter Plugin to create Texture and Normal maps for the SubTools. Turn on SubTools and Merge maps.
Step 11 – Import and rig the model
Create a new scene in Maya and import the SubTools with the proper UV texture coordinates as OBJ files. Use the Joint tool to create a simple rig – nothing fancy, just enough to enable you to pose the model, especially the wings. Once the geometry is bound to the rig use a Paint Effects brush to add hair to the surface. The short arm hair preset will work well for insect hair. There’s no need to convert the Paint Effects into polygons, the OctaneRender plugin renders Paint Effects just fine.
Step 12 – Create props for scenery
Create a leaf model for the butterfly to perch on. For best results, use ZBrush to model the leaf similar to how you modelled the butterfly wings.
The end result should be a single-sided polygon surface with UV texture coordinates and polypainted textures. Place the leaf under the butterfly and then pose the legs and wings using your simple joint rig. Next, create a new camera and design a composition that highlights the beauty of the wings.
Step 13 – Prepare for rendering with OctaneRender
Load OctaneRender for Maya and make sure your CUDA graphics card(s) is enabled. Select each piece of geometry and set the Octane Geometry type to Reshapable Proxy. Now set Octane Level to 1, and this will subdivide the model when we come to rendering to create a smoother surface. Add an Octane Sun/Sky environment node. Then, in the OctaneSunSky attributes, set the type to Texture environment. Add an Octane Image texture – for best results use a spherical outdoor HDRI image of a forest environment. Lastly, add an Octane SphericalProjection node to the Projection slot.
Step 14 – Create wing materials
Create an Octane Mix Material and apply it to the wings. Add a Specular Material for slot 1 and a Glossy Material for slot 2. Attach an Octane Polygon Side Material to the Amount slot. This means that the top of the wings get the Specular Material and the bottom of the wings get the Glossy Material. Apply a Glossy Material to the body. For each material bring in the Texture and Normal maps. OctaneRender prefers a Normal map with a flipped Green channel. You can use Photoshop to invert the green channel for all Normal maps.
Step 15 – Make the wings shine
The top of the morpho’s wings reflect different hues based on viewing angle. Create this effect by adding a Mix Texture to the reflection channel of the Specular Material. Next, add an Octane Falloff Texture to the Amount slot, add the blue texture map to the Texture 1 and add a Color Correct Texture to Texture 2. Hook the blue wing texture to the Texture channel of the Color Correct node and adjust the hue correction to -.557 to make it green. Create a preview using IPR and adjust the falloff setting to create the look of shifting hues based on camera angle. If the image fails to update automatically when you make a change, press the IPR button to recalculate.
Step 16 – Tune Octane materials
Use the Render View window in IPR mode to tune the materials. Apply an Octane Glossy Material to the leaf. Use the Specular, Roughness, Index and Texture Power attributes to tune the Glossy Materials. Then use Reflection, Transmission, Index and Roughness to tune the Specular Materials. In the camera’s Octane settings increase Aperture to between 10 and 20 to add depth-of-field blurring, and set the Focal Depth distance or turn on Auto Focus so that the wings are not blurred. Use Exposure and Response to adjust brightness and colour of the image and the Postprocessor setting to add bloom and glare.
Step 17 – Create the final render
In the Render Settings window, set the resolution and the rendering camera for your scene. In the OctaneRender Settings, set the ‘Kernel type’ to path trace and the ‘Max samples’ to 2,000, which should be enough for a high-quality image. You can render in the Render View window or create a batch render of the final image. If you would like to include render passes for compositing, OctaneRender has a long list of pass options, and these will be rendered as separate image files.