3d artist Patrick Yeung showed the way he approached his environment project, which features some cool material and lighting work.
3d artist Patrick Yeung showed the way he approached his environment project, which features some cool material and lighting work.
Introduction
The Vineyard project was done for a realtime environment course taught by Nate Stephens at Gnomon School of VFX. The project originated from a wonderful concept art created by Evgeniy Musienko (Lead Concept Artist at Frogwares). The concept art depicts a really neat wine cellar environment that contains tons of storytelling elements, which really was appealing to me. I wanted to create not only a good-looking game environment, but also convey a strong sense of warmth with the space being used and lived-in.
The Main Tasks of Game Environment by Nate Stephens
Nate Stephens emphasized on the idea of building an efficient real-time environment through the use of tileable assets. We had to learn how to analyse the concept art, and then dissect the elements to figure out how best to reconstruct it in a 3D engines such as Unreal. Before starting to model, the most important step is to assess the concept. Really get to know the place, and conduct a large amount of research. Once you understand exactly how many different materials are needed, which type of assets are unique, which ones are tileable, you can better allot the time needed to complete the project. Work smart, don’t work hard!
Structure
The main structure of the project is the interior living quarter, which also serves as the wine cellar for our imaginary occupant. The exterior grape garden area was put in during the last week of the term, because I felt that having a sun lit exterior lifted the mood of the project greatly and also solidifies the theme of a vineyard. I also wanted some kind of organic elements in the scene to balance out the stone floors and walls, making the environment more wholesome.
Entrance to main area, the living quarter/cellar.
Door that leads to the garden exterior.
Vineyard exterior area.
Mesh Production
Assets for the main structures such as beams, walls, floors and wooden panels.
Set dressings such as the wine rack, dining table, chairs and props.
Smaller Props that help enrich the environment and give a little more personality.
Outdoor structures.
Outdoor props along with a series of books to fill up the bookshelf!
The meshes are divided into unique, tileable, and modular. The biggest challenges was to plan out the environment such as deciding on the tileable and modular pieces in order to construct the world in the most accurate and flexible manner possible. Once the world measurement and texel density is decided. Every asset should follow the unit and uv-ed accordingly to maintain consistency in texture resolution through out. I think it is easy to overestimate the number assets needed. For example, wooden beams of the same size don’t need to have 3 or 4 variations, they can be rotated and placed and viewers usually can’t tell the difference. I also made 3 different variation of dining chairs, which contributed little to the overall look, but cost me extra time to texture. Decals can be applied to instanced tileable wall pieces to breakup the repetition.
Material Workflow
I used Substance Designer to create tileable materials with parameters so I can utilize them in Substance Painter on almost all the assets to maintain a consistent look while getting unique tertiary details.
I broke down the environment into aged wood, smooth wood, plaster, and tiled stone. I highly recommend having the procedural materials done before everything else because you can save time by relying on procedural materials for smaller surface detail while just focusing on primary and secondary shapes during sculpting phase. The procedural materials also give you a good base to work off of so it does not feel so daunting to start on a completely bland environment.
Optimization Techniques
One of the best thing you can do to optimize a scene is to pack your maps. Combining maps such as roughness, metalness, AO and Opacity into 1 texture can save loading time tremendously. Since maps such as these are just gray-scale values, you can copy and paste each map into the RGBA channels to create a “clown” map. Just make sure to tell unreal that this texture is NOT rgb space, but rather in linear space so the gray-scale is read correctly!
Assigning dynamic shadows to objects that truly need it can greatly improve the budget of the game. Baked lighting can speed up your environment greatly when combined with dynamic lighting. When an object is set to static, it can only be effected by static lights. So if an environment features no moving objects and everything stay still, it is the perfect choice for lighting. If a light has to move or change in a scene, objects should be set to stationary, so the dynamic light can affect it. It all comes down to figuring out what type of light is needed for certain situation in regards to the types of objects that are placed within the scene.
Foliage
I created the vines by using the curve tube brush on a wooden fence I built previously. With size turned on in the stoke option, I drew out a few different variation of the grape plants. The leaves are curved planes done in Maya. I found raw photos of grape vine leaves online, and then cleaned them up in Photoshop. Once I had a nice albedo for the leaves, I just need to plug them into something like Shadermap or Bitmap2Material to generate some decent normal maps. The leaf shader is a simple material that uses SSS profile.
To micmic the slight animation of the leaves, I setup a simple pixel world offset through the use of combining 2 scrolling noise textures. As you can see below, the textures are scrolling at a different rate, giving the illusion of randomness.
Lighting
The lighting was a challenge in the beginning because of Unreal’s default auto exposure. The change in values was too much going from indoor to outdoor. In real life, our eyes have an incredible adaptability to receive outdoor lighting with indoor lighting. Nate advised me to shut all of the auto-exposure off while lighting so I can see the lights for truly how bright they are without post-process messing it up. There are 2 places you have to go to control the exposure. First, turn off auto-exposure in the rendering settings of project settings.
Then set exposure value min and max to 1 and 1 in the post-processing volume. This will allow you to fine tune the exposure later on after all the lights are placed and their intensity are set correctly.
The scene is mainly driven by the Ultra Dynamic Sky asset, which you can find on Unreal’s Marketplace, and a main directional sun. In the interior, I wanted the dynamic shadow of the trees to show on the opposing walls, so assets that are moving are set to stationary. This way, they will be affected by both the static and movable lights. Most of the assets that would never move are set to static so they make use of the baked lighting. So in conclusion, baked lighting is used prevalently through out to get the most of baked shadows and ambient occlusion. The sun, which is set to stationary, gives both baked shadows and dynamic shadows on the appropriate assets.
The main area relies heavily on baked lighting for efficient soft shadows and AO.
Instanced wall pieces are broken up by the use of damage decals. You can also see the dynamic tree shadows on the wall.
Outdoor lighting features a combination of dynamic lighting and baked lighting.