Environment Artist Richard Vinci discussed the production process behind his huge British scene.
Environment Artist Richard Vinci gave a detailed talk on his astonishing Victorian Street project.
My name is Richard Vinci and I’m a 3D Environment Artist from Toronto, Canada. Currently I’m an occasional freelance artist, although I spend most of my time creating my own game environment assets to sell online.
I first got into 3D environment art around the age of 10. I remember being very curious about how 3D environments were created and rendered, so I started doing some research and before long I was learning the fundamentals of programming and 3D art, and creating my own projects. My interests led me to studying Multimedia and Theatre & Film at McMaster University. After I graduated I spent a few years doing 3D visualization work for an engineering and architecture company and now I’ve rededicated myself to pursuing a career in games.
As with all my personal projects, my primary goal when starting this project was to challenge myself to create something that was different from what I’d done before. I wanted to push myself hard and take on a project that would make me learn and grow as quickly as possible. In addition to that I wanted subject matter that wasn’t very common so that it could help me and my portfolio stand out, and I wanted subject matter that could appeal to a wide audience when I put the project up for sale.
Usually when I begin an environment I use my own imagination or memories from dreams; I develop a backstory and create something that is quite personal to me. For this project I wanted to be more practical, efficient, and I wanted to make sure the final result was familiar to a wide audience (i.e. not some unusual environment I dreamt up).
With these goals in mind I started searching for concept art of all kinds and organizing all my favourites in PureRef and trying to see what sort of images appealed to me in the moment and if they might inspire a project that would fit my criteria.
Eventually I found this piece of concept art for Battlefield 1 that stood out to me:
I liked the mood, the color palette, the lighting, the geometry; it told a story and evoked an emotional response from me, which I think is the foundation of a good environment. It also stood out to me as quite different from anything I’d done before.
Inspired by that, I started looking for images related to “European” and “street” to see if there was anything else I might find inspiring and I found this promotional image for Assassin’s Creed: Syndicate that in many ways resembled the image for Battlefield 1:
This image reflected the creation of an environment that met my criteria: the scope was larger than anything I’d attempted before (but still manageable), so it would challenge my efficiency and my ability to organize my project; and it was not the sort of thing I had seen before on places like the Unreal Engine Marketplace. Also, I had never tried creating an environment based on a game screenshot and I thought it could be an interesting exercise. My intention was not to recreate the image exactly, but to continue to look at it throughout the project and let my work develop naturally as inspired by this image.
I knew I wanted to make the meshes as modular as possible so that there would be a lot of flexibility in the final arrangement of building facades and so that it would as useful as possible for people who decided to buy the finished project. At the same time I wanted to make sure there was an interesting variety to the environment in terms of differences of heights and depths of the geometry. So my first task was figuring out how I could make sure everything would fit together predictably but still retain that sense of variety. Also, I wanted to make sure that even though I would be reusing the same meshes many times for the facades, I wanted to make them look like they weren’t identical.
The first step to addressing these objectives was to figure out how exactly I would create the streets and sidewalks because everything else would ultimately be placed in reference to that. I decided early that I wanted to use splines for the streets/sidewalks so that I could easily tile a square-shaped mesh and also distort it to create sloped streets/sidewalks. These changes in height would also help create some of the variety I wanted.
Caption: Street splines
I found a great video tutorial by Daniel Elliott that helped me improve my understanding of splines in Unreal Engine 4 and was really key to making effective street splines.
After figuring out the specifics related to the streets and sidewalks, I could focus on creating the facades. I knew the facades had to be able to accommodate the sloping streets and I knew they needed to fit together seamlessly if possible, but that transitions between different facade styles could be hidden by columns.
My first step when working on the facades was determining appropriate dimensions for them and establishing some guidelines for myself, which would help to ensure that the facades would match up properly. I settled on 4 basic sizes of facades, from which I could build a variety of styles. All facades would fit these dimensions, ground-level facades would extend 50 cm below the mesh pivot point, and any top or bottom edges that were intended to match up with another facade had to be aligned with the pivot point along the x-axis .
Caption: Facade templates
With these guidelines in mind I built 24 facade meshes that I could easily tile:
While creating these meshes I ended up deciding to create a fifth style that was 500 cm wide, but since that was double the standard size it fit seamlessly with the rest.
I used a similar process to create matching column meshes for the facades.
Since I knew the scale of this scene would be quite large, I wanted to make use of tiling textures and vertex painting as much as possible to minimize the memory footprint. In 3ds Max I assigned different material IDs to correspond to the different materials I would use. I was careful to make sure that the UVs for tileable surfaces used a real-world scale so that there would be consistency and so that brick textures would align properly and predictably.
Caption: Each color represents a separate material ID.
Caption: UV mapping with real-world scale. 1 UV tile = 100 cm.
Since I was using a lot of tiling textures in the project I worked a lot with Substance Designer. I found Quixel Megascans and Substance Source to be great places to get assets that worked as good starting points for creating my textures.
Caption: Substance Designer graph for the sidewalk textures. Here I used assets from Megascans as a base and built tiles and edge wear around that using Substance functions.
Caption: Resulting sidewalk texture
Substance was great for making the base textures, but most of the work for achieving the variety and overall look of the materials I wanted was done in Unreal. I created master materials that in combination with Blueprints made it easy to quickly adjust the color or vertex-paint dirt or damage on a surface. While creating this project I really came to appreciate the value of creating really robust master materials and using them with custom Blueprints.
Caption: Same mesh and textures. Creating a custom Blueprint made it easy to quickly alter the appearance of a mesh.
Caption: Blueprint function that exposes the variables that control the material colour.
Caption: Master material used for the facades, which when instanced allows for editing multiple variables and vertex painting.
Caption: Vertex painting was very useful for creating variety among similar meshes.
When deciding to create a project of this size, I knew I had to develop a way wherein I could easily place and manipulate a large number of meshes. This was important so that I could complete the project in a timely manner and so that anybody who bought the project could easily create a game environment with the assets. To address this issue I decided to organize all the meshes into Blueprints. This would mean that I could organize meshes into different categories and use sliders or drop-down menus to quickly switch between them and alter other variable properties. I implemented this idea and it worked out really well I think. It really made my overall workflow when building the final environment much quicker and very manageable. I posted a video on YouTube that shows how the system functions.
Caption: The Blueprint that controls the facade meshes. It allows for switching meshes, enabling and disabling curtains and interiors, and changing the colors of certain elements.
I tried to make these assets as useable as possible for a real game and most of the meshes have LODs implemented. For anyone who buys this project and would like to increase performance, I would recommend using “Merge Actors” feature in UE4 for combining meshes since the large quantity of meshes seems to be the biggest contributor to performance drops in this scene.
I find lighting is always one of the most difficult aspects of creating an environment and it usually takes me a considerable amount of trial and error to achieve a result I like. I wanted to create something that had nice contrast and variety, but was also not too dark or too bright, and that had to apply for the whole scene and multiple perspectives. Having interesting geometry that allows for nice shadows, highlights, and silhouettes is always helpful in my opinion and I had already tried to address that during the modeling stage.
The only motivated light in this scene is the Sun, and while I considered that perhaps I would need to add unmotivated light sources, I first wanted to test the lighting using only a stationary directional light for the Sun and a sky light and seeing how well global illumination alone would work. My first test with Lightmass resulted in a scene that had too much contrast and was either primarily underexposed or overexposed. I tried adjusting the postprocess indirect lighting intensity and the sky light intensity but couldn’t achieve the result I wanted. Ultimately I discovered that I could get a result I liked by using the default intensity for the Sunlight (3.14159) during the lighting calculation and then reducing the intensity to 0.5 afterward. The end result is that lighting is provided only by the single directional light with a bit of help from the sky light to fill in the really dark spots. I did have to increase the quality of the Lightmass settings to achieve a clean result.
I found that while testing my lighting it was useful to set the saturation in my post-process volume to 0 and walk around the scene to see in greyscale what looked good and what didn’t.
I also experimented with all the settings in the post-process volume to see if I could improve the look of the scene in unexpected ways, but ultimately I settled on doing only some minor color correction.
Since I had built all my materials with an adjustable roughness setting I also played with material roughness after the lighting build to tweak how the light played across certain surfaces.
When I create a new environment, my biggest challenges usually relate to some sort of specific technical or artistic issue (e.g. I want a very specific lighting effect I’ve never seen anywhere else; how can I use what I already know to develop an effective solution?). For this project however, things went surprisingly smoothly and pretty much as I expected. I set out with a clear plan, implemented my ideas, and things fell pretty neatly into place. Perhaps this project reflects that I’m approaching some level of fluency in environment art and it reflects all the challenges I’ve overcome in the past.
I feel I still have a long way to go before I become a great environment artist, but I think I got to the point at which I am now by being relentless. I research, study, learn, and practice relentlessly. Because of those efforts I know my strengths, weakness, and tendencies and I know how to manage myself when creating a project; I know the software well enough that there are few surprises; I know what works best for me. So my tip to other artists is to keep your passion and strive relentlessly to become better (and keep doing so indefinitely). If you do that, the specifics should fall into place.