[lightbox selector=”.article-images” deeplink=”true” opacity=”0.875″ prev_scale=”0.75″ prev_opacity=”0.75″ next_scale=”0.75″ next_opacity=”0.75″ orientation=”vertical” thumbnails=”false”]
When I started this project I knew a feeling I wanted to grasp with my environment – one that required a large scope of design – but I really had no clue how to approach it. I decided early on that the main focus of the project would be the film in order to narrow down my thought to something feasible. Ultimately that decision led me to a whole new world of design for arch-vis. This is something I’d never done before. I set aside social obligations and told friends I’d see them in 12 weeks and I hunkered down for the long haul – lots to learn in a small amount of time.
I decided right away to get started on 3D blueprints for the villa, but I needed to find a villa or design one. I decided to use a reference as my personal knowledge on arch-vis is not great enough at this point to design one from scratch and populate it within the time period. My reference was the Villa Barbaro in Italy. I knew the visual aesthetic I wanted, but didn’t know any of the terms for it so when I stumbled onto Villa Barbaro it clicked and I hit it off.
Drafting and Blueprints
[x_image type=”rounded” float=”left” src=”https://robotbrush.com/wp-content/uploads/2015/12/1-300×153.png” link=”true” href=”https://robotbrush.com/wp-content/uploads/2015/12/1.png” class=”article-images”]I spent the first week or so drafting out the villa and making approximate measurements based on modern standards. I actually scaled the entire building relatively off the scale of a door frame in the picture. I tried to keep many things to scale and accurate, but I made some changes in the wings and back to suit my own ideals.
Finding reference for the interior of the villa was a task of its own so I decided that I would create my own interior style. I chose a mix of my own ideals with modern and contemporary to contrast with the older exterior.
Here is a shot of the finished draft in Sketchup.
[x_image type=”rounded” src=”https://robotbrush.com/wp-content/uploads/2015/12/2.png” link=”true” class=”article-images”]
UE4 and General Preparation
Ultimately I think it was this preparation that led me to finishing in time and having a well-balanced scene setup. UE4 was still new to me so I knew I needed to be strict with my time management in order to tackle unforeseen problems. I started scheduling my daily to-do lists so I would know what I needed to work on as soon as I was up and on my PC. I began plotting out the animation and what I wanted to show. I also decided I wanted to use a fully dynamic scene setup for lighting; that was the big challenge here. I had done lightmass before in UE3, but it was foreign to me in UE4. I chose to go fully dynamic to avoid long rendering times so I could spend more time working and less time guessing and checking between lightmass bakes. Dynamic lighting has its own pitfalls that I experienced and I’ll cover them more thoroughly in the lighting section. The final bit of my prep work went into music and other attributions. The music in my video was actually created by my friend Matthew Sbar about 4 years ago. I requested a shorter version for the video and he was happy to contribute. I also asked some of my friends who do digital and traditional painting if they’d like to have their art in the video, and my friend Aki Ling agreed to let me modify and use a couple of her paintings. You can find them above the kitchen table and on the restroom wall.
Landscape and Exterior: Landscape
For my landscape I wanted something both optimal and pleasant to look at. I chose to go with a grass plains setting to avoid the time sink of creating and optimizing several tree assets. Early on in package tests I was using DOF to hide the horizon in a lot of my shots. It gave me a sort of unintentional claustrophobic feeling while walking around so I decided to work towards creating a better horizon that would allow me to remove my DOF.
The image below shows my initial DOF settings and how it had an effect on the horizon.
[x_image type=”rounded” src=”https://robotbrush.com/wp-content/uploads/2015/12/3.png” link=”true” class=”article-images”]
The landscape heightmap was created in WorldMachine. I started with a valley area filled with rolling hills and blended that with my outlying mountains via a layout generator. I wound up making HD textures for it in substance designer using height/slope clamps and noise generators for blending different grass colors.
The shot below is the initial landscape in Substance Designer.
[x_image type=”rounded” src=”https://robotbrush.com/wp-content/uploads/2015/12/4.jpg” link=”true” class=”article-images”]
Landscape and Exterior: Foliage
Foliage is, and was, a challenge to create. Because of the sheer amount of grass, I needed in my scene I had to not only make something that looked good, it had to work without completely destroying my framerate. For my grass, I somewhat succeeded with this. With my vines I wasn’t so lucky. I created landscape layers and Landscape grass types so my grass would auto-apply wherever I painted on my landscape. I found this was best because I could get a natural breakup of grass heights and flowers by painting different layers down using the noise brush.
This is from the initial landscape grass painting setup I did.
[x_image type=”rounded” src=”https://robotbrush.com/wp-content/uploads/2015/12/5.png” link=”true” class=”article-images”]
I had a lot of initial problems with my grass LODs appearing all at once, but I learned how the meshes size on screen affects LODs and adjusted them to fix my problem. My grass material started out looking great up close, and bad far away due to normals and single sided lighting. To fix my normals and black faces I did a couple of things. I used the transfer attributes function in Maya to give my grass planes all a vertical normal direction instead of setting normal direction to face direction.
This image shows the how using the transfer attributes tool in Maya lets me overcome the dark backface problem of grass foliage.
[x_image type=”rounded” src=”https://robotbrush.com/wp-content/uploads/2015/12/6.png” link=”true” class=”article-images”]
I also used a combination of material normal modification and SSS with fuzzyshadinggrass to soften the look of the grass in the distance. One of the biggest additions I made to my grass was the random colorization. I used masks from my landscape that I made in Substance Designer to create landscape grass color maps that I could use to stamp my grass based on world position. Regrettably, I wound up with grass that looked great in the distance and not as good up close because of the piles of modifications I made over time in the material. I’m excited to revisit my foliage in my new project so I can get something that looks good up close as well as far away.
Here is a shot of my initial up-close grass. I’m a huge fan of the look it has. Unfortunately, the look was lost over time as I made it look better in the distance. I’ll be rebuilding my grass material soon and may release a tutorial for it once I get something that is well rounded!
[x_image type=”rounded” src=”https://robotbrush.com/wp-content/uploads/2015/12/7.png” link=”true” class=”article-images”]
My vines are a strange part of my horizon. I admittedly put off placing them for a while in favor of populating my villa more, and because of that I lost out on some time I could have spent optimizing them. I wound up keeping them as a horizon only addition and locking them to LOD4, the lowest cost LOD. One of the major things I’m taking away from the vineyard project is the value of optimization, especially in a fully dynamic project like this.
Here you can see a partial shot of my vines at LOD0.
[x_image type=”rounded” src=”https://robotbrush.com/wp-content/uploads/2015/12/8.png” link=”true” class=”article-images”]
Let’s talk hedges! My hedges are something special for sure. I had vaguely heard of the term shellstacking some time ago, and I knew it could be used for things like rugs, but I read into it more and wound up figuring out a way to shell stack my hedges. It’s a slightly longer process that really deserves its own tutorial, but I’ll try and summarize it up here in a simple manner.
First off — shell stacking, what is it? Shell stacking is a technique that we can use to achieve depth with a model. It’s most commonly used for furs, rugs, foliage, grass, and hair. A shell stacked model consists of the initial shell of the model duplicated and offset or scaled up for each stack. Your stacks should all use the same UV’s so it’s best to unwrap it before you stack it in my experience.
Here I show a cut of what shellstacking looks like in Maya.
[x_image type=”rounded” src=”https://robotbrush.com/wp-content/uploads/2015/12/9.png” link=”true” class=”article-images”]
After stacking like that I split my 4 shells UV’s into identical quadrants so I can display a different image variation on each shell in the material editor while keeping them lined up. This was necessary because I wanted to fake depth by having shell 1 be the darkest color, shell 2 as medium-dark, shell 3 as medium-light, and shell 4 as the lightest color. I used quadrant masking in the material editor to allow myself to have infinitely tileable hedge texture resolution based on a single texture with alpha so I wasn’t constrained to baked-down shellstacking resolutions. This part will definitely be in a tutorial eventually. It was really cool to make.
This is a shot of the final shellstacked hedge with fuzzy shading on it. It’s a modular material that can be applied to any shell stacked model with 4 stacks so long as the model is set up appropriately. This will definitely be used in future projects.
[x_image type=”rounded” src=”https://robotbrush.com/wp-content/uploads/2015/12/10.png” link=”true” class=”article-images”]
Landscape and Exterior: Villa exterior materials
My materials on the exterior of the villa are all based on a wonderfully modular parent material. It’s a shame I never got around to hooking it into a widget for control, but it’s something I’m looking forward to doing in future projects. The main material on my villa exterior is set up as a switch material. I could essentially select within the material instance what kind of stone it was and then change the per-instance color or global stone type color via collection param. It has many options within it including an input for baked AO. This was something I used heavily in my exterior scene, I’ll explain why. With dynamic lighting I was missing out on the subtle aspects of shadowing that make things really seem to connect. I fixed this to an extent in several different ways. On a large scale I baked AO for my entire building, piece by piece, without including interior décor in the AO influence. Then on a smaller scale I baked AO for most décor individually or if I knew that asset would be only in one spot I baked it in relation to its position. As a final touch I created a modular fake-AO shadow decal that I used to place AO in spots that it was naturally flushed out due to the lightleaking on the LPV GI. I also used this on generally anything that looked like it was floating or just not connecting to the environment properly.
Here you can see where I used the fake AO to connect the chairs to the ground with the subtle shadowing decal.
[x_image type=”rounded” src=”https://robotbrush.com/wp-content/uploads/2015/12/11.png” link=”true” class=”article-images”]
Interior and Décor: Villa interior materials
My interior materials were meant to be as modular as my exterior, but I didn’t get around to hooking them all up in widgets like I wanted to. It was one of those things on my to-do list that I marked as “only do if time allows” and time did unfortunately not allow. Similarly to my exterior materials, I baked AO for nearly everything on the interior, and where baked AO wasn’t possible I faked it again using the subtle shadows decal I created.
If you look closely you can see here how I used the Fake-AO in my kitchen scene to add subtle shadows under the shelves and hanging utensils to make them seem less floaty. Image 1 is before, image 2 is after
[x_image type=”rounded” src=”https://robotbrush.com/wp-content/uploads/2015/12/12.png” link=”true” class=”article-images”]
[x_image type=”rounded” src=”https://robotbrush.com/wp-content/uploads/2015/12/13.png” link=”true” class=”article-images”]
One of the biggest challenges due to my dynamic lighting and LPV GI was metallic materials and reflections appearing much darker than I thought they should. I eventually deduced that ReflectionCapture actors don’t take into consideration LPV GI, so your reflections are that of your non-GI environment. There were a couple of workarounds I found, one of them being increasing the ReflectionCapture reflection brightness. However, without the GI taken into consideration they were reflecting a color that was far too blue to be natural to the GI lighting environment. There was no workaround that actually fixed the problem. Since my kitchen scene was the most exposed to the sunlight and heavily impacted by GI, I actually just went into my matinee cameras for the kitchen/front room scenes and modified the GI settings per shot till I got something that looked good. Cubemaps could have solved the reflections issues to some extent now that I look back on it.
Another challenge I had with my materials was with my glass. Everyone has problems with glass in one way or another apparently. Originally my glass started off as just a near-invisible transparent material. Then over time I learned about screen space reflections and refractions and that they can be applied on transparent materials. Naturally, I selected an object and applied my new SSR+Refractions glass only to have it crash my engine. When I re-launched I applied it again following the same steps, but this time accidentally in unlit mode and I didn’t crash until I turned back to lit mode. I had to do a lot of digging to find out what was causing the crash and I wound up finding the culprit. In the long run it had to do with two things that both needed to be met in order to cause the crash. If you have a model with multiple material elements, set one to glass with SSR or refractions, select the model in lit mode in your scene, it will duplicate the crash if you’re using LPV GI+Dynamic Directional light. I solved the problem by reimporting all my glass as a separate model for each object with glass in it. Lesson learned!
Something I almost strangely obsessed about near the end of the competition was the library scene. I originally created a material for my books that assigned a random color to each book based on a look up table a.k.a. LUT. The material was very primal and my original look up table was far too colorful to be believable in any sense. I dulled my LUT, changed the colors around to a select few, and applied some binding flourishes over the leathery texture. Another task that was on my “Only add if time allows” list was randomized book names based on word tables, but there was no time for it in the end.
Here I show one of the older images of my library as well as an up to date one.
[x_image type=”rounded” src=”https://robotbrush.com/wp-content/uploads/2015/12/14.png” link=”true” class=”article-images”]
[x_image type=”rounded” src=”https://robotbrush.com/wp-content/uploads/2015/12/15.png” link=”true” class=”article-images”]
Interior and Décor: Villa interior assets and establishing scene
Something I really wanted to nail in my villa was subtlety, and I actually came to think of scene design in a new way that I’ll be interested in applying to future projects. Similarly to how good materials are made with the balance of high and low frequency noise, I designed my scenes in a way to open up the space and leave plenty of spots for the eye to rest. I think that really helped bring the scene together. By balancing the frequency of the noise in each scene, e.g. large objects, small objects, colors, and contrasts, I got the effect I desired in each shot.
When it came to actually modeling all my assets I just google researched around like mad and collected all my images in a reference bookmark folder. The days of modeling honestly just blurred together as I wound up making about 200 models in a week and a half while being powered by caffeine. Then came unwrapping, packing, texturing and baking AO. I won’t go into terrible detail with those though as they’re relatively standard.
Lighting and Post Process: General lighting
I want to start off by saying that lighting is insane in UE4. The fact that I was able to dynamically light my scene with GI included still blows my mind. It’s a bit heavy on my framerate, though that’s easily due to the poly count of my scene. If I had taken more time working on optimization by creating LOD’s for more than just foliage as well as including level streaming per room, I’m sure I could’ve had an optimal performance scene eventually, just not in time for the contest deadline.
When I started in on my project I played around with lights a little here and there and quickly learned that overlapping too many shadow casting lights is extremely detrimental to performance. I had to get creative with shadow casting by choosing which lights were allowed to cast shadows and which would only affect world. I learned about GI, and specifically LPV GI, about three quarters through my project. I read up as much as I could on it and even though it was marked as experimental I hustled to implement it as soon as possible.
An example of before LPV GI, and after LPV GI:
[x_image type=”rounded” src=”https://robotbrush.com/wp-content/uploads/2015/12/16.png” link=”true” class=”article-images”]
Almost immediately it improved the visual quality of my exterior scenes like magic, but I noticed quickly one of the major pitfalls of LPV GI.
Light Leaking
[x_image type=”rounded” src=”https://robotbrush.com/wp-content/uploads/2015/12/17.png” link=”true” class=”article-images”]
This quickly became my biggest problem for a little over a week. The LPV GI has a setting on it called LPV Bias, and by turning it up you can eliminate light leaking through thin objects like walls and such. This helped to an extent and fixed it for my walls and floors, but it wasn’t quite good enough; I still had light leaking problems on my ceiling, and because it was white it was extremely visible. I learned about LPV Emissive injection in the LPV settings. It led to me figuring out how I can at least cover up the light leaking on my ceilings. I just had to make sure my rooms were well lit for it to look natural. Essentially I modified my ceiling material to have an emissive color parameter that I could modify in the material instance. By slightly increasing the emissive amount I decreased the difference between the powerful light leaking and the darkness of the ceiling. It helped immensely in covering up the light leaking. I also changed the color of my walls to a slightly darker cream color to make the brighter ceiling seem more natural. Overall I’m pleased with how I covered up the problem in the end.
[x_image type=”rounded” src=”https://robotbrush.com/wp-content/uploads/2015/12/18.png” link=”true” class=”article-images”]
Lighting and Post Process: DFAO
DFAO was one of those interesting things that I’d heard of vaguely for a little while through people in the UE4 Developers Community group on Facebook. I knew from what I’d read that it was best for modular scene setups and not great on large models. I only ran into one kind of problem with DFAO and it was easily fixed. If you do have relatively large meshes and you have a low resolution bias for your mesh distance fields you’re going to have black blotches in places you don’t want black blotches.
A screenshot from when I was experiencing blotching from my initial DFAO. I’ve adjusted the levels to show the blotching better.
[x_image type=”rounded” src=”https://robotbrush.com/wp-content/uploads/2015/12/19.png” link=”true” class=”article-images”]
An example of my initial distance fields resolution when enabling “Generate mesh distance fields”
[x_image type=”rounded” src=”https://robotbrush.com/wp-content/uploads/2015/12/20.png” link=”true” class=”article-images”]
By cutting the large pieces up and increasing/tweaking the mesh distance fields resolution per mesh I was able to eliminate most of the blotching. Another thing to note is that large groups of small meshes can cause DFAO leaking. The best example of this was my books. I have 3553 books in my library if I remember right, and DFAO being enabled on them leaked AO through the floor into the kitchen ceiling causing it to look really blotchy down there. I simply turned off the DFAO influence for my books and left it like that to get rid of the problem. I’d like to look into it further eventually now that I’m not on a deadline.
Lighting and Post Process: Final post process
I kept my final post on my project relatively simple and subtle, with no post process outside engine aside from the title and the outro name. Most of my post was tweaking the auto exposure as well as the overall gain, and gamma of the scene. One thing I learned is that you should almost never adjust auto exposure near the end of a project. After tweaking it from too bright down to a decent brightness I went back and changed all my material colors again because they didn’t look right in the new lighting. I ran in circles for about three days trying to even out the lighting and colors in my scene after that. The only other post process that I used is the vignette and a slight fringe.
Sculptures
I wanted to make a special section for my sculptures here even though it’s not as much technical as it is artsy. Sculptures are one of the real reasons I grew so attached to the architectural style I chose for my reference. I sculpted, retopo’d, and uv’d all my sculptures in Zbrush. It was a huge chance to help solidify what I had been learning about anatomy just before beginning the vineyard competition. They’re by no means perfect, but it’s a great step in the right direction for bringing my character art skillset into my environment art.
The front face sculpt after texturing, before adding in the bull’s head in the center: It was a separately sculpted model to make unwrapping easier.
[x_image type=”rounded” src=”https://robotbrush.com/wp-content/uploads/2015/12/21.png” link=”true” class=”article-images”]
My faun I sculpted for the front pedestals.
[x_image type=”rounded” src=”https://robotbrush.com/wp-content/uploads/2015/12/22.png” link=”true” class=”article-images”]
Poseidon in the fountain. He was definitely one of the fun ones!
[x_image type=”rounded” src=”https://robotbrush.com/wp-content/uploads/2015/12/23.png” link=”true” class=”article-images”]
Final Thoughts
I wanted to take the time to say my last words in a formal thanks to Epic and Ronenbekerman for hosting this competition. It was a great experience to grow my knowledge in UE4 and it allowed me to sit down and really get into the meat of the engine. Cheers to you both, this has been a wonderful ride!
[x_author title=”About the Author”]
[x_share title=”Share this Post” facebook=”true” twitter=”true” pinterest=”true” reddit=”true” email=”true”]