Sculpting a Unique Canyon Environment with ZBrush and 3ds Max

2026/09/04

Introduction

The use of ZBrush in the console and PC game industry has long been standard practice. Previously, ZBrush may have been seen as a program in which artists could only create extremely high‑detail models, the cost of which was too high to present in real‑time applications — but in reality, that is not always the case.

In the following tutorial, you will learn how to use ZBrush to generate meshes suitable for use in real‑time engines, using a variety of sculpting methods and custom brushes, as well as the built‑in procedural optimization and UV unwrapping features that are now a valuable addition to the software.

You will also learn how to use 3ds Max to prepare this mesh for CryEngine, and how to create the advanced textures needed to drive CryEngine's powerful shader effects.

Finally, this tutorial will cover CryEngine's new experimental lighting feature "Voxel‑Based Global Illumination," and how to render screenshots before applying adjustments and cinematic effects in Photoshop to ensure the best possible presentation of the image. Let's get started!

Step 01: Gathering Appropriate and Informative Reference Material

Gathering suitable reference material is one of the most important preliminary steps when starting any project. I took care to ensure that my reference images were all of relevant subjects and had not been subjected to distracting post‑processing effects (such as extra contrast or color shifts) that might mislead me when I sculpt the rocks in ZBrush. I also looked for images with as natural lighting as possible, so that I could better understand the material surfaces when creating textures.

Canyon reference photo collection provided by Dollar Photo Club

A selection of some of the reference images I gathered, provided by Dollar Photo Club

Step 02: Designing in 3ds Max

The following steps apply to the canyon wall mesh, from modeling through to the texture and shader setup. Once satisfied with the processes involved, I will apply all these same steps to the sandy ground of the canyon scene.

So now it is time to create a version of the canyon wall and floor meshes. Before I do so, I set my units to meters to ensure I am working with accurate scale. I do this by going to Customize > Units Setup and setting the Metric Scale dropdown to Meters.

Next, I start with a simple cube primitive and evenly subdivide the geometry on the mesh. Entering the vertex sub‑object mode, I can then use Soft Selection to push and pull the mesh into the desired rough shape.

Basic canyon wall mesh setup in 3ds Max

Basic mesh setup in 3ds Max

Step 03: Preparing for Sculpting in ZBrush

I am happy with the block‑out mesh of the canyon wall, so I export it as an .OBJ file, ready for ZBrush. Inside ZBrush, using the Import function, I load my mesh and draw it onto the canvas. Pressing P in ZBrush enables perspective in the viewport, and the focal length can be increased or decreased using the slider in the Draw menu. I like to use perspective when sculpting large organic forms; in this case, it will help me visualize how the final asset will look when we later render it in CryEngine.

Setting up perspective viewport inside ZBrush

Setting up the perspective in ZBrush

Step 04: Sculpting with DynaMesh

At this stage, I still want my sculpting to be very loose. Using DynaMesh will allow me to sculpt the mesh and completely change its shape without worrying about my topology. Drawing my mesh onto the canvas, I then go to the Geometry tab and expand the DynaMesh menu. Keeping the resolution at 128 and pressing the DynaMesh button, the topology on the model immediately updates while still retaining its original shape. I can now continue sculpting, and when I want to DynaMesh again, I simply hold Ctrl and drag on the canvas area outside the model to update the topology.

ZBrush DynaMesh panel adjusting canyon mesh topology

DynaMesh can change the model's topology with the click of a button

Step 05: Refining the Sculpt

I find that the most useful brushes in the early stages of sculpting are the Clay Tubes, Smooth, and Move brushes. Since the mesh is still at a low DynaMesh resolution, I use Clay Tubes to create large grooves in the mesh while trying to establish some of the major shapes present in the reference images. As I sculpt, I occasionally use DynaMesh to ensure the topology remains even throughout the model, as described in the previous step.

When I am satisfied with the initial shapes, I click the icon in the Geometry tab again to turn off DynaMesh. I am now ready to subdivide and sculpt more detail into my mesh. At this stage it is worth remembering that the sculpt will be used to create a real‑time mesh, so it does not have to be extremely detailed; as long as the major forms are present, it will work fine.

Refined low‑detail canyon rock sculpt inside ZBrush

Although the detail is still very low, the sculpt is gradually taking shape

Step 06: Custom Brushes for Easier Sculpting

The rock formations present in Antelope Canyon were carved by floodwaters carrying fast‑moving debris, which over a long period of time formed flowing grooves on the rock surfaces. With this in mind, I thought that using a brush with some additional settings would help me sculpt the rock and more easily simulate this effect. I will create a custom brush by first selecting the Standard brush, Freehand mode, and selecting BrushAlpha 48. I set the Brush Focus Shift to ‑100, and in the Brush menu, under the AutoMasking menu, I simply check BackFaceMask.

