top of page

Architectural Visualization

Wrocław Water Tower

Claudia Austin, Emmalie Hall, Kekoa Hopkins, James Lim, Kyle Rively

Planning

My team decided to recreate the Wrocław Water Tower in Poland because it is a very interesting design and presents many unique challenges for problem solving. This building was designed by Karl Klimm and built in 1903-1904, standing at 63 meters tall. It supplied water to the residents and provided housing for employees. From the start, the watch tower was used for sightseeing, and was thus equipped with an electric lift to take visitors to the top. A red flag is still hung outside to indicate particularly good viewing. During the second world war, the tower was used as a military observation point, and it sustained some damage. In the 1995, a restoration project was put in motion to bring the building back to its former glory. When splitting the work up between us, it was difficult to identify exactly where each piece began and ended. In the end, we split it five ways, with the base house given to Kyle, the pillars given to James, the octagonal roof given to Kekoa, the spires given to Claudia, and the watch tower given to me. To make up for not having to surface anything, Kekoa also modeled the pieces that sit inside of the pillar area. Kyle took on surfacing for Kekoa's primary models, and I took on surfacing the inside decorations. Besides this, each member surfaced their own models. I lit the scene and worked with Claudia on rendering out our frames. I finished out the project with some compositing work, and I'm quite satisfied with the end product.

Watch Tower Modeling

Using Kyle's white box as a direct reference, I got to work on modeling the watch tower. To create the spire at the top of my tower, i started with a cylinder and brought the number of subdivisions in the axis down to eight to create an octagonal prism. By extruding the top faces upward and shrinking them down, I was able to get the general shape of the spire. I then created two higher-poly cylinders for the bottom of the tower, stretching one to become an ellipse. I sewed the two pieces together, deleting any faces that would not be seen by the camera to keep topology clean. The largest challenge was getting the octagonal and cylindrical pieces to transition cleanly and naturally, so I had to subdivide the spire mesh a couple times and do some soft selections to accomplish this. Once the shape of the whole tower had been refined to a proper level, I booleaned out windows and insets, ensuring they were all contained within edge loops so as to contain any topological mess. Finally, I made appropriate extrusions on the spire, base, and underneath windows to create the proper level of detail. The house was made with a simple cube that I added an edge loop in the center to in order to create the roof. I booleaned out insets and windows where needed and then extruded pieces for proper detailing. The frames were made with simple cubes that I extruded, and the roof of the middle area was given a similar treatment. The chimney was also just a simple cube I made some insets and extrusions for. At the end, I beveled everything so there were no sharp edges and combined meshes, deleted history, froze transformations, and centered pivots on everything. UV unwrapping was an arduous task because of the booleans, but there were areas where I could leave it to tri-planar projections within substance painter.

Screen%20Shot%202020-11-23%20at%2011.55_edited.jpg

Procedural Brick

A majority of the pieces of our tower are made of brick, so I decided to create a procedural brick pattern within substance designer for every team member to use. Thankfully, I have had a base substance to work from for some time now. Using my tile generator, I changed the ratio of the brick pattern and luminosity randomness. Taking into account the fact that these textures would be seen from so far away, I did not utilize a height map, relying firmly on normals for bump patterns. I decided to also remove a color randomizer that was overlaid in the substance because it would become extremely apparent that the pattern was repeating, so I left this randomization up to whoever was surfacing in substance painter. All I had to do after this was edit the color map to match our purposes better and publish the .sbsar for my teammates' use.

textures.png

Surfacing

Inside substance painter, I made full use of my procedural bricks by importing it as a base material, changing the uv projection to tri-planar, and messing with the scale until each object's size was consistent and continuous. To randomize the colors, I overlaid a cement base, messed with hue saturation and luminosity, and added a smart mask so as to avoid the cement overtaking the brick. Simple glass mirrors were added to all windows because we were not interested in looking into the buildings, so we felt it was enough to reflect the environment. For the spire of the tower, I created another designer texture, this time for shingles. it's largely the same method used for the brick, only I had to plug in a special shape for the tile generator to use, and my color map was much more simplistic. Since this is so far away from the camera, I decided to make sure the height deformations weren't too pronounced. For the mid-roof, I was able to used Kyle's own shingle texture and had to make sure scaling was consistent between our pieces. Finally, once I had connected my textures inside the scene, I added renderman materials to any metals (gold balls, metal frames) and Kekoa's wooden and fabric decorations. In order to make sure all surfacing was utilized in a consistent way, I connected textures for Kyle and James. This took a good long while, but it allowed me to rest in the fact that I knew our hypershader was as clean as possible, only using what it needed to, and doing it exactly the same way every time. Thankfully, our textures were able to read quite clearly without any displacement maps, which also helped us cut down on render time.

Camera Movement

