Recreating Subway in UE4: Texturing & Scene Assembly

Kateryna Reka recreated the Kyiv subway and talked in detail about the texturing and assembly stages of the project. 

In case you missed it

You might find these articles interesting


My name is Kateryna Reka, I’m 21 years old. Actually, I study astrophysics for now, but since the last year I have been confidently migrating to CGI and I want to stay in this field. I finished two online courses at the ArtCraft School in Kyiv (Ukraine), “3D for Games” and “3DPro Pipelines”. My Subway fanart project is a diploma for the second course under the mentorship of my teacher Alexandr Shapovalov, to whom I am immensely grateful for the instructions and advice throughout the work. In his course, we learned to think our project through ahead of time and optimize the time spent on a particular task, while at the same time practiced modeling and rendering of environment objects.

In total, I have been making 3D models for about a year. During this time, I managed to do some freelance work and participate in the production of a low-poly cartoon for the Planetarium with the support of the Ukrainian Cultural Foundation. At the moment, I am actively engaged in further training.

1 of 9

Start of the Subway Project

Before starting the project, I did not have much experience interacting with UE4, and in the process, I had to deal with many things for the first time, so the goal was to learn how to correctly build my workflow, assemble a scene, set up lighting and materials there, and experiment with different techniques. In the process, there were no strict requirements for the number of polygons, we just needed to try to optimize everything, because learning optimization was in our interest. A little spoiler: in the end, we learned something more important than just a skill - the understanding that any task can be solved if you don't give up in the face of difficulties.

The teacher offered us a whole list of topics from which everyone could choose something they liked. Since at that time I spent about an hour per day traveling to the university by subway and whiled away the time of my trip thinking about how to implement everything I saw in 3D, my choice was obvious when I saw a subway car on the teacher's list.


Throughout the learning process, we hear that working with references is a very important stage on which the final form of a project can depend. Therefore, I had to spend several days collecting them all over the Internet, figuring out what types of trains are used in our subway and how they differ from each other, and even taking photos of those parts of the environment that could not be found on Google. For easy storage, I used PureRef. It can hardly be seen in the frame, but I also used a fire extinguisher that I made previously in order to understand how it's structured. This is the way I like to work with the environments - by creating different scenes and objects you learn the world around you.

Also, I recommend that all students draw up a detailed plan before starting to work as it will save time in the future.

1 of 2


The filling of the scene itself was very simple and the most difficult model in the scene was probably the fire extinguisher in the background. 

I work in Maya, and almost everything in the scene, including the UVs, was done in it. I only needed ZBrush to create seats and experiment with welding seams on the handrails. In total, three types of seats with different folds were made so that they could be replaced and mirrored to create the illusion of diversity.

Some of the objects were immediately modeled for smoothing (the sides of the seats, handrails, lamps); for the rest, I just made a little bevel (thresholds, window and door frames, frames under the ceiling) and then everything was baked to low poly. There are a lot of repeating objects in the subway train, and in order to optimize their storage in UE4, I had to get acquainted with 3ds Max in order to use the magnificent TS Tools script. It allows you to transfer the coordinates of objects into UE4 and significantly save space and time when exporting meshes.

1 of 2


All maps were baked in Marmoset Toolbag. I always bake the ID map for the parts of a high poly, so that in the future it is comfortable to texture the low poly. 

Since the course taught us to work with materials directly in the UE4 environment, objects in the project are conditionally divided into three categories:

  1. Objects that were baked and textured in Substance Painter like ordinary assets (doors, seats, lamps)
  2. Objects for which only the normal map was baked (for example, windows and all handrails)
  3. Objects that were textured with UE4 tools and needed tiling materials (floor, walls, and ceiling)

When exporting from Substance Painter, all textures were immediately packed under UE4 (AO, Roughness, and Metalness via RGB channels, since they carry information in black and white) to optimize their storage.

And here everything is also quite simple. For seats, I mostly did not use ready-made materials. I created a layer with a base color and a couple of layers where similar color lies in a black mask through dirt by a smart mask. This is necessary in order to create variations in shades because in reality there are not so many materials that have exactly the same color.

In separate layers, I applied a leather surface just by normals, adjusted the roughness to simulate scuffs, and imitated the old edges of the seat with a lighter color through the dirt generator.

As for the communication device, the baked ID map came in handy. I sketched either ready-made materials or inscriptions on it. In Substance Painter it is possible to apply labels by typing them directly but Cyrillic characters are not supported there, so for all the inscriptions I just created an alpha in Photoshop and connected it to the brush.  

1 of 3

The lamp and doors were textured in the same way. The project has many identical objects, so it was important not to apply any noticeable features to the textures that would be duplicated on each mesh.