Custom ZBrush brush creating flowing rock grooves

With a little smoothing and different intensity and size, the custom brush can do a lot of the work

Step 07: Using ZRemesher and Clay Polish

Using my custom brush works well, and I am now happy with the rock and ready to create a polygon version with a poly count more suited for a real‑time application. Clicking the Geometry menu and expanding the ZRemesher tab, I set my target polygon count to 80. This is in thousands, so a value of 80 will give us an 80,000‑polygon mesh. For a real‑time asset, this may seem high, but since this will be one of only a few meshes in the scene, it is perfectly fine. You can choose a much lower polygon count if you wish; ZRemesher is very flexible in this regard.

After pressing the ZRemesher button, the result looks a bit soft, but using Clay Polish with a Sharp value of 20 and an RSharp value of 2 will restore the sharper creases we previously sculpted.

ZRemesher and Clay Polish result on canyon rock mesh

The result of using ZRemesher and Clay Polish on the mesh

Step 08: Unwrapping with UV Master

The model now needs UVs in order to be exported and loaded into CryEngine. I will use UV Master, located in the Zplugin menu. Clicking "Work On Clone" clones the mesh and applies a white material to the mesh for easier viewing. Now I enable Control Painting and press the Protect button, so I can paint all the areas of the mesh where I want to avoid opening UV seams. This is visualized with bright red coloring on the mesh.

Next, I click the "Attract" button and paint the rest of the mesh before pressing "Unwrap." This will take some time, and once done, I can check the UVs by clicking Flatten (UnFlatten returns to the mesh). If the UVs are appropriate and there are no seams where I don't want them, I will export the mesh as an .OBJ ready for import into 3ds Max.

UV Master control painting: red protect areas, blue attract seam areas

The bright colors indicate areas that will remain seamless (red) and areas that will attract mesh seams (blue)

Step 09: Exporting from 3ds Max to CryEngine

After importing my rock wall into 3ds Max, I will create a dummy node at world space coordinates 0,0,0. Then, I will use the "Select and Link" button to add the rock mesh to it. Next, I need to create a Multi/Sub‑Object material with at least two slots: one for the floor, one for the sand, and one for the rock material. I can add more if I need them for other materials I may create for the scene later. I will now select each material and set the shader type to Crytek Shader before saving the scene in the CryEngine directory. My file path looks like this, but you may need to create your own "Objects" folder: CRYENGINE\gamesdk\objects\antelope_canyon.

Next, with CryEngine running in the background and my material selected in the 3ds Max Material Manager, I press Create Material in the CryENGINE 3 Exporter. I will be prompted to save the material in the folder directory I just created. Then, before exporting my rock mesh, I must assign the correct polygon ID to its faces. I set the rock to Material ID 2, so I select all the polygons on the rock mesh and assign them to Polygon ID 2. I can now add the mesh node to the CryENGINE 3 Exporter and click Export Node. Moments later, I can now load my mesh in CryEngine's Brush tab with the correct shader applied (but no textures yet).

3ds Max material editor setting Crytek Shader

It is important to set the material type to Crytek Shader at this stage, as it is the format the engine understands

Step 10: Creating the Rock Texture Maps

In order for the rock to convey the type of surface detail I want, I need to create various texture maps to drive the CryEngine material. I will start with the diffuse map, sometimes called the albedo map. Using cgtextures.com I am able to source a variety of images that help with this process. I set the background layer to medium gray, then use simple Photoshop layer modes such as Overlay and Multiply along with the opacity slider to quickly create subtle rock texture effects.

Finally, I use Hue/Saturation adjustments to ensure the overall diffuse color matches my reference as closely as possible. When I am satisfied with the diffuse texture, I save two versions: the original and another with a subtle hue/saturation adjustment. I will eventually set up the CryEngine shader to blend between the two.

The next map is a specular map. This is the easiest map to create: it should be a simple gray tone, with RGB values ranging from 53 to 61, representing the non‑metallic quality of the stone/rock.

I then create the gloss map to define how rough or smooth the rock material is. For this, I start with another photo and use the Desaturate function from Image > Adjustments > Desaturate to remove color from it. Then, using the Levels adjustment from Image > Adjustments > Levels, I slightly increase the contrast to emphasize the light and dark tones in the texture.

I like to keep all textures within a single .PSD file, each grouped under its own folder, which helps with exporting the textures later.

Photoshop PSD project organized rock texture layers

Organizing the Photoshop file makes it easier to save individual textures

Step 11: Creating Height and Normal Maps

For this step, I will use a program called CrazyBump. You can download a free demo version from the CrazyBump website, or there are many great alternative free programs that allow procedural generation of these textures.

