Gnomon graduate Tiffany Chu gave very detailed description of the production of her Unreal Engine 4 scene.
Tiffany Chu from Gnomon talked about the production of her amazing 3d environment. She talked about the production of the scene, her choice of tools, the way she does modeling and works with materials. The scene itself was inspired by Last of Us.
My name is Tiffany Chu, and I’m in my last term of study at the Gnomon School of Visual Effects, Games & Animation here in Los Angeles. I’m a part of the 2-year 3D Generalist track in the Digital Production for Entertainment program. Previously I received my bachelors from Emory University in biological anthropology. Goes to show, not every path to 3D is the straight and narrow.
My currently primary focus is environment art for games and I work in the Unreal Engine. My games education here at Gnomon coincided with the incorporation of Allegorithmic tools into the curriculum which I find such a pleasure to use in my texturing workflow. Recently I’ve been experimenting with creating more procedural materials inside of Substance Designer and building up my own personal material library. I’ve also been working to improve my knowledge of lighting and real-time vfx to better serve my projects and bring them to life. After all, environments are just larger, living characters with moods and stories of their own.
Spare time is scarce in the program but I’ve also had a lot of fun creating a few stylized dioramas with low-poly models outside of class. For students just starting out in game art, a project like this is a great way to learn to conserve polycount and texture space. When you have to hand paint every corner, you quickly learn the value of proper and efficient UV layouts.
Some more samples of my work can be found on my Artstation.
Creating the Abandoned Gondola Station
Road Flare Blues by Jorry Rosman from his series Day D.
Being a huge Naughty Dog fan, I began searching for concepts set in overgrown places where I could practice incorporating different types of foliage and vegetation into the scene. Jorry Rosman’s concept of an abandoned cable car station stood out to me for it’s unique location and it’s moody atmospheric lighting. From the piece I could almost hear the accompanying soundtrack were this a game.
And of course, the very The Last of Us reminiscent guitar.
A Sense of Scale
In the beginning there was…World Machine.
I wanted to experiment with generating mountains and terrain in this way as we were learning World Machine in class. It’s an easy node-based tool to generate a quick height map which you can then import into Unreal Engine’s landscape tool. I used just a few simple Perlin Noise nodes to create the mountains in the background. This level of open world environment creation really wasn’t necessary for my scene since much of the background is obscured in deep fog. I applied a single colored material to the terrain and left it as is to focus on more important parts of the scene.
Always work from reference. However pick and choose what details need to be shown to convey an effective design, what can be simplified so it doesn’t detract from the overall mood or focus of the environment, and what the viewer doesn’t need to see.
Снимок экрана 2016-06-14 в 14.26.12
Blocking and Modeling
For larger spaces like the Throne Room project my workflow is to do a quick BSP block out in Unreal. For this smaller scene, I found it easier to block out in Maya while using an imported standard Unreal first-person character as a scale guide check. During this process I begin to make a list of modular or reusable pieces and which assets must be unique. I also begin to plan ahead on what can be handled later in the texturing phase and what details must be modeled in high poly and baked down.
For UV I used UVDeluxe, an easy tool to scale and maintain a similar texel density across all of my meshes.
While modeling it’s important to keep in mind that everything should snap to the grid so it’s possible to quickly assemble your scene later in Unreal. Also, before exporting out of Maya and importing static meshes into Unreal it’s extremely important for the pivot to be place in the right place so the asset can be placed or adjusted correctly in engine. A lot of modular kits in have pivots placed specifically so the same piece can be adjusted and used in variety of ways.
Снимок экрана 2016-06-14 в 14.26.42
Before moving on to texturing, I bake my normals and ambient occlusion in xNormal.
Creating Believable Materials
I created all of my tiling textures procedurally in Allegorithmic’s Substance Designer. And as always it’s quite fun to use!
In another program the floor tiles might have taken a bit of time to sculpt, and then a lot more time to change should something not work. With Designer I was able to quickly iterate several variations of wear, cracks, damage, number and colors of individual tiles and wetness from the roughness using procedural nodes and changing parameters on the fly.
Designer is also a fast way to create simple textures like meshes without going through the whole modeling-baking process. And once again, it’s beneficial if you suddenly need to change the shape or repetition of your pattern.
Some Designer tips: I normally work Normal > Diffuse > Roughness (and Metalness) > any other outputs. Normals define the structure of most of your tiling materials, so to speak. Once you have the skeleton laid out, it’s easier to determine where colors and roughness go. However while working it’s good to always have a value plugged into the other outputs while you work so your 3D View is rendering properly.
Afterwards, I can import some unique materials I created from Designer into Painter and apply it to my model using color ID masks.
For small dents and damage I painted it in directly using the height layer in Substance Painter.
Not appropriate for larger damage that impact the silhouette of a model but it’s a quick way to get away with small details without going through Zbrush. Also the way to paint roughness specifically and give areas on your model greater material separation.
Painter has some great mask that are good for identifying edges, surfaces of models where pollen and dust might settle, mud might stick, etc. Smart materials are sometimes a good way to get a quick start as a base texture. When texturing an abandoned sort of scene like this, it’s good to think about the history of the object and use the correct masks to then reveal different layers of materials.
Vertex Painting Is Your Friend
On larger pieces vert-blending with tiling textures pulls all the weight. I used this on my floors to add additional water, mud, scattered leaves and moss, as well as to reveal the concrete and cinder blocks on my walls. Below is how I set up a puddle material function which I then used to blend over a “dry” tile material function and create the shallow puddle effect.
No Life Without Motion
I took full advantage of Speedtree’s Wind Wizard to apply some gentle movement to the plants and trees I brought into the program. When you save, Speedtree will compile the textures for you and then you can import the SRT file into Unreal. It will automatically generate a Speedtree node in the shader which will contain the wind displacement information.
To make the wind work in engine, you need to add a Wind Directional Source and adjust the strength and gust.
I had already planned to include the road flares from the concept and some floating dust motes/spores for atmosphere. My demo reel instructor Kyle Mulqueen also recommended that I add some dripping water which was a great call. I created all of effects in Cascade from simple textures using techniques I learned in my real-time vfx class with Keith Guerrette.
On the road flare fire emitter is a small flipbook which has a 6 x 6 contact sheet I generated from a clip of a fast moving fire using Nuke.
Color Grading and Post Process
Sometimes the last 5% makes all the difference in helping a scene stand out. The original concept by Jorry Rosman has great color contrast between warms and cools and I wanted to convey that in my scene. To achieve this, I took a screenshot of my uncorrected scene and brought it into Photoshop. I then applied filters and edited the brightness and curves until it matched the concept. I then took a LUT file from Unreal’s Color Grading page (Under ‘LUT Texture Example’) and dragged and dropped the same correction I used from the screenshot on to the LUT.
Then the following steps were: flatten, save LUT > Create a Post Process Volume around my scene > import LUT into Unreal > Under details, Level of Detail, make sure Texture Group of LUT is set to ‘ColorLookupTable’ >Apply LUT to Color Grading under Scene Color.
Initially when importing the animation on my swinging Gondolas into Unreal, the curves were not imported correctly and the animations came out super linear and jerky. My game creation instructor at Gnomon, Anton Napierala, suggested that even though I did have the “Bake Animation” flag checked on the fbx export out of Maya, I should still bake down every frame of the animation, which after I reimported it, fixed the problem.
Occasionally Color ID maps would not bake correctly straight from Painter for me. I found that Designer is also a good way to bake Color IDs directly the material colors assigned to the mesh. Simply import the mesh into Designer > right click and under ‘bake mesh’ > bake model information, select Material ID > export map.
It was a great learning experience. In my next scene I’d like to incorporate more Blueprints and experiment bringing the project into VR, as my school recently acquired an HTC Vive.
Tiffany Chu, Student | Gnomon School of VFX