Working on Modular Train Car Interior in UE4

Working on Modular Train Car Interior in UE4

Justin Mayle talked about his approach to creating a modular 3D environment 1900's Train Car made during one of the courses at CGMA.


My name is Justin Mayle and I’ve been a professional artist in the game industry since 2011. I am currently a Senior Lighting Artist at Deck Nine Games working on an unannounced title. 

When applying to college out of high school, I saw a 4-year program at Ferris State University as an avenue where I could exercise both my art and technical passions. After graduating from Ferris I was lucky to land my first job working at a small game company where I worked on character assets, props, environments, animation, and gameplay for a variety of games including Club Penguin, Farmville 2, Backyard Monsters, Roaming Fortress, some casino games, and Disney contracts.

After that start in the industry, I’ve moved on to specialize in environments. I’ve worked on a number of mobile games, including a Star Wars mobile game called Star Wars Scene Maker, Qube Kingdom, Tales of Honor, and Minitropolis. I also worked as a Senior Environment Artist on Farpoint for PSVR. 

Studying at CGMA

I decided to take the UE4 Modular Environments course at CGMA to improve and test my skills and to fill in any gaps I might have had. After working on Farpoint I wanted to learn more about how AAA companies put environments together in a systematic way, and the Modular Environment course helped me understand just that. I have also taken the Unreal Shader Course with Kurt Kupser, which I highly recommend.

1900's Train Car: Inspiration

I used Pinterest for my reference board. I liked the idea of a contained space and wooden elements, so the train interior that Clinton showcases inspired me to make a similar scene with a twist. I then chose a time period that would be personally interesting to explore. I also keep track of politics, which inspired me to make it a campaign car for an election.

Modeling Stage

Modo is an awesome, efficient modeling program. After making the switch to it from Max years ago, my speed in modeling increased dramatically. I also have an MMO mouse where I bind quite a few tools and custom pie menus. Modo’s customization is easy to use and tailor to your own workflows. A couple of examples of custom tools I used on this scene include quick scene export tools, quick asset exports, and quick UV tools. The export tools export all assets, or selected assets, to your save location and with zeroed out transforms; this is much quicker than exporting out each asset. The quick UV tools generate two UV maps: one that is a cubic map (think triplanar mapping) set to the proper texel density, and a second atlas map for lightmaps. I also used a third UV set for certain assets that needed trim mapping, which I will describe below.

To decide which assets needed to be modular I reviewed my reference, noted repeating elements, and determined which elements could be modular and which elements I wanted to be unique (not modular). It’s important to stay on the grid when laying out block meshes, so I incorporated a couple of length options in my modular kit to give flexibility. Length options on modular pieces you choose will depend on the scale of the scene; typically, I find that 1-meter, 3-meter, and 5-meter options give you pretty much all the flexibility you could want. 

If you need corners, include those in your modular kit.  My scene did not have corners, but I did have end caps. 

If you were to just have modular pieces and no unique or interesting elements, then your scene will be boring and lifeless. It’s important to have interesting points in your scene, and I’d encourage having a variety of assets in a scene to make it feel believable. An example of an element of interest you can include when blocking out your modular kit is a wall break.  This could be a column that juts out or a more detailed piece. These don’t have to be modular and are good to have to break up the repetitions on long modular walls. 

The process itself began with blocking out the space with the basic elements I chose from my reference gathering. I guessed at appropriate sizes and number of items for those pieces, and added them to the scene; once in the scene, I adjusted size and number of objects. I then made those refined elements into pieces for my modular kit. 

Using a modular kit allowed me to make widespread changes to the scene by updating only a couple of kit pieces.  It’s a valuable tool, and I recommend any environment artist to learn the basics of building a kit.

Texturing Stage

I used Substance Painter for most of the texture creation, including the tileables. For the decor, details and unique texture bakes I used ZBrush as a starting point. For the decor details on the trim map, I arrayed high poly detail with alpha brushes in ZBrush. This gave me options for details around the scene. For the unique bakes like the chair or door, I modeled the low poly chair and then brought it into ZBrush to do the high poly, instead of creating a high poly with sub-d or bevels. 

1 of 2

