In case you missed it
Check out lastest articles on environment art
Hey everyone, my name is Caspar and I’m an Environment/Prop and Lead Artist at Digitalmindsoft. I’m currently based in Munich. Digitalmindsoft is a small independent game development studio based in Ulm, Germany. I’ve worked on two titles of the classic Men of War IP and on our own IP named Call to Arms, an RTS-FPS-hybrid. As I've been a gamer since my early childhood and did some modding in the early Warcraft 3 editor, I started getting more and more interested in the field of game development. After finishing school, I decided that I wanted to study 3D Art at the Qantm Institute in Munich. I graduated with my Bachelor’s degree and landed my job at Digitalmindsoft.
Hey, I’m Verena. I’m also an Environment/Prop Artist and worked with Caspar on the same two titles, “Men of War” and “Call to Arms” for several years at Digitalmindsoft before recently joining Ubisoft Berlin. I've always wanted to become an artist, as I have enjoyed drawing and painting for as long as I can remember. I also love playing video games, so during my last year at school, I found out about the Games Academy Frankfurt am Main. While studying there, I learned all about 3D graphics and met many talented people. After that, I moved around a couple of times, adding a Bachelor’s degree, an internship at Goodgame Studios and a Master’s degree to my CV.
Art Collaboration - Victorian Room
Preparations for the Project
We had both been developing a military strategy game on the GEM Engine for years and we felt like we wanted to enhance our skills by working on something different. The Victorian era offers a great playground regarding set-dressing and overall design, such as materials, interesting shapes, and details, as well as atmosphere - which this project was all about. It was quite easy to find a reference that inspired both of us.
We were lucky to find these images which we used as the main foundation for our decisions. As you can see, it already has, even with this much empty space, a lot of very interesting shapes and ornaments. On top of that, the wood materials in combination with the lighting create a warm mood, which is exactly what we wanted to achieve with our scene.
To get a better vision of what the final result might look like and guarantee the desired amount of detail and storytelling, we collected many additional real-life references:
Our main goal was to create a room that invites the viewers, draws their attention to all the little details and therefore encourages their desire to explore further. It was clear then, that the lighting would play a big role in reaching that goal. As CryEngine offers some great tools for lighting with which you can achieve some stunning results, it was our first choice for the Victorian Room.
The next step before getting started was to organize the workload. Trello is a good way to keep track of all the tasks and progress in a team. We broke our main references down into smaller tasks, like tileable and unique materials and assets, ornaments that could be used all over the place, hero assets and props. To guarantee a consistent look we used the given base of the divided room and assigned it accordingly: Caspar worked mainly on the dining area (a more official place where people meet and chat) and Verena was responsible for the cozy fireplace where you would like to relax. All in all, we started with creating our main reference and added more and more detail with every iteration, until we finally placed the little props to emphasize the storytelling aspects of the project.
A rough blockout in 3ds Max and sticking to real-world measures throughout the whole production made sure that we got the scaling right. For a better first impression, we assigned photo textures on the blockout and exported it to CryEngine:
This helped considerably with the first lighting tests and we continued placing placeholder assets in the scene. We modeled the placeholders for the hero assets such as the fireplace ourselves, but most of the others were part of the CryEngine marketplace. They didn’t have to be accurate as it was more about getting a feeling for populating the room.
As we mentioned before, we decided to have two separate areas; the dining room and the living room. We did a lot of research on these, collected several different references and read about the Victorian era. We learned how people lived back then, what they liked to do and what they valued in their lives. That was important for presenting a convincing environment and most of it was essential for the props later in production. The challenge here was to give each of the two areas its own character and story, still being a part of the same room and complementing each other. They had to look common and unique at the same time. In order to separate the rooms, we divided them by adjusting the lighting accordingly. The dining area is, storywise, all about having conversations and social events. It had to be well lit because you had to be able to make out facial expressions while talking to someone. The fireplace, on the other hand, is a relaxing area only to be lit by the fire itself. We also used props to differentiate the two areas. The guests should see all the wealth of the residents when coming into the dining room. There’s a lot of space, expensive paintings and the porcelain is well displayed. The living room is a more private place with books, pictures of family members, letters and precious, decorative pieces. To achieve consistency we fully relied on our shared material and ornament library. That way we made sure that the single spaces in the room were still connected to each other.
All this planning and the backstory helped us to place the props in order to keep a vision of the final result, even though there were only grey placeholder meshes that were replaced bit by bit. We stuck as close as possible to our main references which allowed us more freedom later on.
As our focus was on quality instead of getting a lot done in a small amount of time, we decided to model and bake each major asset uniquely. This made it possible to value each asset and to emphasize storytelling. For asset creation we used various programs for the individual steps, such as PureRef for all the references, 3ds Max and ZBrush for modeling, Substance Painter and Designer for texturing, Marmoset Toolbag for baking, Marvelous Designer for fabrics, 3D Coat for the retopo, FumeFX for the effects and Premiere Video for the composition of the video.
Although we went for the unique approach we shared a high poly ornament kit that we created in the beginning. That was quite a challenge until we got the knack of modeling these complicated shapes in 3D. In the end, the kit helped a lot to speed up the creation process for all the assets while guaranteeing a consistent look. Here you can see some of the objects we used.
In addition to this kit, some assets also have their very own ornaments and shape to avoid repetition. It was quite demanding that most of the ornaments were part of the asset’s silhouette. Because of that we often had to rely fully on the high poly meshes, building low polys and baking it in Marmoset. That took way longer than stamping the normal in Painter. In the following image, you can easily make out the ornaments that are part of our kit and which are part of the overall shape as well. The feet and other, smaller parts provide unique details to avoid uniformity.
Assets that don’t use the kit at all also break up the consistency in the scene.
So going with the old fashioned high poly to low poly workflow definitely had its drawback in terms of fast progress. That’s why we tried to re-use as much as possible while littering nice unique details.
Another crucial part was to set up uniform materials and smart materials in Substance Painter. Having these materials as a basis sped up texturing and was also very useful regarding the collaborative aspect of this project. They guaranteed a consistent look. Here are some of the materials we created or adjusted inside Painter.
Texturing the assets consisted mainly of applying and combining our smart materials in Painter, tweaking the values and adding details like dust. Allegorithmic offers an easy way to export the textures to CryEngine using the Amazon Lumberyard presets.
Tiling Materials & Patterns
When we're creating a new material in Substance Designer, we search for various references first, both from reality and fellow artists. Reviewing these references is crucial in order to create realistic materials. By doing this you get a good sense of the real-life behavior of each individual material, like glossiness/roughness, typical wear, and tear, color and external factors like mold and humidity which again affect color variations.
For our scene, we wanted a cleaner and more cared for look, so too much damage or dirt wouldn’t have made much sense (since things would probably have been repaired or cleaned by the family living there). After deciding the right path that would fit our style, we continued with the basic planning. That means we broke up my concept in the big, basic shapes, mid-level details and the small details for a nice layering effect.
In the case of the floor tiles, we first created the basic tile shape:
After that, we added some chipping and damage via the classic slope blur grayscale workflow:
We then imported the marble graph we created for the material used in Substance Painter or assets containing marble parts. You can have a look at the graph here:
It’s very important to keep the distribution of these patterns in mind. This is especially important for materials consisting of structured parts (e.g tiles, wood planks) where the marble veins or wood grain wouldn’t be spread continuously over all the sub-objects, but instead would be distributed in a natural way.
As you can see in this example from textures.com, the marble pattern is broken up and unique for each tile:
The Substance Designer pixel processor node is a nice way to achieve this effect. For this node to work, you need a distinctive mask of your tile pattern. Here you can see the two input maps and final output of the pixel processor:
And here’s the function that drives the pixel processor:
This node is pretty powerful. We also used it to break up the color information for the diffuse texture and of course some gloss information.
For the color part, we always work with a lot of gradients for a nice layering effect. We try to stick to real-world references and pick nice color gradients from there. Towards the end, a good way of getting the right color variations involves trying different references and therefore gradients. Some references might look good in real life, but won’t quite fit your needs in an artificial digital environment. So we guess some artistic freedom is always a good thing to achieve the desired look.
Since our scene is rather small and there was no need for a huge variation, we didn’t do any fancy Substance work inside CryEngine. We basically exported the material and applied it to the wall and floor sections.
As said before, we created a high poly ornament kit and made heavy use of it during the whole process. So using it for creating these small objects definitely helped speed up the process.
The general workflow for creating all the assets was to model the high poly in 3ds Max in a classic Sub-D fashion. ZBrush was used when there was a need to add extra details. In this picture you can see all the high poly models for the dishes and silverware inside 3ds Max:
As you can see, the models themselves aren’t that complex. They’re rather simple objects and really come to life when being set in the right environment inside CryEngine. Their nice and shiny materials in collaboration with some environment probes really create a busy and alive feeling for the dining area.
After doing the high polys, the low polys were created in either 3ds Max or 3D Coat, depending on the complexity of the high poly mesh. The UV mapping was done entirely in 3ds Max.
We baked all our maps inside Marmoset Toolbag 3 and we’d recommend it to anyone out there. In our opinion, it’s by far the most convenient baking solution. The integrated skew brush is priceless, especially when working with lots of small ornamental details.
Since we targeted a cleaner look, we didn’t want too much wear and tear on our textures. For the silver dishes, we mainly used the smart material we created. Crytek provides some constant PBR Spec values for all the different material types. So we adjusted the material in Painter according to these values.
In this gif you can see the layering inside Substance Painter:
We had to go through trial and error for quite some time when we worked on the bottles and glasses. Getting the look halfway right took some work. We had to make separate meshes for the outer and inner walls of the bottles/glasses to avoid getting artifacts.
In this picture you can see the material settings inside CryEngine for the wine bottles:
The whole lighting process was a challenging but fun and rewarding thing to do.
Before starting the actual lighting process we set up the level settings. We went for Total Illumination V2 with quite high settings for maximum quality. In this picture, you can see our settings.
Since CryEngine works with a voxel-based global illumination (SVOGI/SVOTI), you can adjust the voxel density and keep the performance in mind. The min node size (1 in our case) defines the voxelization and has an impact on the lighting quality. When typing e_svoDebug 6 into the console you get a debug view of the voxelization of the scene.
The basic lighting setup and mood were discussed beforehand and we decided to go for a night setting. This way we wouldn’t need to care about the environment outside and could focus on the room instead. So the first thing we did was set up the night sky, moon color, and light shafts. Getting the right angle produced some nice rays shining through the windows. Having the bluish light from the moon gave us a nice contrast to the warmer and orange-like light colors from inside. All the required settings, like time of day, sun color, fog, light shafts and so on, can be found in the environment editor inside CryEngine.
After setting up the natural light, we started to work on the basic and obvious light sources inside, such as the wall lamps, the chandelier, and the fireplace.
For the wall lamps, we took a projector light for the main light source and a point light to add some ambient brightness. This was more or less the process for the basic lighting.
After setting up the main light sources we added and adjusted some environment probes. First of all, we set up the light environment probes to support areas that would otherwise be too dark and would cause too much contrast. This probe consists of a cube map, where you can adjust the diffuse multiplier to add some color variation and change the overall brightness of the probe. In this gif, you can see the difference between the probe for the dining table turned on and off:
These are the settings we used for this particular probe. We marked the most important settings in our opinion.
As we were using quite a lot of metallic materials it was crucial to add enough specular environment probes to support the reflections. This is done in a similar fashion to the lighting environment probes.
Here you can see the result with and without the probe for the dining table:
The last step in lighting the scene was polishing everything, adding ambient lights, creating some color variations and fades to make the room more interesting. Besides adding ambient lights with soft fades to support darker areas, emphasizing the bluish moonlight was a good thing to do.
In the first example, you can see that we tried to support the bluish moonlight bouncing and in the second image how we emphasized the light from outside to create some lighting from the back:
You can see the different lighting stages and the final result here:
The biggest challenge for lighting the scene was the limitation of twelve lights casting shadows at the same time. If you go above that number, you’ll get flickering artifacts and overall problems. Since we didn’t know this at the beginning, it was quite a lot of work to test out different lighting settings and make compromises between the different lights which were allowed to cast shadows. Knowing this, we’d recommend to build your scene around this limitation and to keep it in mind.
Another problem was that at some time the whole lighting and environment settings went corrupt, and we couldn’t figure out where the problem was. So we had to rebuild the whole scene on the latest engine version which of course was quite time-consuming.
Experience with CryEngine
What we like most about CryEngine is the outstanding photo-realism and its way of handling lighting. Since we wanted to do a highly detailed, realistic and cinematic scene, CryEngine was the perfect fit. The usage of all the visual features is very straightforward and gives instant comparable results. The easy-to-use environment editor with settings for the time of day gives great results in a short amount of time. Another nice thing about CryEngine is a very easy and self-explanatory material editor and interface in general. There is mostly no need for complex and time-consuming material setups, so as an artist you can really focus on creating art. You can basically say that “what you see is what you get”.
The most interesting thing about using CryEngine is lighting. Its Global Illumination approach (SVOTI) is great for artists and lets you create quick and cinematic results. You can choose between a lot of different settings which have a big impact on the lighting quality and workflow. Another great thing is that the lighting is rendered in real-time without any need of pre-baked lightmaps. So there is no need for a second UV channel for any lightmaps.
Another interesting thing is the heavy use of console commands - the cvars. You can adjust nearly every setting by typing these commands into the console.
A good starting point would be to have a look at their online documentation regarding cvars.
The following cvars are some of the basic ones that we often made use of:
- e_terrain 1/0 - turn the terrain on/off
- sys_spec_full 1/2/3/4 - 1 low, 4 high (some features will only work within higher settings, such as POM)
- sys_spec 1/2/3/4
- r_AntialiasingMode 1/2/3/4 - enables different post-process base anti-aliasing modes
- r_MotionBlur 1/0 - this is very useful when you want to record a video (turn it off)
- r_Sharpening # - provides a post-process sharpening filter
- e_svoTI_SSAOAmount # - adjust the amount of SSAO (SSDO)
For taking nice screenshots:
- capture_file_format jpg/png/tga - set the output format
- capture_frames 1/0 - start taking a screenshot with post-processing enabled
Lastly, we want to mention a very easy-to-use particle editor. It delivers great results in a matter of minutes and has a powerful motion physics setting. Especially for beginners in FX like us, the editor was usable without the need for any tutorial. You can see all the settings of the basic fire fx and the final blended result here:
As we mentioned before, one of the most time-consuming things was creating all the detailed assets. You can achieve high quality with the workflow we chose, but it takes way longer to bake all the unique maps. The amount of those assets is the major reason why it took us about a year next to our full-time jobs to be able to publish the scene.
When it comes to working on such a long-term project in your free time, motivating yourself became quite challenging at some point. We did that by tracking our progress and having feedback conversations on a regular basis. As the whole purpose of the scene was to tackle as many challenges as possible, we mutually pushed each other in a constructive manner in order to learn new techniques, tools, and workflows.
Although we were used to working together on the same project, the collaborative aspect of the Victorian Room challenged us to communicate effectively. It was crucial to share as much of one’s work as possible, to check progress regularly throughout production and to give and receive good feedback. It was important to make sure that everyone’s needs and wishes were fulfilled while taking care that we both had the same vision of the final result in mind. It was fun working with CryEngine 5 but it’s lacking in up-to-date documentation in its current state and it has also some limitations, especially regarding lighting. We had to delete and rework our lighting several times due to technical issues and light restrictions where there can only be twelve lights that cast shadows at the same time. This took quite some time to get right.
To summarise, the creation of the Victorian Room included a lot of back and forth, deleting and re-building whole assets from scratch again and tackling new tools by reading and watching a whole bunch of tutorials. Nonetheless, we are very happy with the result and it was definitely worth the effort.