Making a Stylized Port City in UE4

Making a Stylized Port City in UE4

Jaume Rovira wrote a breakdown of his new stylized environment: creating buildings and materials, setting up the scene in Unreal, adding subtle animation, and more.

In case you missed it

Read our previous interview with Jaume


Hi everyone! My name is Jaume Rovira, I'm an Environment Artist from Barcelona. Just as a quick introduction to myself, I’ve been working as a 3D Art Professor for the last 5 years but nowadays I’ve changed my goals and I’m looking for a place in games production. That's why I started building a good portfolio and using my time to learn something with each new project. Never too late to reinvent yourself!

1 of 5

Port City: Inspiration and Goals

After my previous project, Forest Waypoint (read the breakdown here), I wanted to focus on a project with a larger scale, with sprawling vistas – so that I could practice modularity and landscapes. Besides, I was looking for something different in content from the previous project and so I came upon Jourdan Tuffan's great concept “Port City of Alberta”. It had it all: a wide-open space with a great view composition, a great color palette and lighting, and a Mediterranean/Greek vibe that I always wanted to recreate in my projects. This concept was inspired by Alberta City in Ragnarok Online.

My goal is always to be as close as possible to the reference, to push myself, and to avoid cutting corners for the sake of speed. First of all, I asked Jourdan for permission and kept him updated on my progress. Thanks a lot to Jourdan for everything!

I set myself an extra goal to make a night version of the concept, so I had to think of a workflow that would allow me to change scenes easily.

Planning the Project

Besides the main concept reference, I searched for Greek-style houses, mostly from Santorini and Mykonos, exploring their materials, surfaces, shapes, and colors. Although the main reference is clearly fantasy it’s always good to go beyond for references and understand what you are recreating.

After that, I divided the scene into different sections depending on the view distance to optimize my work time. Each had a different level of detail so that I wouldn’t spend too much time on the details that would be hardly seen.

Besides that, I did a rough blockout with simple shapes trying to get the perspective view from the concept, the close-up of the balcony, and proportions of the main building and the stairs. That helped me to decide the height of the town terraces and the shape of the port. I also added a directional light to match the original. I always try to model in real-world scale so I also looked up galleon and lighthouse measurements.

Buildings and Town

I wanted this project to be a quick one, so optimizing my workflow and reusing assets were a priority. The whole project took less than 2 weeks from start to finish, so it went rather fast.

The main building was modeled in 3ds Max (only part of it), it was rather low poly (under 1600 polys) and it was mapped into one UV map. Some elements (stone rims) were exported to ZBrush to break up the edges, and baked with Substance Painter on the low poly mesh.

Buildings in the background would have roof tiles made with a texture, but foreground elements had to be more detailed. Roof tiling was made with a great script called ATiles from AvizStudio.  I always try to model the essential parts and reuse/mirror/rescale them to get the complete building. In fact, all the surrounding buildings around the main one are composed of different parts of the original.
For the town and terraces, I created some very basic elements creating a small library of walls, towers, etc. and used them to make building variations and populate the town. Since they would be placed rather far away, they were really simple and low poly. I would later use foliage elements to break up the repetition.
Texturing for the main building was made in Substance Painter. Throiughout the process I created a material library and reused it later for the background elements (plaster walls, stone rims, painted wood, etc.). I used Substance Designer for the pavement texture and background roof elements.  
1 of 2
At this stage, I already had the main scene in Unreal, and I set up the lighting so I could adjust materials and colors to get as close to the original’s color palette as possible. Lighting was just a warm directional light and a cooler skylight. The sky was just a panning sphere texture – a CGSkies texture edited in Photoshop to get a more painted look and the right hue.
The landscape was sculpted in Unreal, I used my reference to get the shape of the mountains and the coast. I was already thinking about the placement of the cameras so that I could use the rule “if you won’t see it, don’t lose time on it”. But I was careful with light bounces, reflections, and projected shadows.
The scene ended up rather large, so I could use LODs on distant elements (trees mostly) and make good use of fog to increase the distance effect.

Breathing Life into the Scene

Moving elements in environments are what gives them life, but they should not be too distracting. I added an extra windmill to the scene to bring some interest to the left side of the image, and some low clouds in the mountains and flying birds with particle systems. Seawater was a variation of what I had in my previous project with very smooth normals to get close to an anime style.

Boats and galleons were important, and they needed to have interesting movements. I animated them with their material, combining three types of movement: up/down buoyancy, swinging, and a circular displacement over the water surface, all hooked up to World Position Offset.

Day to Night Transformation

One of the goals of this project was to set up an easy way for changing the scene from daytime to nighttime. To achieve this, before setting up the scene, I made simple blueprints of all the elements that should have emissive materials and gave them a material switcher so that I could turn them on (material with emissive) /off (no-emissive material) with just a click. The lampposts worked in the same way, activating point lights and making the lightbulbs visible.

So setting up the night version was a quick process: turning on elements, changing Skybox to a standard Unreal sky, pumping up reflections on the seawater, and changing color and direction of the directional light, blue-tinted and rotated so that I could have a nice reflection on the water. It was all done in half an hour.

Post-Processing and Presentation

For post-processing, I applied a Color Lookup table bumping the contrast a little but it ended up being a really subtle change. I turned it off completely for the night version. I also added a very slight sharpening effect from this tutorial:

For the camera movement, I always try to use slow smooth movements without sharp turns. You’re not showing off your skills with the camera, you’re trying to demonstrate the environment you’ve made so the audience should have time to look at all the details. I also found that even if you’re showing a static view, a very smooth forward/backward movement helps to immerse the viewer in the environment.


This project was a rather quick one, and several people asked me how I managed to do it so fast. I think that good planning is key for a productive time. Also, taking breaks or going outside for a run or a walk (if the lockdown is permitting it) should always be in your working plan – you’ll be more efficient if you’re not burnt out.

Looking at the project now, I see a lot of space for improvement but the learning goals I set for myself were achieved. Sometimes, it is best to draw a finish line so that you can move on to new challenges.

To conclude, once more – a big thanks to Jourdan Tuffan for his great concepts (keep up with those great works!) and to for featuring my work.

Jaume Rovira, Environment Artist

Interview conducted by Arti Sergeev

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