Radu Carstean shared an extensive breakdown of a Cannibal Island environment, shared some advice on working with Unreal Engine, and discussed a CGMA course that helped him to create the scene.
Hello, my name is Radu Carsten, I am a Romanian 3D Environment Artist, working at Gameloft Cluj-Napoca and I have roughly two years of experience in the mobile game industry. With a bachelor’s degree in animation at the University of Portsmouth, my training is a mix of formal education and self-teaching with YouTube tutorials and other kinds of online resources. That brings us to the subject of this article: my experience of working on Anthony Vaccaro’s Organic World Building in UE4 online course at CGMA.
Why This Course?
Working in the mobile games industry, most of the assets I make are either stylized or rather ‘simple’ in nature. It’s always been a personal goal of mine to work on larger, more hyperrealistic-looking landscapes and this course teaches just that. Some of the main takeaways that have been especially important for me were how to block out the environment and how to ‘think large’, making points of interest (POI), managing and creating a large number of assets, and living with unhealthy amounts of coffee for the duration of the project.
For me, getting started is usually one of the hardest things to do. Since I was in control of every aspect of this environment, I had a hard time deciding exactly what I wanted to do with it. Luckily, I had this idea of a haunted island in the back of my mind for a long time, and this was the best opportunity to materialize it. The first week of the course was all about planning, gathering references, drawing, and making the blockout of the scene. I would like to assume that everyone knows about PureRef by now – a free program that can help with centralizing the mood board and reference images. During my very brief research, I noticed that the style of very tall and rocky islands was specific mostly to south-east Asia and especially Thailand and Papua New Guinea, which I have used extensively as sources of inspiration. The fact that many cannibal tribes were already specific for these areas has also been a great help.
So, by the time I finished the mood board, I already had a better idea of what I was going for and started to draw and then model the low poly blockout of the map. Usually, I really like to add contrast to everything I make – whether it is visual or through the storytelling elements, so I set 4 POIs which all have a slightly different feel to them – the bright, warm, open beach, the beginning of the lush forest, the unsettling cannibal altar and finally, the cannibal’s village.
I cannot stress enough the importance of making a blockout inside of a modeling package (3ds Max in my case) for any level that is supposed to have a specific layout. Not only the low poly version is fast to make and conveys everything it is supposed to, without having to go into a complicated asset and material creation, it also helps with nailing down the level design and the overall proportions and dimensions. I see working in low poly at this stage as the equivalent of painting “loosely” on a canvas, enabling fast and big changes without getting caught in too many details. Bringing the low poly into the engine and walking around it helped me ‘feel’ the environment even better. To avoid any weird collisions, I went inside the geometry asset and set the Collision Complexity to Use Complex Collision As Simple.
Creating the Landscape in UE4
The next couple of weeks of the course have been all about sculpting and creating the materials for the landscape. I was lucky to have some 2 years of self-learning experience with UE4, so I was comfortable enough to focus more on the artistic, rather than the technical side of things. Also, knowing UE4 gave me the confidence to take a different approach from the course curriculum and try some of its new features, like Landmass and the new water system from version 4.26.
Because this process is tedious and I don’t want to take too much of your time, I will just say that I have initialized the landscape using a combination of the WaterBodyOcean and WaterBodyRiver actors, landscape blueprint brushes, and some Edit Layers for additional adjustments, like erosion and walkable slopes, paths, etc.
All the materials in this project have been made from scratch, in Substance Designer. The process is pretty straight forward and there are many tutorials out there, so I won’t go into details, but there is one trick I have used to make the tiling ground textures: instead of creating the grass blades, leaves, and debris in Substance Designer, I have made alphas (with depth) in ZBrush, which I then scattered over the ground texture.
As the project evolved, I have also made different adjustment passes for all the textures. One thing I did wrong, in the beginning, was to make the diffuse of all the foliage too bright, which made it look neon-green. Eventually, with all the textures ready, I started working on the landscape material, which featured an auto-blend option, parallax occlusion mapping (superseded at the end by tessellation and displacement), and Runtime Virtual Texturing (which I ended up not using because of quality and performance issues). For optimization purposes, I have later added a distance-based mask for the tessellation and displacement.
Creating the Assets
Using the concept of Primary-Secondary-Tertiary shapes (PST), the most natural step forward was to focus on creating the rocks, as they would help further refine both the visuals and the design of the landscape. All of the rocks have been created following a pretty standard workflow, that can be broken down into 3 parts:
- I made the high poly models for the rocks in ZBrush, decimated them to get the low poly, created UVs in 3ds Max, and then baked only their normal maps in Substance Designer
- I created a tiling rock texture in ZBrush, then baked it and created all the other Maps (Diffuse, Rough, Height, Occlusion, etc) in Substance Designer
- I created a master material (with parameters) in UE4, where the Normal Map of each rock was getting combined with the tri-planar mapped textures of the tiling rock
Of course, in addition to the basic setup described above, I also created other World Aligned Blends (grass, detail normal, etc) that could be masked using vertex painting. Like that, I could also fix the repetitiveness of the textures.
Initially, I was not planning to have actual meshes for the cliffs and I was hoping to be able to get those shapes out of the landscape sculpting. Unfortunately, that did not work well since the landscape didn’t have enough resolution and the materials were warping around it in a weird way. As you can see from the following GIF, I received a lot of feedback from Anthony while creating the rocks and ended up remodeling them 3 or 4 times, before getting them to an acceptable level.
I think that creating foliage can be so complicated that it deserves its own article, but I can show a boiled-down version of it through the following GIF:
For learning purposes, we have been advised to not use automated tools such as SpeedTree. Therefore I have used this workflow to create pretty much all the foliage in the scene, from grasses to bushes, flowers, and tree branches.
The man-made assets
Unfortunately, by the time I got to make the man-made props, the 10-week course had already finished but equipped with the experience and Anthony’s feedback I got up to that point, it was fairly easy to continue working and take the scene to completion.
Most of these assets have been made using the same modeling techniques as described above, except the fishing net, for which I’ve leveraged ZBrush’s Dynamics.
Lighting, Post-Processing, and FX
Towards the end of the project, I’ve been very fortunate to also receive a lot of critique from Paul Turc, an experienced coworker and friend of mine. He provided continuous and valuable feedback regarding the quality of the assets, lighting, and polishing of the scene.
To create the lighting I’ve used a plugin from the Marketplace, called Ultra Dynamic Sky. I chose to use it over the native lighting options because other than the fact it creates amazing results, it is easy to use and also has support for volumetric clouds, all under one blueprint. But, of course, no matter how good the basic lighting setup is, there are still tweaks to be made. While subtle, I used point lights to highlight the forest path and Distance Field Ambient Occlusion to really add contrast to the foliage and the overall scene. To achieve the transition from the bright beach to the dark forest I used a secondary post-process volume which had a darker, blueish tint and a high value for the Blend Radius.
The fog has played a critical role in the overall look of this particular environment. It helped not only bring ‘depth’ to the image but also added an extra blueish tint that really helped sell the idea of a cold, humid place. The only problem I had with using the Exponential Height Fog was that it was also getting applied on the beach area, where I wanted to actually have a brighter, warmer look. To fix that, I’ve made extensive use of the particle effects that I found in Epic’s own Particle Effects and Blueprints example projects.
The last stages of the project consisted of pretty much revising every aspect of the environment and tweaking all the materials and lighting to fit together properly. I have spent a bit more time on each POI and used the concept of PST shapes as much as possible to fill the empty spaces.
Creating the cameras required a bit of experimentation since I was testing out different angles for all the different shots. After finding the best angles and setting the post-process effects for each individual camera, it was easy to also animate them and assemble the shots in the sequencer.
In order to achieve the highest possible quality for the screenshots, I set the ‘Engine Scalability Settings’ to ‘Cinematic’ and the ‘Material Quality Level’ to ‘Epic’. Another useful command that Paul has shown me is r.Tonemapper.Sharpen, which can be used to make the image crisper.
What Could Have Gone Better
As mentioned before, using some of UE4’s experimental or still-in-development features came back later and bit me on the rear side.
Whether I was using these systems wrong, or they are indeed not production-ready yet, I found the environment blueprint brushes to be pretty unstable. A weird behavior that I kept noticing throughout the project was that either the blueprint brushes themselves, or something in the landscape Edit Layers, kept resetting, or rather, recalculating. This had a snowball effect on the foliage, which kept resetting itself, even where I tweaked it manually. The DFAO also seemed to take a hit, as it seemed to reset each time the glitch was happening. In one particular instance, this issue caused large portions of my foliage to disappear from the map, wasting weeks of progress on the scene. Fortunately, I was able to mitigate the losses and used an autosave file from 2 days prior. Do back up your work often!
Another issue I found is that the blueprint brushes stopped taking effect on the landscape after Resampling (Resizing) it. While more of an inconvenience than a real issue, it didn’t allow me to achieve a higher quality for the ground.
The water system also seemed to be slightly broken out of the box. While I believe it will have enormous potential in the future, right now, at least to me, it feels unfriendly and hard to customize, requiring a lot of technical know-how and also time to troubleshoot, which, unfortunately, was out of my scope for this project.
Now, looking back, there are a lot of things that I would have liked to change, or do differently, like the trees and the rocks. One particularly useful trick I have learned only after wrapping up the project is blending textures using two different UV sets for the same model. I figured I could have used it on many of the assets, but particularly for detailing the base of the tree trunks. In UE4, the TexCoord node can be used to select the desired UV channel and the blend can be done using the Linear Interpolate node.
Yes, I used two unmatching textures to make the effect more visible.
And this one should be obvious, but I fell in the trap… make sure your monitor is properly calibrated! More than one time, Paul told me that my images were too dark, even though on my screen everything was looking great. It turns out that my monitor was not calibrated properly and the “black stabilization” was set way too high. Because of that, I had to redo most of the lighting.
All in all, this environment took around 4 months and a half to finish (almost full time) and I can say that I’m very happy with the end results. Anthony’s course took me through all the necessary steps of creating an environment and it has definitely pushed me to improve both my creative and technical skills. I can’t recommend it enough to anyone who would like to get their head around creating larger environments!
And as a bit of a word of advice for any people who are interested in taking such a course: even though you are going to be given tutorials for all the tools you need to use, it’s always a good idea to be at least familiar with them beforehand. That’s going to allow you to focus more on the work itself, rather than learning the program. Also, don’t be afraid to ask and receive critique from as many people as possible, since hearing different (and hopefully relevant) opinions will definitely make you see things from a different perspective and also help you learn faster!
There was a lot to cover in such a condensed article and I hope I didn’t bore you too much. I hope you found it at least a little interesting or even informative!