With our structure being so tall, I decided we should go with a vertical motif. As much as we could make landscape framing compositionally and visually interesting, it would make all of our textures and models too small to appreciate. Going with a 4:5 aspect ratio, I decided to take a worm's eye view so we could see the structure from a human perspective. I wished for the movement to be subtle, so I did a simple pan and rotation. I played with zooming in on the structure as well, but I found that the amount of motion became too much to handle for merely 5 seconds of screen time. A simple ease in, ease out was used to make the movement natural.

Lighting

Being an outdoors scene, I decided to take a more minimalistic approach to the lighting. Starting off, I found a high quality HDRI of a field during sunrise, brought the exposure up to .5 and the intensity down to .5, and changed the color of the light to a dull periwinkle so that the HDRI on its own would not create enough light for the scene. I then added a distant light, tinted it a rich yellow-orange, and messed with the angle, intensity, and exposure until I reached the desired sunlight angle. Finally, I added a soft, pink rectangle light to create a pseudo-three-point lighting system. To lower the intensity of the light on the base house and match the angle of the distant light, I had to rotate the HDRI in the y and z directions, making the ground plane technically tilted. Sometimes you have to break physics to create the illusion of physically accurate lighting.

Screen Shot 2020-11-23 at 2.16.14 PM.png

File Maintenance

In order to ready our scene for rendering on the pipeline, I had to consistently keep up with our google drive layout. Showing all non-DAG shapes, I deleted extra lamberts, render nodes, and other unnecessary pieces that serve to do nothing but add to render time and corrupt textures. I cleaned up our outliner to be more intuitive to anyone opening it up, combining meshes where appropriate and grouping/parenting meshes to related pieces. I also deleted all unused pxrsurface and texture nodes that may have been created throughout the connection process so the scene would not be calculating unnecessary nodes. To avoid having to reconnect textures, I opened the ascii file in a text editor and removed all unnecessary portions of the path for the files. This allowed me to simply add my file to the group pipeline we created and set the project to an appropriate folder. Parsing the scene, we could see that all the textures were intact. This saved us a ton of time and allowed us to avoid the trouble of repeatedly going up to the studio just to make sure our renders would go through.

Rendering

Claudia and I worked on Friday afternoon to get all of our frames through the render farm. Beforehand, I put together all of our render settings, setting the frame range to 1-150, identifying our renderable camera, setting the aspect ratio to 1536x1920 and resolution to 300. Our max samples were set to 128 with an increment of .015. We didn't need any fancy AOV passes because we have no environment to worry about, but I turned on cross-frame denoising, and I set our file path outputs to the proper directory prescribed by the pipeline. After a touch of troubleshooting, we were able to send off our renders without a hitch, and they went through pretty quickly because there were, surprisingly, not very many people on the farm at that point. It also turns out that the pipeline maintenance crew fixed render layers because I was able to just add the material override to our geometries and send them off no problem to get Ambient Occlusion frames. We had to send them off a few times because I forgot to switch the occluded and unoccluded colors, but by the end of the afternoon, we had all 300 frames ready to go for compositing over the weekend.

Screen Shot 2020-11-23 at 1.14.46 PM.png

Compositing

I used after effects for all of my compositing. First, I brought in both of my .exr sequences and layered the Ambient Occlusion layer on top of the normal layer, changing the blend mode to multiply so that shadows were deepened. I did some level correction on the ambient occlusion so it wouldn't darken them quite as much, and shifted some color balancing for the normal frame layer to make it seem a touch warmer. I also had to do some individual frame cleanup because we had a minuscule geometry glitch, so I was spending a good amount of time in photoshop brushing over the glitch. After effects would allow me to create an animated mask to cover it up, but I found it was not worth it over hand painting them because I would have to make sure every key was framed properly anyway. I found a high resolution blue gradient photograph of the sky on google images and used it as the background for test compositing. Later on, I added a gaussian blur to it to get rid of any low-resolution artifacts. To create the clouds, I downloaded a free use, transparent png of a simple cloud and added a turbulent displace effect to it, coding the evolution to shift slowly over time, and procedurally determine the exact shape of the cloud. I made 33 iterations, half using a hard light blending mode, the other half using a soft light blending mode. Once all the pieces were in place, I keyed the position, scaling, and rotation over time so it created the illusion of parallax scrolling. Once I was satisfied with the look of it all, I created a pre-comp with the background, duplicated the blue gradient, and changed the color balance and levels. I added a mask to the cloud layer so these darker edges could show through, and the clouds would be contained. After all these adjustments, I was quite satisfied with the product my team has made, and adding this piece of work to my portfolio is an honor. Enjoy!

Architectural Visualization: Featured Work

Finished Product

Architectural Visualization: Video
Architectural Visualization: Video
bottom of page