In UE4, it is possible to create master materials and their instances, in which we can set individual values of certain parameters that are entered in the master material. Therefore, I decided to texture all the metal parts already in the engine, creating a separate master material for metal. For example, for the window frames, I baked only the normal map and added the abilities to determine the color and apply a texture, roughness, or more normals in the master material.

In the same way, a special master material was written for the walls and the floor. For the roughness, I created an option to lay down two maps at once. As a result, due to the fact that not all of them were tiled, seams appeared at the junction of the floor modules precisely in roughness, and in order to get rid of them, I used the absolute world position node instead of the usual texture coordinate node.

1 of 3

I also added color fine-tuning so that any texture could be converted in the engine without Photoshop access, and used both Vertex Paint and the AO Precomputed mask node for color variations of the linoleum. With its help, it was possible to imitate the color of untidiness in the places where the engine generated AO.

I like learning new programs during my work, even if it allows me to add just one insignificant detail, like bulges on the linoleum - they are invisible, but at the same time emphasize highlights on the roughness. On the floor, there is a tile normal map created entirely in Substance Designer while I was getting acquainted with it. In the future, I plan to use it more often and more thoroughly.

Looking at the references, I came to the conclusion that in old cars, linoleum 1) fades under the feet of the seats, and 2) is torn off in places near metal frames. For the first effect, I used Vertex Paint and the second was created with decals and masks; I manually painted them manually in Photoshop and added an option to change the roughness, color, or connect an albedo texture in the master material.

I also created a separate material for the lamps and added a blinking effect in a separate instance material.

As for all the advertisements, they were found on the Internet. I recalled the popular brands in Ukraine that I saw in the advertisements on the subway and tried to find their flyers. At one time, a social project called "Gus v metro" (goose in the subway) was popular and I really liked it, because it taught people the rules of nice behavior in public transport in a funny way, so I included their posters as a sign of respect. Also, in our subway, people often leave advertisements illegally shoving them in the joints between the doors or gluing directly on top of the paid announcements and I added that to the project as well. I created those ads in Photoshop recalling the most frequent texts I saw and changing fonts for a change. My teacher, who once was fond of this, helped me a lot with graffiti. All the flyers were collected in one atlas in Photoshop and simply placed on planes.

The window stickers were also made manually in Photoshop - I tried to choose the fonts as close as possible to those that I saw in the subway. The glass material was taken from the Advanced Material Pack, which was available for free in UE4 Marketplace some time ago.

1 of 2

Scene Assembly 

There are not many unique objects in the scene, but the abundance of details makes this less noticeable. In order to avoid getting extra light, I modeled a rough shell around the train car. Since we always see neighboring cars during the trip, I decided to reproduce this as well. In order not to load the engine with duplicates of all meshes, I was advised to place the boxes with an overlay screenshot of the train interior with a suitable perspective and also apply emission to it to make the image more visible.

1 of 3

Knowing that no one would see the next carriage close-up, I did not try too hard to reproduce it in detail. I fixed a trapezoid with a screenshot to the cube with motion animation made in Maya. It turned out to be too messy when done manually, but the understanding that any movement is a set of mathematical functions helped me a lot. I took the periodic functions of the cosine and sine and transformed them beyond recognition by adding the terms raised to the power and playing with the oscillation phase. And with the help of these functions, I created an animation through Expression editor for translateY, translateX, rotateX, rotateY, which I exported to UE4. 

1 of 2
1 of 2

In order to create the illusion of movement along the tunnel, I modeled a very simple shape with wires and baked a normal and height map squeezed out with a displacement node. Then I connected the panner node to the material, with which I controlled the speed of the texture movement in one coordinate.

Setting the light in the scene was not complicated. I created a blueprint, in which I placed a point light for a circular region of light on the ceiling and a spot light with an opening angle of 180 degrees for the main lighting in one place. Then I duplicated such preset to each lamp, thus preserving the ability to change parameters immediately for all light sources. I controlled the intensity and radius of propagation intuitively and set the temperature to 4000K.

1 of 2

I used only a small value of chromatic aberration as one of the post-effects and variated the focus for each individual render, plus changed exposure value a little.

I created a video in UE4 Sequencer, but for some technical reasons, I was forced to get acquainted with Adobe Premiere, where I combined all the shots in one video, set fade, and adjusted the exposure with post-effects in Premier itself. In the process, it was very interesting to get acquainted with the basic principles of video montage (for example, there are frame join rules by size, direction of the movement, phase of the movement, etс).

Kateryna Reka, 3D Artist

Interview conducted by Arti Sergeev

Keep reading

You may find this article interesting

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