Building an Interior for Unreal Engine
Since my early teens, I have always been very creative and fascinated by the power of art. As a hobby I begin taking a lot of photography and filming using my camera. As many others I did not know what kind of job or industry I would like to work in. Until I discovered the world and power of Computer generated images “CGI”. I soon figured out that it is constantly developing and there is always something new to discover.
Hi, my name is Adam Karlsson - a student from The Game Assembly currently doing my internship at IKEA Communications as a 3D Artist.
In this blog post, I will share my overall workflow of how I did archive the scene above using Unreal Engine as a render engine, but also the supporting softwares.
One of plenty advantages of using Unreal Engine is that it let me quickly visualize and adjust different types of lighting behaviors in real time.
Finding the right inspiration and references will definitely speed up your overall workflow and help you stay motivated.
I really recommend everyone to create a free Pinterest account. It will help you collect a huge amount of images of different types of styles, furniture, tools, and tutorials. I used this to help me set up my own mood board for this project.
When you find something new, an idea that inspires you and has potential, it is very important that you collect them. Try and write it down and capture what you thought or felt. Because good ideas usually do not come by when you are in the working process.
Before you start building or importing assets to your scene you always want to set the specific dimensions that you will be working with. For this kind of project, I decided to work in centimetres which I prefer for interiors.
I would like to be able to work at a good frame rate and be able to tweak settings without any restrictions. However, to be able to do this it is important that you keep your scene in a good condition. You can do this in a lot of different ways.
Level of details, decreasing the polycount, using smart modeling techniques or lower your textures. I decided to give the models that would take up a lot of space on the screen a bit higher polycount than the smaller objects.
In the beginning, it is all about the overall shapes and dimensions. I started this project by modeling a basic room and building the main focused models out of simple primitive objects. This includes everything that is important for setting up the camera at the correct angle and finding out what objects will be closer to the camera.
For this project, I chose to work with a standard camera. I then match up the camera angle to get a good composition and as close to my reference photo as possible. I adjust and change the field of view to get the camera to work better with the objects in the scene.
Importing to UE4
While importing models inside UE4 make sure you unclick “Generate Lightmap UVs”. You want to create your own separate UV for that.
It is very important that you know what type of lighting technique you will be using through your project. When creating this project RTX (Real-Time Ray Tracing) was not out yet so I was going with fully baked lighting. For that type of technique, Unreal Engine requires separate UV set for your lighting to work correctly which you don’t need with fully dynamic lighting.
If you going for baked lighting or even hybrid dynamic lighting you will and need to pay attention that your UV lightmap looks good enough. The results of a bad lightmap can affect your objects and your overall lighting quality in your scene.
Make sure to change Destination Lightmap Index set to 1. This will make sure it links to the correct lighting set. You can later adjust your Light Map Resolution which will increase your lighting quality of each object but also cost more performance. The image below shows how you can preview the lightmap density of your entire scene.
Ask yourself what kind of light workflow you will be working with before starting with your new project. It will save a lot of time as you don’t need to make any unnecessary work.
Using Marvelous Designer I could easily build my 2D patterns and simulate the clothing I wanted. It gave me fantastic results and saved me a lot of time.
I knew my clothing models would be expensive so I wanted to fix this by creating better topology and make it less heavy in performance.
To do this I used a specific workflow to keep the details but lower the polycount.
I started by doing a simple “reset 2D Arrangement”. I then export it with these settings and open it in ZBrush.
Inside ZBrush, I have my quilt imported as two different planes. I then made a ZRemesher of it and here you can decide your polycount. The first two planes show the mesh count of Marvelous Designer which is very high.
Inside Autodesk Maya, I import my quilt plane meshes. First I select my high poly mesh and then low poly mesh. I then use “Transfer Attributes” to transfer the UV to my new mesh.
I then selected my Marvelous Designer mesh and my low poly mesh. I again use “Transfer Attributes” but this time with vertex position function. This will take the 2D plane with our correct UV and transfer it to our Marvelous Designer mesh with new geometry. Fantastic!
This is how I did on all my clothing meshes to save geometry. You will always need to go in and tweak it a bit but it gives you a good mesh to work with.
The Marvelous Designer mesh was 508.760 thousand triangles and my optimized model was only 2.940 triangles. I later match up the high poly and low poly inside ZBrush by using the projecting method which will give me even better results when baking a normal map.
Inside ZBrush, I start adding more details and refining the model. This includes parts like adding more wrinkles softening out hard edges. I recommend using some already custom made brushes that will help both speed up your workflow but also create an easier template for you to work with. Then I can go back and refining these wrinkles.
I use these brushes from Poliigon I really recommend you to grab them since they are free!
I did the modeling part inside Maya and tried to use the bevel workflow as much I could to avoid the needs of a high poly. But it did for most of the models end up that I created a low and high poly mesh which I later baked inside Substance Painter.
Whenever you are using downloaded textures or creating your own it is important that your materials look as good as possible. I chose to create my own materials using two different software tools.
Don’t forget that we’re dealing with CGI. Many images people do today is to perfect. Adding imperfections like dust, scratches, and particles can make your scene tell a story but also make it look more realistic.
I chose to work a lot in this software as it let me be very creative and I could easily work without feeling limited in any way. I did all the tiling textures for this project inside Substance Designer. The good thing is that you can just drag and drop your model right inside the 3D viewport which will visualize your model with your material.
Inside Substance Painter, I did all of the texturing for the smaller objects and the decoration.
The synergy with these two software tools is that you can start creating your materials inside Substance Designer. You can then later adding dust and imperfections on your models inside Substance Painter to make every object unique.
I also used this software to bake out all my normals maps that I later combined with my finished material inside UE4.
Creating the Carpet
Something which I really was struggling with was creating the carpet. I knew it would take up a lot of space and get a lot of attention but it would also get the light straight on it. I used Parallax Occlusion as method to create the carpet.
I did create the textures inside Substance Designer. This is how the final graphs ended up. I used an RGBA merge node to combine the different texture outputs into each channel.
If you want to see the whole breakdown, Barry Lowndes made an amazing tutorial on this. That’s exactly the same method I followed and used for this project.
Inside UE4 I could easily adjust different types of parameters like the tiling amount of the pattern.
I then started to create different instances with different types of patterns. The pattern used in the final image is made in Substance Designer. But I also ended up taking some photos with my phone.
Working with instances I could easily swap carpet and change settings and make every material unique!
I recommend you to try out the skylight function inside UE4 it will let you set up basic lighting very quickly and let you import a specific HDRI image to your scene.
In this project, I decided to go without it and just focus on building the scene with the help of standard directional lights and rectangle lights.
The lighting will create a lot of light rays so it is important we pick them up in the right way. I used one simple Sphere Reflection Capture to make the scene pick up the reflections in the room. You can also try out the Planar Reflections which will give you a lot better reflections on a specified object like the floor for example. Make sure to activate planar reflections in your project settings to make it work correctly.
Lightmap Importance Volume
Use lightmap Importance Volume, it will save performance on your lighting and help your scene run better.
It allows you to concentrate only on the areas that actually need detailed indirect lighting. Areas outside the importance volume get only one bounce of indirect lighting at a lower quality.
For this project, the rendering process was pretty simple since I already have set up a camera rig with correct proportions. Use the Post Process Volume. This will allow you to tweak different settings and the overall feeling of your scene.
Before rendering I always go through all my passes inside UE4 to see if I find anything wrong in my scene.
A big thanks to The Rookies for letting me write this post, it was such a great opportunity.
Also, I want to thank all my classmates and teachers at The Game Assembly for their great help and support. If there’s anything you would like to ask feel free to contact me on my social media. I hope you find this article helpful and that you learned something new. Cheers!