Super taf! ;)
Ted Bundy's car? :D
3D artist Kimmo Kaunela is a well-known personality in game development. His works were featured in various industrial magazines. He was awarded numerous times for his achievements in 3D modeling. Recently Kimmo finished porting his famous “Zer0 Gravity” scene from Marmorset Toolbag 2 to Unity 5. In this article he talks about his work with Physically Based Rendering (PBR) in Unity 5 and gives some advice on scene optimization.
About Kimmo Kaunela
I’m a 3D artist from Finland and I’m currently working at Rammin Speed. Right now, I’m a part of a talented team developing a mobile game project. I’m responsible for environment art and overall visual style. It really is a dream job and I’m excited to see the project done.
About Zero Gravity
I’ve been playing games almost my whole life and it’s awesome to be part of the industry now. As a self-taught artist, I’m eager to learn new workflows and that’s why I decided to make a “Zero Gravity” scene. 3D graphics combines two of my favorite things, pretty visuals and technical obstacles that needs to be solved one way or another.
I’m very flattered that this work received such good feedback and helped some beginner artists with their scenes. It was a very interesting project and something I would like to continue in the future.
The aim was to create a believable looking sci-fi environment that could also have existed in the 80’s. Many reference images showed me that space stations are very modular structures that are built out of smaller modules. This was a perfect starting point for my environment project.
I wanted to build a small scene because that is usually the case with most of the space stations. There is very limited room but it should be a comfortable place to live and work. This is why I could concentrate more on quality over quantity. For a personal project I think it’s a good idea to pay attention to the smaller details instead of immediately building big and complex environments.
About Marmorset Toolbag 2
When I started the project, I wanted to learn Physically-Based Rendering (PBR). At that time Marmoset Toolbag 2 was the best choice for this. I saw its potential, but I wanted to test how far I could go with it. The tool was great for simple model presentations, but there wasn’t any environment art done with it. I still use this tech for testing my models and textures. It’s fast, easy to use, and also can produce results that look almost like offline renders although it’s in real-time.
About Physically Based Rendering
For me as an artist, PBR changes a lot. It removes a lot of guess work when I’m texturing and it also simplifies content creation in many ways. Now we have something that is almost like a common language that multiple engines will understand. It allows us to make assets that look good and realistic in many situations.
This doesn’t mean that it can be used only for photorealistic graphics like many would think. It’s just much easier to rely on physical values. This will produce more lifelike results and it won’t really exclude any art style away, but it will allow more consistent results. When things behave more like in the real world, it’s easier to create better immersion and that is very important for games and movies. Pixar is a great example of this. I love their awesome RenderMan engine.
Now engines like Unreal Engine 4, CryEngine 3.6, and Unity 5 support this. PBR is producing better quality graphics and my personal testing shows that it will do it even faster, in some cases, compared to the old way. This is because the level of faking is not much higher than it was before.
Lighting is very expensive to calculate in real-time and that is one of the key elements when making good looking graphics. IBL (Image-Based Lighting) is one of the elements of the PBR concept that helps with this problem a lot. Good ambient lighting is important but it’s often hard to get it right and IBL makes it all so much easier.
Another advantage of PBS (Physically-Based Shading) is that it allows more accurate material definition. Metal looks like metal and you can use the same shader for many different objects. Before PBS we needed to build a lot of different shaders for different objects.
These are just a few examples of how PBR helps to create better looking graphics. It would be great to see this technology on mobile. PBR still requires some power to run and some mobile devices are not ready for that yet.
Working with Unity 5
When I finished the Zero Gravity scene in Marmoset Toolbag 2 I wanted to test Unity 4.6 visual powers and started to build that same scene there. Pretty soon I realized that it was almost impossible to achieve similar results with that. I tried my best but I ended up with a scene that looked like a generic Unity 4 scene. It was also very heavy to run even though I tried to optimize it as much as possible. This was because I needed to use complex lighting and shaders to mimic the Toolbag 2 version.
I waited for Unity 5 because I knew that it will support PBR and should understand this common language that I used with the Toolbag 2 version. I was very impressed how fast and easy it was to do this same thing with Unity 5. I simply imported the models there and I got good looking results in a few hours. New lighting system worked great with this project when I placed some lighting and reflection probes in the scene. I was very impressed by the realtime GI solution that Unity 5 has.
Textures were the same that I used in Marmoset Toolbag 2 and all I had to do was to add colliders to models and a player controller and I was ready to hit the play button. All of this in under a few days with particle and other extra effects was really impressive compared to the older version of Unity.
Unity 5 supports Spec/Gloss and Metalness/Roughness workflows so you can choose what to use or what will suit you better. Visual quality is something that I´m happy with and even my 6 years old PC can run it smoothly so I would say Unity 5 is a huge step forward.
I don’t think I needed to cut anything but instead I was able to add much more content with Unity 5 like particle effects, objects with zero gravity physics and so on. Unity 5 is a great tool because you can tweak a lot of stuff in the editor and see how different elements affects to the overall performance.
Lighting System in Unity 5
Unity´s new lighting system really helps to make better looking graphics but it feels more complex than the old one. There are more settings and different aspects affect each other more. I still need to learn more about it but for this project it felt like a perfect system.
Lighting and reflection probes allows more control and for a pretty complex scene like this. Real time GI is also good for adding that extra level of realism. Another cool thing about this new system is that now you can let Unity calculate the lighting in the background and you can keep working.
Optimization Tools in Unity 5
I’ve done a lot of assets to mobile game projects and that´s why I try to work as clever as possible. PCs have much more power of course but I wanted to create a scene that would work with lower end machines and even with VR. A lot of small things affect the final performance and optimizing depends a lot on the project but here are some things I think are useful for creating scenes in Unity.
One important thing is to try to work as modular as possible. Zero Gravity scene of course has a lot of modular pieces and that really helps with the performance. Using the same models and materials means that the engine can batch draw calls and that helps removing some workload away from CPU. Of course unique details are important so the final results is a combination between modular and unique pieces.
- Try to imagine your level in different layers and think what parts need more details. I usually try to cut my scenes into 3 different layers
- One is a structure layer (floors, roof, walls) that usually will be covered with the medium layer.
- Medium layer (wall panels, doors, furnitures) should have more details than structure layer because player will be watching these assets more.
- Prop layer is the one that is going to be the most detailed layer of them all. This layer contains assets that the player will see very close and can interact with.
Another thing to keep in mind is of course texture resolutions. My system had only 512 MB of VRAM and that was the limit I tried not to hit. One way to keep things running smooth is to plan texturing process before starting it. Similar things in models can share the same area in textures and many models can use the same texture. Try to use your texture space as clever as possible and don’t leave empty spaces. When multiple objects share a texture I call it a texture atlas. This allows using the same material for multiple models. All of this makes the batching possible in Unity and it saves you some texturing time as well. You don’t need to use same texture resolutions with all of the maps in the materials neither and use simple color for albedo when possible. Tiling textures are also ideal for good performance so use them where you can.
Post process effects are one aspect that will eat a lot of performance if you overuse them. Try to use as few effect as possible to avoid problems. For example try to use only one color correction effect instead of using many different ones.
I think that polycount is not an issue anymore than it was few years ago but I still try to use optimal amount of polys as long as the models looks good. Things that will be important to the scene should have more details. Now that even the free version of Unity have the profiler I would recommend to use it. This way you can spot things that could need more optimizing. These are just some things to keep in mind when making scenes with Unity or similar engine.
Unity 5: Some Suggestions for the Future Versions
Unity 5 is a really big step forward in many ways. I really like that all the visual effects and profiler can be used even with the free version that were previously available only in pro version. This makes it very interesting and noteworthy rival against other engines out there.
I´m a person that don´t know anything about programming or shader coding. That´s why I would like to have some sort of visual based node editor in Unity 5 that would help people like me to do a simple shaders or scripts like in UE4. Luckily Unity Asset Store has a lot of these tools but still it would be nice to get these with the default Unity 5.
Particle effects are also something that Unity could make better in the future. Other than these little things I think Unity 5 is very good engine and it also allows you to port into many different platforms which makes it good tool for everyone.