To give the program a good starting base, I copy my diffuse texture, desaturate it, and use the Levels adjustment again to increase contrast. To emphasize the striations in the rock, I create a new layer and manually paint some horizontal lines with a low‑opacity black brush. CrazyBump will interpret the dark and light values in this texture as different height levels and create the normal map and height map accordingly. I save this texture and load it into CrazyBump, where I can use the sliders to fine‑tune the resulting normal and height maps. Once I am satisfied with the results, I bring the textures back into Photoshop and add them to the respective groups in the .PSD.

There are some guidelines for saving textures for CryEngine, all detailed further in the official CryEngine documentation at docs.cryengine.com. The main things to remember are that the gloss map must be placed in the alpha channel of the normal map and saved with "_ddna" at the end of the filename; your height map must also be placed in the alpha channel of a blank texture and saved with "_displ" at the end of the filename.

CrazyBump UI generating normal and height maps

CrazyBump allows the creation of various textures in a matter of minutes

Step 12: Setting Up the CryEngine Shader

Switching back to CryEngine and pressing "M" to bring up the Material Editor, I first set the diffuse and specular color values to white and the smoothness value to 100; this will ensure that my textures are the only components driving these values in the shader. Next, I simply plug each texture into the corresponding slot in the shader.

Currently, the CryEngine shader does not support displacement maps or blend layer functionality by default, so I need to check these features in the Shader Generation Parameters tab. Once done, I will have access to more options in the Shader Params tab. I will use the same normal, specular, and height maps, but in the second diffuse map slot I will input the alternative version of the diffuse map I created earlier. Finally, I will select a blend map; for this, I will use the grayscale map from which I created the normal and height maps with CrazyBump in the previous step.

The blend layer is controlled by three inputs: the "Blend Factor" slider, the "Blend Falloff" slider, and finally the alpha value stored in the mesh vertices. Switching back to 3ds Max, I apply a VertexPaint modifier to the rock mesh. Under Channel, I select Vertex Alpha, and with my brush set to black, low opacity settings, and a large brush size, I can now paint the areas where I want the blend layer to be visible. Once happy, I will re‑export the mesh and hopefully see the effect of my blend layer.

CryEngine Material Editor dialog texture slot setup

The CryEngine shader dialog, showing texture inputs in their appropriate slots

Step 13: Lighting in CryEngine

The latest version of CryEngine comes with an experimental lighting feature called Voxel‑Based Global Illumination. It will attempt to accurately simulate bounced light effects, providing the soft light and shadows seen in the reference photos for the canyon. First, I enable the advanced options for the feature in the Tools menu > Experimental Features > Lighting — I simply check the "Total Illumination" checkbox. With my rock meshes loaded into the scene and the correct materials applied, I will now make some duplicate copies and position them end to end to create the feel of a long, narrow canyon environment. Next, I open the Environment tab in the Rollup bar, scroll to the Total Illumination v2 tab and make sure it is active, then set the Integration mode to 2, which will enable full global illumination. Finally, I adjust the Time of Day and Sun Direction sliders, which can be found via the Terrain menu > Lighting.

CryEngine RollupBar Total Illumination v2 parameter panel

Total Illumination settings, located at the bottom of the Environment tab

Step 14: Capturing Images Using Console Commands

Once I am satisfied with the sun adjustments and the shadows are playing nicely on the rock surfaces, I think I need to slightly soften the shadow edges. I go to View > Console and double‑click the gray bar of the popup to open the Console Variables menu. Here I type r_ShadowJittering and increase the default value to a more suitable one. Next, I remove the statistics that are displayed in the top right corner of the screen by default; again in the console window, I type r_DisplayInfo and set the value to 0.

Finally, I type "capture frame" in the console and change the value from 0 to 1. A few seconds later, I change this value back to 1, during which time all frames per second will be captured and placed in the captureoutput folder located in my CryEngine directory.

CryEngine Console Variables search capture commands

The console gives us access to various settings and features

Step 15: Final Adjustments

Finally, I open the images I captured in Photoshop. I duplicate the base layer and apply Filter > Other > High Pass at a low value, then change the blending mode of this layer to Hard Light, which creates a nice sharpening effect across the entire image that can be controlled with the opacity slider. Next, I add a vignette and two black "letterboxing" bars to create a cool widescreen cinematic effect.

The next step is to adjust the colors to better suit my reference images. My render is a bit yellow and lacks some contrast, so I use Color Balance, Exposure, Brightness/Contrast, Hue/Saturation, and Curves adjustments, found in the Image > Adjustments menu, playing with the sliders until I achieve the look I am after. Finally, all that remains is to sign the artwork and the image is complete!

Photoshop color correction and post‑processing of canyon render

Using color correction and other subtle effects can truly transform the image

Final Render Result

Final finished canyon environment render artwork