Congratulations Lukas:) Amazing piece of 3D parametric shader:) thank You for sharing Your knowledge:)
Great studio. Great game will be.
Maybe ... but dont try to touch it xD
Daniel Paz presented his atmospheric game 103 and spoke about lighting & color tricks, small environments and level production in UE4 and more.
Hi! My name is Daniel Paz and I’ve been a professional freelance 3D artist for over 3 years now. I’ve worked on a bunch of commercial 3D projects, indie games, some released, some not released. But on almost every project I’ve been involved in more than just the 3D art side. I picked up many other skills going from scripting to technical art, audio, and FX. Something I really admire about the indie scene is cross-skilling.
In July 2017 I officially opened a little game studio Dystopia Interactive (located in Australia) and started working on 103 with the intention to have it released this year. Everything is going well so far!
To be honest, most of the time I work on the game alone. At the start of this project, I worked with three illustrators (advertising, promotional and in-game illustrations), two concept artists (character, environment), a voice actor and a character rigger to help me get my initial ideas down – work that needed to be done but I didn’t have time for. But I’ve basically been building the whole game myself. Here are some of the initial concepts.
103 is a first-person mystery adventure video game. I started designing the game in January 2017 and spent six months in my spare time putting it all together on paper. I wanted it to be simple but executed well. Furthermore, I do want the message of the game to make an impact on people as it involves some actions common in society.
The plot focuses on the exploration through the imagination of Lily, a college student who is trying to remember what happened during a night out with her friends. You play as Lily, and you progress through the game simply by looking at objects to piece the story together. The more you observe the environment, the more you understand. Primary instructions and simple riddles are given to guide the player as you progress and discover what’s happened.
I have a small planned Kickstarter this August as well as a full game release planned for the fourth quarter of this year. The Kickstarter will mostly be for legal costs, minor development and better localization which I want to include in the game. I’ll give out all the details during June and July.
As I am using Unreal Engine 4, I initially blocked out the basic level in-engine Greyboxing with BSP meshes. It’s fast and I can export it for use any time I need. I use it mostly to get down the scale of the player and environment. Keeping in mind that I did want to build a modular environment, I blocked it out with modular pieces. Such as a 2m x 2m floor, ceiling, etc., but never going into detail as I didn’t want to spend too much time on it. Once I blocked it all out and was ready to continue, I exported it all and started meshing in 3ds Max. Eventually, I just converted the BSP meshes to blocking volumes as well for environment collision, and it was easy.
It’s all based on the story and what I want to show. The environment and the level could be bigger, but I find it unnecessary. There could be even more detail, but the player won’t need it. To me, it’s about showing only what you need to.
I kind of pulled this from my creative writing days back in school: every word matters, get rid of anything you can as long as the reader understands your idea. In this case, all the assets, every prop, every character, every sound is directly related to the character’s story. There’s no fuzz or things put in just because it would be cool to do so (this path never ends).
I separated the environment art into 3 levels of detail. Level 1 is the initial modular environment with larger objects such as walls, floors, trees, etc. Level 2 includes window frames, doors, corner accents, tables, carpets and more. The final level includes all small props: pictures, lights, books, decals and such. So after I broke down what I needed in these three levels and started building them. I didn’t move to the next level of detail until the previous was finished. Every model is built to the grid because that makes the process a lot faster when putting it all together in Unreal.
Working on Materials
I’ve been using Substance Painter for a long time now and I really love how great the workflow is. Initially, I textured only the characters and built smart materials that I could reuse later. Once I finished texturing them, I had every substance material I needed ready to be used for the environment. There are a few materials which were custom such as glass and particle FX. But every model was textured in Painter.
The only things which weren’t done in Painter were the paintings, posters, decals, and illustrations. You will see in the game. In any other case, drag-and-dropping plus adjusting a few values was all I needed to do once my painter materials were set up.
In Unreal I set up a basic parent material which has a cloth render option where needed. The cloth shader is masked based on roughness in the textures, but there is also an option in material instances to render the cloth shader or not. As well as the usual roughness, specular and metallic parameters help to customize the overall look.
Use of Colors
This was the easiest part of the project as I wanted a consistent look throughout every single visual aspect of the game. I put together this palette before any art was done. And every single color that is being used in the game, uses one of these colors including all textures and even light colors. As you can see it’s a balance between warm and cool tints as I want the player to feel comfortable in most places of the environment. And I also wanted to make sure that the colors work well if mixed together.
In this game particularly, I want the player to feel comfortable in the lit areas and uneasy in all other areas. The player constantly moves between well-lit and dark areas so I wanted to create a bit of tension as the player enters the shadows. Based on the events in the game and technical limitations, it is a mix of static and dynamic lighting.
I initially built the lighting while in the Greyboxing phase, using lights with no color. This helped me to find the correct values for each light both interior and exterior. Then once all the models were in and textured, I applied the colors (as in the palette) and did the final intensity adjustment as the color does affect the lighting intensity. Again, I kept to the color palette with the lighting and textures. When the light colors mix with the texture colors and bounce lighting, it blends it all together really comfortably and makes the environment easy to read and look at.
The animations I have shown so far are all very simple small looping animations. But I want them to be as polished as possible. The two characters in the game are basically toys so I want their movement to be subtle and creepy but still readable and believable. Most of the time the characters will look at the player. This is achieved with a simple blueprint animation script that turns the characters head rotation to the player location.
Nothing too complex, but I’ve seen head turning in other games and it feels unrealistic, as it’s just a constant ongoing turn towards the target object. In real life, we mostly turn our eyes, heads are turned only when needed. So I added a delay in which the script checks the player’s location, resulting in the head turning at certain points so you feel like the character sees you before they turn their head. The rigger who set it all up in Maya and I ended up converting it all to a CAT rig in 3ds Max. This way I can save poses, blend, and export animation updates very easily.
Project Challenges and Advice
As I have a streamlined workflow for creating assets, I never run into an issue I can’t fix quickly. Few things that take longer than expected are technical such as trying to perfect the cloth simulation on one of the characters. Thanks to Unreal’s integrated cloth system, I still saved a lot of time compared to if I had to build it in a different application.
To be honest, the most difficult things I’m coming across now are the things I don’t know. The hardest thing at the moment is testing and optimization as these are new to me. But I integrated it into my workflow. This mostly includes memory usage across all assets. So I test what I can while I’m still building it, optimize performance as I go, try to learn and do as much as I can during production. I believe that will save me a lot of time rather than just doing it all at the end.
I always liked pointing out the weaknesses/things I know I will struggle with at the start of a project. That gives me time so I can keep up on it and remind myself what I do need to focus on. Otherwise it will delay things a lot. I guess, the most important thing is to know and understand your capabilities, set up a good workflow for production before you start.