To achieve this technique in ZBrush, make sure the mesh that the mesh exported has all open holes capped. Set hard edges on your asset and unwrap from those hard edges. This won’t produce a good unwrap, but it is essential for how this process works.

Step 1: Import your model into Zbrush and set your polygroups based on UV.

Step 2: Crease by Polygroup.

Step 3: You may need to subdivide a couple of times to give ZBrush more to work with.

Step 4: Dynamesh to a decent resolution. Some small artifacts may appear.

Step 5: Polish.

The rest of the texturing process lies in the material and shader creation in Unreal. In Unreal, I enable baking the AO mask that I add into the shader to add dirt and grunge to the scene. The materials have a detail normal which adds fidelity, and they have a trim normal option; this lets me add a trim map to any tileable that I desire. The way I authored the shader requires a 3rd UV set to keep the texture tiling properly. Material authoring can be done in any number of ways; this was one interesting solution that I decided to use and help speed up my asset creation.

Lighting Workflow

First I will choose my time of day, HDRI, and how much I want the sky to contribute to the scene (typically by tuning exposure). I then set my key light and supporting lights. There are a number of tutorials out there that show how to set up a sky to use an HDRI - watch one if you want to know more about this process.

For this scene there are 5 point lights, a directional light, a skylight, and the main ceiling light is set to stationary. I adjusted emissives of the lights to help the realism of the scene; I tried to emulate how much light they would believably emit based on the intensity. If the base is realistic, then choosing a path towards any artistic choice is much easier. 

Here are the values I have for the lights in my scene:

  • Table Lights: 150 lm, Radius 1500, Emissive Material 125 intensity
  • Wall Sconces:  230 lm, Radius 800, Emissive Material 150 intensity
  • Ceiling Lighting:  1200lm, Radius 3500, Emissive Material 150 intensity
  • Directional Light:  5 lux
  • Skylight:  1 Intensity and 1 Indirect intensity
  • HDRI

The softness of the scene is derived mostly from the fog and volumetric fog. Each light is tuned to contribute more to the volumetric fog, which helps emphasize the artistic look of a scene. With a slightly higher bloom, dense fog, and volumetrics, vignette, and some other post effects, it creates a soft and inviting space.

Reflections around the scene are not complicated but can get out of control when too many are placed in a scene. One box reflection is used and smaller reflection spheres around the room provide accurate localized reflections. I did not turn on planar reflections for my mirror, which would produce a much better result, but those are quite expensive to render at run-time, as the scene is then being rendered twice. 

With lighting, I try to be intentional and purposeful. Many scenes use extra fill lights in scenes to get more bounce or super high intensities to get more bounce when really that isn’t needed if the scene is exposed properly and lit properly. If an area needs more light in a certain corner, the attenuation radius might need to be increased on a nearby light. Fill lights can be beneficial and may be needed, but having complicated lighting rigs will only be harder to adjust.


One of the biggest challenges for me in this scene was lighting. I was fortunate to receive a lot of feedback and help from my former art director, Randy Nolta. I really wanted to understand lighting in Unreal, and he taught me a lot. Mentors, supervisors, and colleagues are great resources for improving your skills, so don’t be afraid to ask your network for help. Additionally, I have had the chance to professionally work on more lighting projects since taking this class, and this hands-on experience has really elevated my knowledge on the matter.

Time was also a big constraint for me as I had a long commute on a bus to work and really only had weekends and some nights to work on the scene. I didn’t actually finish the scene until a few weeks after the class concluded, but I’m glad I persisted and finished. 


It was really a joy to learn from Clinton on developing modular kits in an intelligent and systematic way. He was able to help me massage different elements into a more believable state and provide helpful suggestions. 

The next project I want to work on are quick scenes that utilize scans. I want to focus on rendering things out at a high-quality in real-time with lighting, materials, post effects, and composition. That will include generating unique assets, but I see scans (much like modular kits) as a great way to put scenes together quickly.  

Justin Mayle, Senior Lighting Artist at Deck Nine Games

Interview conducted by Ellie Harisova

Keep reading

Read our previous interview with Justin

Join discussion

Comments 0

    You might also like

    We need your consent

    We use cookies on this website to make your browsing experience better. By using the site you agree to our use of cookies.Learn more