Unity’s Veselin Efremov explained in much detail how he builds fantastic 3d environments in Unity, using assets and plugins from Asset Store.
This interview is originally from 80.lv and was conducted by Kirill Tokarev: Environment Building with Purchased Assets
What projects have you worked on at Unity?
Indeed, our last conversation was more than a year ago, right after we made ADAM. Since then, there were many additional things that I needed to do related to ADAM, because it had such a great reception in the film world. It made the official selection at some highly prestigious film festivals, including the International Animation Film Festival in Annecy, it won a Webby award, and I presented it at SIGGRAPH Real-Time Live!. Everyone was so interested to learn about making films with a real-time engine and we were happy to share our passion about it. So there was a lot of travel for me.
There was of course also the pressure to make a sequel, but what I really wanted to do was move on from ADAM and take up a new challenge, so we’re working on something entirely new now. I hope I will be able to share at least a glimpse of it soon.
As you may know, Unity is doing a massive overhaul of its rendering by introducing the Scriptable Render Pipeline, and there is also a new Progressive Lightmapper. We have been using both of these, and a plethora of other smaller features, and things have never looked better. Also by using them, we’re the first line of practical test and feedback, so by the time they ship, these features will have gone through the “trial by fire” that we’re putting them through in our productions.
On the creative side, I continue to explore topics and themes which I find intriguing and challenging, and it’s always a thrill to see how people respond to them. The current project is very ambitious for our small team, and quite different from our previous ones.
Meanwhile, the fans of ADAM should rest assured that he will not remain orphaned – there is now a new episode, written and directed by Neill Blomkamp, and more will come in the future. It’s amazing to inspire the people you’re inspired by.
I put these at the start of every project, especially the Post-Processing Stack, which is simply mandatory. It is an official Unity feature, developed and maintained by Unity R&D. It goes through all the proper QA and is held to the same high standards as the rest of the engine. There is a dedicated team which continues to expand and improve it.
The package contains all the visual goodies that an artist will want to set up in order to achieve the look and mood of a scene: Screen-space reflections, Tonemapping and color grading, Temporal anti-aliasing, Depth of field, Ambient Occlusion, Vignette, Grain, Motion blur, Bloom. Recently it was updated to version 2, which has many improvements including better UI, faster performance, and volumes for blending between different settings.
As for the Volumetric fog, our Demo team’s GFX programmer Robert Cupisz developed it for ADAM, and after we shipped it, he put it on GitHub for anyone to use. We are do this often with the tech from our demos so that people can use it much earlier than having to wait for the “official” route, which would include proper engine implementation, ensuring multi-platform support, integration with all other systems, and commitment to continuous maintenance. While we don’t have the capacity to do the latter, we can still make things available directly to users and I am happy to see that many people use them in the meantime. It’s a shortcut. Eventually, we know that Unity should have this built-in, and it will happen.
Using assets from Asset Store, and you’ve also made very few changes there, but I’m wondering if you really managed to go without any tweaks?
It is entirely possible. I made a point to not create a single model, so that was a challenge. At one point I was looking for cables and couldn’t find any suitable ones, so I ended up buying a whole Factory set just to get the cables from there. In the end, as I was getting desperate and thought I had to break the rule of not modeling anything, Torbjorn Laedre (our team’s tech lead) made a procedural system that would generate a tube between two points. So I used that for almost all hanging cables and hoses and wires.
On the texturing side, there were a couple of maps that weren’t quite PBR-ready, so I had to tweak them. Nothing too major. There is so much variety on the Asset Store, that you’re bound to find what you’re looking for. I didn’t want to spend too much time browsing, so I usually took whatever popped up within the first 1-2 pages of results.
I also actively let myself be inspired. While detailing the scene, I kept the Asset Store open in another window so that I could browse for opportunities. For instance, at one point I felt it was all too industrial looking, so I wanted to put a big decorative element somewhere, like a statue. I did a quick search for “Free Statue” and I found a dragon sculpture and a lion head. The dragon seemed like a good fit for a bar, so I picked it. I hadn’t decided beforehand that “I need a dragon for here”. This is like browsing shops in the real world, seeing something and knowing that you need it, even if it wasn’t on your shopping list. Consider also that in the real world, you are bound to do the “environment design” of your home with only the objects that exist in the furniture stores accessible to you, but it is not much of a limitation – you can achieve an amazing interior if you choose good combinations.
Then of course, in a prototyping stage you can also break all the rules and use assets in all sorts of hacky ways – think of the asset as a composite of shapes, and maybe you only need a specific surface or detail, or maybe if you change the scale and chop out a part of the asset, you get something else which looks close enough to an entirely different type of object. I did a lot of that. There are machine elements on the walls in NEON, that actually come from an RTS building pack where originally they were the ceilings of the buildings; there is even a spaceship crammed into a wall just because I wanted to use the metallic elements of one of its sides as a surface definition for the building.
The quick prototyping approach can take you a very long way towards a finished look before you have to resort to modelling. This is super useful for exploring and setting the look of the project, and for communicating to your team what the project is, what the mood should be – so they can all get a better feeling for it and pitch in with ideas from their own areas.
Further in production, you can break down the project based on a scene like that, and it’s entirely possible that not everything you need in your production needs to be custom modelled. If premade assets are easy to obtain, why should everyone make a set of cables from scratch? If something is not seen or is hidden in shadow or is small and in the distance, the existing model most surely does a perfect job already.
Then again, if a project has over-reliance on stock assets, it can lose personality and become too generic. Think of what defines the uniqueness of your world, and make it custom; anything else can be stock, if it is subjected to an overall creative idea and a dominating aesthetic which binds everything in a coherent world.
NEON was fun to make for a couple of days, but it’s just an exercise, I wanted to see how nice it can look without spending time on authoring assets. If it was an actual project, the next step would be to evolve it through a process of discovery and world building – I would need to answer the question of what makes this specific world interesting and different from all the other cyberpunk worlds we’ve seen.
Fog and rain
The fog is from the Volumetric fog package, and it’s quite easy to use – you just put an area light in there and it scatters. There are options for density of the participating media, height, ambient lighting. It’s pretty neat; that’s actually how the whole thing started. I had a couple of boxes on a plane, and then by just putting the fog there with some area lights in it, it started to look interesting, and I wanted to do more with it.
The rain is something Torbjorn did specifically for NEON, he also wanted to have some fun while I was moving assets around. So it’s a custom, project specific tech, quite bare-bones, but gets the job done. We went through quite a few iterations with it, until we got the right feel, depth, light response, etc.
Animation was not in the plans at all. I needed scale reference, so I scattered around a stock scan of a man that I had handy. A horde of naked men in a dark rainy street was looking weird, so I painted it black with a splash of red on the face to resemble a mask. I got an umbrella model from the AssetStore and put it in their hands.
Then, as the scene started looking nice, and there already was motion from the rain and the ships and probes I had crudely animated inside of Unity, these static guys started to bother me.
We had done motion capture for another project so our Animation Director, Krasimir Nechevski, already had it lying around somewhere. I ended up using a walk cycle and an idle, coming directly from Maya. Krasi prepared the models, and I just replaced my static ones with them. There’s no real design their, they go through walls and sometimes through each other, although I got rid of the most obvious offenders.
After my glowing planes and tubes were becoming too apparent, I searched the AssetStore for neon sign assets. I got a pack and started replacing the crude primitives. To affect the fog, I put an invisible area light matching their colour behind them. The area lights have several nice options: they can light up the fog but nothing else, or they can light objects but not the fog, or both. They also can be visible or not (the light sources)
Most of the lights are the area and tube lights from the Volumetric package, but I used quite a few good old spots as well, mostly to fill up dark places. They’re cheaper and often are good enough to get the job done.
There aren’t really any tricks for how to use them, it’s the same old rules of composition and balance and colour. I’m not entirely happy with everything, but I needed to match the stock neon signs.
I added the raindrops on the lens quite late, I was resisting it for quite a while. It’s a classic in games, but doesn’t make much sense in the way I did it – they’re always in focus, even when the focus is far away. I wouldn’t normally use them at all, but in this case, I decided to give in to the cliche. Again, it’s an Asset Store package that I got, and then Torbjorn did some modifications to it.
I added the animated depth of field because it seemed a good demonstration for controlling camera effects from the Timeline. It took me some time to figure out what to put in the foreground, but then I found this really nice (and free!) toy car on the Asset Store, so that solved the problem. I just changed the colour to fit better.
The camera animation I did directly in Unity, and I’m not proud of it. But hey, that’s not what this project is about!
The environment took only a couple of days. Then I spent some time with Torbjorn to tweak the rain and do some small polish touches, like adding physics to the characters to kick those cardboard boxes and cans. Before that they were just going through them, and it made no sense to spend time on complex travel routes. The physics were a lot of fun to play around with, there were some hilarious situations.
The biggest challenges? On the technical side, it was definitely the rain. We went through so many iterations. On the artistic side, there wasn’t anything particularly problematic apart from just figuring out what works and what doesn’t. The best way to approach is to try. That’s the great thing about this sort of process, it can be messy and dirty, it’s a discovery process, and quick iterations are crucial.
Oh, at one point, after I had already detailed it quite a bit, I figured out that the buildings (Unity box primitives) weren’t aligned at all along the street. I had to add some props here and there to guide the eye and make it look like that was by design.
The List of Assets Used in this Scene (if you are interested):