Building a Library Environment in UE4
Peter Nicolai did a breakdown of his colossal library environment, talking about the creation of books, materials, the use of scale and the production of this crazy staircase.
Introduction
Hi, my name is Peter Nicolai. A few months ago, I was a student in Clinton Crumpler’s UE4 Modular Environments class at CGMA. I’ve always loved computer graphics and I’ve worked alongside visual effects and games artists for many years. However, I have always been in the production department dealing with schedules and budgets and people. My art interest has always been practiced at night and on the weekends as a long-term hobby. This class was my first attempt to make something much larger and follow some more specific rules and guidelines as opposed to just tinkering at home. I’m really proud of the work I was able to do during the class and the feedback and critique from everyone has been very encouraging.
I have learned a ton from so many other artists who have shared their work or taken the time to make tutorials. I hope something in here will be helpful or useful to others out there.
Environment
As the class started I had no idea what I was going to build. I was initially thinking of places of a much more modest scale. One of the first assignments was to simply pick your environment, decide what you’re going to build and start gathering reference for it. I was looking for something that would suit my skill set and the fact that this was quite literally the first thing I was going to try to build. I didn’t have, honestly, a ton of confidence going into this so I figured smaller and contained would be smarter.
I went to Google and Pinterest and started searching for interior spaces just looking for something that would keep my interest across the class. I wanted a space that offered up enough to work on in terms of both big shapes and small little elements and props. I started looking at random keywords to generate ideas: airplane cabins, castles, libraries, museums, offices, kitchens and any room that seemed both full of details but was also fairly contained.
Anyway, in this shotgun search I found some pictures of the Livraria Lello in Porto, Portugal.
That staircase popped up and obviously caught my eye. I investigated it a bit more. The more I looked at it the more complex it was; the more intricate details I kept seeing. It actually put me off the idea for several days. I kept looking for other things but the idea just wouldn’t go away. It was just such a cool space and everything else I looked at was not nearly as interesting to me.
So I went back to it. I was a little terrified of how much i was attempting (so much for smaller and contained) but decided to start building it anyways just to see how bad it might be.
I built a Pinterest board and started collecting as many images I could find. I wanted to try and get a sense of the space and figure out what I actually need to build. To understand the bones of the space I wound up doing a handful of construction pencil sketches on the side to try to establish the layout in my mind and to understand how things were arranged in space in relation to each other.
Once the ref was assembled there was nothing to do but build a quick block out version of the space to help me decide if I could actually use this location.
The goal was to simply match the reality of what I saw as best I could. I wasn’t trying to put any “post apocalyptic” spin on the space.
Blockout & Structure
Armed with the reference and Pinterest board I started looking at both the interior and exterior photos again to try to establish some kind of size and scale. At one point, I was online trying to find if there were any public records that would even describe the size of the lot or dimensions of the building. In the end I never found a single measurement that I could rely on. I had to eyeball everything and make some educated guesses about expected standards for retail counter tops and doors. I used the heights of human beings and other “known” objects to establish some metrics.
By extending this and just building up layers of these slightly informed guesses I was able to flesh out two stories worth of building: doors, height of each story, height of ceiling, width of overall store, heights of railings etc. I found photos where I could count the number of floorboards all the way across the floor and then made an assumptions that each board was say 4 or 5 inches wide and derived an overall width for the floor. I kept piecing things together in that fashion. I’m sure I got it wrong in a number of areas. It seems to hold together as a believable scale. (Towards the end of the project, I had posted a few pictures online and got a great bit of feedback from an actual patron of the store. He felt that it looked right and he thought that I’d captured the space pretty well. So my measurements are likely shaky but not too far off from reality.)
Once I had those measurements in hand it all boiled down to just building a bunch of boxes in Maya and seeing how it felt. I’d review these again and again against how it looked with any of the human ref were standing next to these objects. Did the hallways look wide enough? Were the railings tall enough? There was a lot of back and forth here. If a basic assumption changed (one that had informed the other assumptions), it was a lot of work to tweak, a house of cards of guesswork.
In the end, one of the most valuable things that I found buried amongst my ref was from a site that had gone to the bookstore and actually captured a bunch of 360 photos from six or seven locations. That bit of reference was a godsend. It really helped put a lot of the other ref in context. I had a lot of vacation photos, wildly varying lighting conditions, pics that were nearly but not quite framed on the detail I wanted to see etc. The project would’ve been a lot harder if I hadn’t been able to find these additional reference pictures.
It was also during this block out phase that I started to understand how I would actually build this place in a modular fashion. When I had first seen the photos I responded to the cool shapes and architectural detail scattered throughout. It wasn’t until I really *looked* at it with more patient eyes that I could start to peel back some of the visually dense layers and start seeing the kind repeating building blocks just underneath. Once I started seeing that, I was surprised at how modular the space already was. It was actually an excellent experiment to try and build a large space using a smaller number of repeatable parts.
In Maya, First (L) and Second (R) Floor WIP blockout.
It was all very low rez (primitive boxes) and so there was no nothing precious about it. I would rip things out, break them up, recombine them. This block out phase directly informed the breakdown between modular, hero and crazy ornate detail pieces I would need to build.
During this phase, I was also implicitly trying to do some visual editing. There was just so much detail with lots of little carvings and specific patterns all over the place. I would try to keep the visual density or business but I wanted to reuse as much as possible and build as little as possible.
Blueprints
As the modeling was in progress, I would start moving pieces between these three tiers. It would also help me define the kind of blueprints that I wanted to build in engine. To make set up that much simpler, I would start assembling these pieces into blueprints that would make the level layout that much more straightforward. For example, the upstairs and downstairs bookshelves were combinations of anywhere from 3 to 7 other little meshes.
In UE, The original bookshelf mesh, the additional pieces and the two BPs placed in the level.
The halogen lighting downstairs is another blueprint. It contains the cable, the light housing, and the light itself. On that one I exposed a couple parameters to allow free rotation of each light along with color, intensity, fall off and a matching bounce light. It is pretty basic stuff but it was still was wildly effective when it came to those subtle little things that let your eye relax to the point where it doesn’t see the repeating pattern and takes in the whole picture.
In UE, The halogen lighting rig. Each BP runs the length of four halogen lights.
QUICK MATS
In UE, a quick drop in test for the base wood material.
I was doing my texturing largely in Substance Painter. Photoshop was used every once in a while just to get some quick fixes finished. Most texturing was based off of the stock materials that Allegorithmic delivers. I modified them enough to suit my needs in terms of colors, scale, or how visible the wooden ring patterns were. I was putting together my own saved custom materials against a bunch of the materials that I saw in the photos. Once I got one that was looking good I quite frankly duplicated it and made a quick color tint so that it would look different enough that the difference would read and then saved it out. I wanted to get those base materials in there and playing against the lighting and as quickly as possible to see how the whole thing was sitting together.
As I mentioned I have worked around other computer graphics artists for a long time now and one of things that I’m used to doing in art reviews is the ability to A/B new versions of an asset. I tried to bring a very little bit of that process to this environment build. I set myself up with a bunch of saved camera positions that showed off the space and also covered the lighting conditions and different materials. It gave me a place to go back to to understand my current changes and whether I liked the direction they were going.
Modeling
The modeling workflow is pretty straightforward. I don’t have any grand insights to offer anyone here. I’m not a good enough modeler to have reinvented the wheel or come up with any new tips or tricks. My modeling process is fairly basic with a heavy dose of trial and error on some of the more flowy shapes (i.e. the central staircase). Basically I would take the lo-res shapes from the block out and treat that like the bounding box. I knew that I could model whatever I needed as long as it fit inside that shape. If there were specific connection points to maintain I made note of those as well. Most everything was done in Maya. Occasionally I would jump over to Modo for a few pieces as little experiments. The goal was to get a rough pass of everything in pretty quick.
My plan was to drop in early temp lighting as soon as possible. I wanted something that would be representative of the cubbyholes and negative spaces to get a read on how the whole thing was looking. Because of the size of the space it helped keep me from getting too wrapped up in details too early on in any one piece. (I wasn’t always successful here but some things are just fun to model and the time just slips away.) I swept through front to back and top to bottom looking at the whole thing and trying to get a sense of where there were bare spots. I was constantly discovering pieces that had no block out shape or could be recombined or split up differently. It was a very cyclical and organic process. Sometimes it felt like it would never end but it was just a lot of pretty fundamental basics to get all the shapes together.
The one thing that did continue to evolve as I was modeling was another key aspect of the class. The goal was to was to get you to understand what was a hero piece, what was a modular piece and what details or shapes could be captured in trim sheets. I was building trim sheets in parallel to see the detail that the technique captures. It was really interesting to see the levels of high-frequency visual detail and decorative carvings show up really well when I got it in engine. I was pretty excited by the results.
This was my first exposure to proper trim sheets. I did not understand just how far you could push them. The class and the information Clinton shared was a real eye opener for me. I started allocating space in a sheet for various patterns I wanted to capture. They were all modeled in Maya. The bakes happened in substance. In the end I cut the sheet in half which is what made it into the engine. The removed elements were promoted to their own assets with a different texturing solution. I’m sure I didn’t take enough advantage of the technique in this build; they were still so new to me. I’ll need to go back with fresh eyes to see where else I can put them to best use.
Photoshop planning for trim sheet and the WIP tiling geo in Maya.
In UE, flat plane testing with trim sheet texture applied.
BOOKS
The books are a huge influence on the sense of the space. It was a shift in the blockout phase to get those things in there even as simple white boxes; they take up a lot of screen space.
There’s actually just one book. It’s a very basic model with two materials on it. One for the “cover” the other for the “pages”. It may sound weird but I actually didn’t want to call specific attention to them. They are everywhere but they aren’t the point, if that makes sense. I don’t want a viewer to notice “a” book but rather “books”; they should just think “that’s a ton of books” then their eye should let go of it and take in the store as a whole.
In UE, Single book. Then three BP groups of books.
I only ever modeled the one and then set up a number of blueprints with books of varying configurations. I made a variety of stacks of books and then a couple leaning to left and right. Each book in a group had some built in scale, position and rotational offset to make them look a bit more “messy” and realistic. (“You’re right. No human being would stack books like this.”) These small arrangements were used to build up the bookcase patterns. The bookcase patterns themselves were then repeated throughout. I was trying to reuse as much as possible. As long as my eyes couldn’t “feel” the stamped repeating pattern then it was fine.
For all the colors, I built a basic material with two color ramps based on the world space position of the individual book. Each ramp was multiplied together to get a color and variation for each book. Some additional params were set up for saturation and brightness. As you move whole stack, front to back of the store and then up and down the shelves, they would all change their color and value. All that visual detail and color variation is for “free”.
Staircase
The staircase is definitely impressive as you look at the photos and it’s the centerpiece of the building in my opinion. When I was first looking at whether I would even do this space, a lot of it hinged on whether I thought I could actually build that staircase.
It was the first thing I tried blocking out. In the end I think I blocked it in and rebuilt it possibly four or five times just to try to understand the form, then how I would break it down based on construction methodology, reusability, UVs etc. I started with some basic circles and top down views to establish some nice elegant curves. The side elevations were a bit more constrained in that I had my overall building proportions and a set number of stairs with which to work.
I experimented a lot with how to build the pieces and where to break them. My first version of it was just a box that I modeled out and then threw some quick subdivision and smoothing on. It looks like a ramp out of a sci-fi movie but it gave me a placeholder. It also gave me some poly curves that I could then extract and extrude along or loft and that’s what started me on the process towards building up the pieces. I extruded profiles along that curve. Slowly I’ve got railings, now I’ve got that decorative wrap and so on. I just went through a series of experiments again and again. These experiments would change as the pieces and their cut points changed. Later I would build different pieces “straight” then bend them to match the curves. It was the a mix of both construction and grouping tests. It was very challenging for me.
A rough dev timeline for the staircase from L to R.
On the left, a few of the measuring tools (stair heights, important join/split points along the stairs, radius reminders) and shape guides I used to figure out how this would all fit together. On the R, a temp section of modular railing.
One of the testing scenes. A mix of curve, bend and wire tests to see how to achieve the shapes for the railings, banisters etc.
I wound up taking what had been the full staircase and carving it up into three main sections (the top stairs coming down to that “V” landing, the circular pattern in the middle, and then last row of stairs hitting the ground floor). Each of those sections is made up of multiple pieces of the stairs themselves: railings, posts, trim detail, stairs, decorative baseboards.
In UE, Individual pieces exploded (L) and assembled (R).
Photobashed ref of the real stairs (you can see my note on certain stairs where I started to consider splitting things).
In UE, WIP red stair textures trying to match the wear and scuffing.
The stained-glass ceiling is a total cheat. It is just one big flat card with a texture. All the ceiling and molding around it is geometry that I’ve built.
Retouched/Patched stained glass window image
I found photos of the stained-glass window so I grabbed the best one I could get and went into Photoshop. I did some editing there to build what I needed and then just dealt with it all in the shader. I turned it into a translucent material so that all my exterior lighting would shine through that space. It was another big element to get looking right. The stained-glass and the central staircase really serve as the central focal point for this space.
In UE, early stained glass lighting test.
In UE, early lighting test.
The first tests when I saw some actual colored light coming through that thing were pretty exciting to see. It was a straightforward set up I grabbed out of the UE4 documentation for putting the shader together. The rest of it was iteration on the lighting and integrating it with the rest of the environment. I knew i wanted the stained glass window itself to be bright and back lit; I knew I needed it to flood the surrounding vertical ceiling pieces with light and then have a nice falloff across the horizontal ceiling as you moved into shadow. That all boiled down to repeated bakes and massaging of numbers till it looked “right”.
I knew for me that the lighting was going to be a challenge. I had the glass windows on one side of the building, the big skylight up above with the stained-glass window, all the localized halogens downstairs, the bookcase lights upstairs etc. It was a lot for me to balance with all the various subtleties from these sources.
Once I had the block in meshes together I started running several lighting “wedges” for my own edification. Since I’d not tried building a space like this before I wanted to make sure that I understood what to expect visually when I was operating at different lighting quality bakes. I wanted to understand when I saw a certain kind of artifact or result that I was familiar with what would go away at a higher quality bake versus what might be an actual bug or issues to track down. It felt like a good use of time to take a couple days up front and run these tests.
A ref comp of my lighting test frames. the “direct” and “indirect” were my named light sets.
I ran individual wedges of each of those lighting passes at several different bake qualities. This let me get familiar with what shows up from what light “set” at each level. I also got in the habit of screen capturing all 10 saved camera positions in a variety of view settings (lighting, detail lighting, lit) after most bakes. This gave me a pretty good living record of what was happening and helped get my eye used to “reading” the scene. My goal was to use these images as touch points so that every time I improve a model, changed lighting, updated a texture I would have something to A/B against. Is my change better or worse? Did I fix something upstairs only to break something downstairs? When the heck did that lamp turn purple? It served as a way for me to sanity check myself while working.
As I would do better and better bakes later in the process it was always nice to have that growing ref to go back to. You could really picked out the evolution of any one particular camera position and understand what elements were working or what you may have lost and wanted to bring back.
As the bakes progressed I also cheated in bounce and fill lights as necessary. It became easier to add additional lights and tweak their color and intensity to achieve the effect I wanted as opposed to continually poking at lightmass settings.
I was very happy with the match I got upstairs. When I saw this comparison, I felt pretty relieved that I was on the right track. This happened on my way to trying to finalize the lighting. The color variations were forgivable and a lot easier to tweak and tune later. But I was pretty happy with the overall feel of the light from screen R. There is still plenty to tweak and adjust (other lights to activate screen L) but this moment was a big confidence booster. I still couldn’t tell you if I built it all “well” or as efficiently or as intelligently as possible but that will come with time and experience I suppose.
Photo ref against UE viewport
The idea of a one stop shop lighting scenario that works for the whole space is still something that is elusive to me. I don’t think I was able to successfully balance the darkest parts of the first floor to get them to work with the brightest parts of the second. The lower floor still looks wrong to me, muddy and ‘off’ somehow. Perhaps I’ll make a second lighting scenario and let one “sell” the top floor while the other supports the lower floor.
Post-processing we kept to a minimum till the very end. I worked with the eye adaptation turned off and locked in at a neutral exposure.
Conclusion
Overall, the class ran for 10 weeks. If you carve off the first week as the reference gathering and deciding what you’re going to build and carve off the last week for making last-minute lighting tweaks and final bakes you have about eight solid weeks for production (blockout, model, UV, texture, light, post process, cameras etc). It is a fair bit of time if used wisely but it can sneak by you in a heartbeat if you aren’t careful. Figuring out some sort of schedule, milestones or pacing markers for yourself is critical (and that is not *just* the producer in me speaking).
You have to do what you can to make sure it is something you are engaged and interested in. You may not be able to do that everyday at work but this is your project so do something that really inspires you because there is a lot of (really fun) work ahead. For all the times when I was slowed or stuck trying to figure out some problem, I was happy to be doing it since I happened to pick this fun place to build.
What I took away from the class wasn’t about specific modeling and texturing techniques, though those are covered in the forums and in the feedback sessions if you need them. The critical takeaway for me was more about ways to think about how to treat different elements in the scene: the categorization of hero, modular, trim etc. That was something that I didn’t have in my mental toolkit beforehand. The ability to be in the middle of building an object, change my mind as to its importance or on how I’m going to build it, and have a roadmap in mind of how to execute that new plan is a big confidence booster for me. It definitely helps me understand how the more seasoned professionals can look at concept art or ref and come up with a plan of attack on on how to build things efficiently in putting these beautiful scenes together.
As for quality, I just wanted everything to look consistent. I can think of a few things that may have helped me keep the quality bar consistent while working relatively quickly and across all the assets. I think the tools that I used helped dramatically. As I mentioned my modeling was pretty straightforward in Maya and I used Substance for 99% of the textures. Changes made later could be quickly pushed to assets or texture sheets when I was ready for that. I also think the consistent review cameras helped me keep my head above water when all the pieces were in flight.
Overall, the enviro still needs work to bring it to truly “final” but the class was finished. I’d bitten off a bit too much to get done in the alloted time but I’m happy with how far I was able to push it. The remaining polish will happen on my own time. Overall, the class was a great experience and a ton of fun.
Thanks for reading!