top of page

VFX SenioR thesis

VFX_448/update_04

January 13th, 2025

Texturing Continued

Over the past day or so I've had the opportunity to begin texturing the terrain further within Houdini. I've been working on creating additional masks the ones already provided. The current progress on the first environment is below.

Screenshot 2026-01-13 135259_edited.jpg

Using KTT, I'm applying 4 different textures to the terrain using custom masks. I then use a fluvial advection node to simulate the "erosion" of the textures as they might flow down a mountain.

Screenshot 2026-01-13 135835.jpg

The resolution of this terrain is quite large, coming in at a massive 67 million voxels.

Screenshot 2026-01-13 140606.jpg

In terms of the snowy terrain for the third shot, it's a little more of the same but not NEARLY as complicated. I did end up adjusting the terrain to add more rockiness to certain areas. This makes the snow-cover a bit more accurate to real life reference.

Screenshot 2026-01-13 125153.jpg

The extra detail is obtained by using a "terrace" node to add micro noise into the terrain which is then eroded away. 

Screenshot 2026-01-13 142336.jpg

The extra detail is obtained by using a "terrace" node to add micro noise into the terrain which is then eroded away. 

Screenshot 2026-01-13 142520.jpg

With Terracing

Screenshot 2026-01-13 142611.jpg

Without Terracing

VFX_448/update_03

January 11th, 2025

Terrain Creation in Houdini Continued

Over the weekend I went ahead and created the third environment for the short. One of the things I learned while creating these terrains is that keeping the node count low conserves memory and helps keep things responsive. The node setup and terrain result are below. 

Screenshot 2026-01-11 230355.jpg
Screenshot 2026-01-11 230842.jpg

This terrain required a special method to get the result that I wanted. The mountain on the right required a different erosion method than I wanted, and I had to split the tree and use a KTT combine node to merge the heightfields back together.

Screenshot 2026-01-11 231401.jpg

Starting to Texture

One of the the parts I've been dreading is texturing the terrain. I enjoy texturing large landscapes, but I haven't really found a great workflow just yet. The first thing I tried doing was exporting some masks into Blender. Unfortunately, though, this lacked the granular control of what Houdini's heightfield system offers.

Screenshot 2026-01-11 231833.jpg

Additionally, the node networks in Blender can get messy fast when working with masks.

Screenshot 2026-01-11 232025.jpg

What you see above is not what I wanted. The overall workflow is tough to work with and I don't think it's great at providing good results. Fortunately, KTT has a solution. Below just two textures are applied, and the results are already leagues above what I had in Blender.

Screenshot 2026-01-11 232520.jpg

There isn't any grass just yet but I'm slowly figuring out the workflow. The node setup for the result above is below.

Screenshot 2026-01-11 232716.jpg

VFX_448/update_02

January 6th, 2025

Terrain Creation in Houdini

Instead of using Gaea, I decided to use Houdini's heightfields to create the terrains. I'm using a custom toolset called KTT (Kruger Terrain Tools) created by Samuel Krug. These tools not only streamline terrain creation, but they also build upon the tools that Houdini provides.

Screenshot 2025-09-03 205251.png

Image courtesy of Samuel Krug.

The node setup for and the landscape for the first scene is what's shown below. Kruger's tools sped up the process significantly, allowing me to art direct the look of my mountain range with ease.

Screenshot 2026-01-06 152827.jpg
Screenshot 2026-01-06 152743.jpg

I'm not quite done with the terrain yet, but I'd say it's mostly there. Bringing the heightfield into Blender is quite simple. I'm using an exported EXR map of the heightfield to displace a plane using a displacement modifier. 

Screenshot 2026-01-06 153540.jpg
Screenshot 2026-01-06 153552.jpg

Ray Portals

The first transition is quite difficult as I essentially have the camera "dive" into a painting. This is a pretty big challenge in itself, especially if I want to composite the effect. Fortunately, Blender offers a way around this issue: the ray portal BSDF.

The ray portal node allows you to project different parts of a scene onto geometry, literally like a "portal"!

To make this work, a direction (think of rotation on a 2D plane) and position are needed. The position determines offset from the portal surfaces location in 3D space so that it can project a different part of the scene. Below I'm using a driver connected to a camera's XYZ location.

Screenshot 2026-01-06 163101.jpg

The direction of the portal is determined with a similar method, although to line it up with the center of the painting, we need to move the UV coordinated by 0.5. The Z coordinate's value can be changed to adjust the "FOV" of the portal.

Screenshot 2026-01-06 163226.jpg

VFX_448/update_01

January 4th, 2025

Reworking my Pipeline

With the animatic completed in my VFX 408 course, I had some time to think about my pipeline for the short film. Originally, I intended on using primarily Houdini and Solaris. This turned out to be a bad idea, though, for a few reasons.

​

The biggest would be purely TIME. Solaris is not like traditional rendering pipelines and contains arbitrary rules and limitations that make production for solo artists difficult. For this reason, I decided to set up my first shot in Blender and compare the two. Below is what I rendered out in Blender.

When setting up the scene in Blender, material creation and texture assignment took about 10 minutes. This, in Houdini, took about 1 hour. Lighting setups are also a lot easier as well. I've provided a split-screen comparison between Blender (Cycles) and Houdini (Karma) below.

Blender

Houdini

Another big reason for switching to Blender was render time. On the SCAD renderfarm, Blender's Cycles renders in about 12 minutes per frame (on the current scene). On my home machine, it's 5 minutes.

Screenshot 2026-01-04 213712.jpg

One of Houdini Karma's biggest flaws as that it is not purely a GPU renderer, even on XPU. This means that while XPU feels snappier, Houdini has to enlist the CPU as well. My times almost match the renderfarm times, making at home rendering exponentially harder if the farm is busy.

There is still one more reason for switching and it has something to do with how Vulkan is handled by Houdini 21.0.440. When you have a lot of texture maps in a scene and switch to Vulkan, you will often get a fatal error and Houdini will crash, like on the right.

Screenshot 2026-01-04 214616.jpg

My best guess as to why this is happening is that Houdini is loading too many textures into memory at once and it causes a crash. This crash can be averted by disabling all material, switching to Vulkan, and then turning each material back on 1 by 1.

 

Unfortunately, I don't find Karma to be a good, production ready fit for my animation. I would love to use, but as a solo artist it feels needlessly cumbersome.

November 9th, 2025

VFX_408/update_13

Shot 1 Test Render

For the last weekend of the quarter, I spent my time on texturing and lighting the museum environment so that it could be ready for render. After a lot of back and forth with substance, I finally settled on this for the final look. This is the raw render with no compositing just yet.

Lighting the Environment

Lighting in Houdini is a bit challenging compared to programs like Maya and Blender, especially when it comes to instancing those lights. For this project I wanted to use light instancing to get the spotlights on each painting in the back. For this, I used a USD Configure Prims from Points node.

Screenshot 2025-11-09 185206.jpg

This allows me to instance primitives (or lights) on points. I'm bringing in some points from the SOP level into stage so I can use them as points to instance on.

Screenshot 2025-11-09 185539.jpg
Screenshot 2025-11-09 185638.jpg

Additionally, I'm using an HDRI and an area light directed on the display wall to brighten up the foreground. There is a hidden shadow catcher in the image below preventing HDRI's light from leaking through the opening.

Texturing the Environment

One of the best ways to achieve realism in 3D is by following a PBR workflow. Because I'm going for such a realistic look with this short, I didn't think procedural textures would be the fastest and best way to achieve realism. Therefore, I decided that I would use Substance Painter and Quixel Bridge for my surface work.

Screenshot 2025-11-09 190941.jpg

Fun fact about the artwork of the background paintings: they're filtered versions of my work from the past year at SCAD!

I then applied a canvas weave material on top of the original stylized artwork. I think it's a bit overkill for the distance that the paintings are viewed at, but the lighting does bounce off them nicely.

Screenshot 2025-11-09 191149.jpg

November 2nd, 2025

VFX_408/update_12

Moving to Houdini

I'm finally onto integrating the first environment into Houdini and prepping it for rendering. The first step, however, was readying the environment's UVs for texturing. I used Blender for this as it's a bit more straightforward than Houdini's UV toolset.

Screenshot 2025-11-02 210522.jpg

Next, I brought in the camera and environment as two separate alembic files. I then split each alembic down into 6 separate SOP networks for easy texture assignment and organization.

Screenshot 2025-11-02 210344.jpg

Each network looked somewhat like this, breaking down each of the models' individual sections for material assignment.

Screenshot 2025-11-02 210801.jpg
Screenshot 2025-11-02 211006.jpg

Afterwards I brought every mesh into Solaris with a relatively simplistic setup (left). I also went and created all of the necessary materials (bottom).

Screenshot 2025-11-02 211052.jpg

The next steps are creating the material and lighting setups and doing a test render for a transition composite.

October 26th, 2025

VFX_408/update_11

Modeling the Museum

I spent the past couple of weeks working on the basic museum environmentand compositing it with the layout of the first environment.

When I'm making an environment, it's important to me that I'm building the environment to scale. Not only does it help when it comes to tasks like scattering, but it also plays a massive part in lighting and FX. That's why, when modeling the museum, I used a human armature model to make sure the scale was correct.

Screenshot 2025-10-26 220838.jpg
museum_ref.jpg

My museum environment is based off of a real location, that being the Portland Art Museum. I really liked the minimalist, yet tasteful interior. 

The environment is completely modeled around what the camera sees, as there aren't any reflections to be seen. 

Screenshot 2025-10-26 221624.jpg

Additionally, I modeled some tracked lighting and placed temporary placeholder spotlights where other lights will go once in Houdini.

Screenshot 2025-10-26 221732.jpg

Nuke Test

Once I was done modeling, I quickly playblasted the new museum scene and the previous animatic environment. Since they're 2 separate scene files and will be handled the same way later in production, I wanted to see if I could devise a quick method for iteration. Below is what I came up with and what I've submitted for the class 15 checkpoint.

Below is the Nuke script. It's simple for the moment, but I plan to make it a bit more complicated as I move forward and begin working with render passes.

Screenshot 2025-10-26 222638.jpg

I tried a few methods, but I determined the best looking transition to be retaining parallax from frame 1 instead of doing a frame-hold until the camera gets close. This reduces the snappiness of the transition but it does break the illusion. I'll likely change this further down the line, but it's okay for now.

October 7th, 2025

VFX_408/update_10

Final Animatic

After some final tweaks to shot 3 and an actual ending, I've completed the entirety of the animatic. The final edit is below.

October 5th, 2025

VFX_408/update_09

Retiming the Animatic Cont.

I've further implemented the retiming changes all the way to shot 3. This has required some rethinking on the secondary transition, as I want time to conclude the animatic. By the end of the second shot only 20 seconds remain in the song. This resulted in having to shorten it down quite a bit.

September 30th, 2025

VFX_408/update_08

Retiming the Animatic

I spend the past couple of days figuring out how I'm going to retime the animatic to fit my chosen soundtrack from the last update. So far I've made it halfway through.

September 28st, 2025

VFX_408/update_07

Finding a Soundtrack

This weekend consisted of searching the web for a royalty free soundtrack that I could use in my animatic. The theme I am aiming for is an adventurous, grandiose track. I've placed the track that I think fits best with the animation along with a backup track below.

​

This is the track that I believe fits best. I am now realizing, though, that I will need to redo timings on the entire animatic in order to fit the soundtrack. That will be this week's task.

Tranquil's Bliss 3August Wilhelmsson
00:00 / 02:13

Additionally, I have an extra soundtrack that could potentially work better on timing.

Maiden VoyageHelmut Schenker
00:00 / 02:36

September 21st, 2025

VFX_408/update_06

Finishing Touches

I spent the weekend making some touch-ups to the pacing of the animatic as well as redoing all of the shots to create more variety.

​

On top of this, I also finalized a rough look for the first environment after reducing its complexity.

Screenshot 2025-09-21 155918.jpg

Instead of a sprawling mountainscape with a town, I decided to go for a secluded valley approach with a few smaller structures. This also allows me to focus more on the scale of the environment rather than the complex little details.

Screenshot 2025-09-21 160038.jpg

Animatic Version 2

Here's the final animatic with all of the adjustments I've been making over the past couple of weeks. I also included the timecode and shot number so I can adjust the pacing later.

September 16th, 2025

VFX_408/update_05

Redoing the Second Transition

After working on the first transition, I realized the second transition from shot 2 to shot 3 also needed some work. I spent today remaking the transition.

​

Considering the cold environment the camera is traversing into, I decided that traveling through a freezer would be a fitting transition. 

Further on I plan to include snow and steam in the fridge to show how cold it is.

September 14th, 2025

VFX_408/update_04

Diminishing the Scope

After talking with Professor Pasquale and a few of my friends I realized that the first shot of the animation was exceptionally ambitious for what I wanted to do. Instead of a valley with a whole town, I'm going to focus on the details of the environment from a closer perspective.

​

I spend this weekend working on the initial layout for the new environment along with some essential elements for the transition.

Screenshot 2025-09-14 170702.jpg

The environment is missing some generic tree and shrubbery layout as well as a river to complete the layout, but that's the next step.

Redoing the Transition

The more important task to complete this weekend was figuring out a creative and unique transition from shot 1 to shot 2. I decided to go with a transition where the camera goes through a house filled with water. I'm looking to further tweak it so that when exiting the house, the camera is under the lake in shot 2.

I was also tasked with deciding if I wanted to have the short be seamless with no cuts (ex. a drone flight) or to have cuts. I'm going to go with the latter as it allows me to curate the environment more for specific angles and focus on detail more easily. 

September 7th, 2025

VFX_408/update_03

Final Rough Animatic

I've spent the last few days of summer blocking out and polishing the final animatic. Each shot is split into its own scene so that I could keep things organized. However, this did introduce some timing problems between cuts. The camera stops moving between shots which wasn't my original intention. That will be polished later on when I begin working on the first scene.

 

As for the final animatic, you can view it below!

​

September 3rd, 2025

VFX_408/update_02

Animatic Progress

To begin preparing for this exceptionally long project, I started with creating an animatic showcasing all of the basic layout and camera movements to get the idea across. This also helps with pacing for the short. 

​

The layout of the environment is quite simple, consisting of a few duplicated premade mountain assets and a sculpted terrain to match the previs reference. 

Screenshot 2025-09-03 125228.jpg

The finished first of three parts of the animatic can be seen below.

VFX_408/update_01

August16th, 2025

Concept

For my senior project at SCAD, I want to create 3 massive environments and interconnect them through a series of paintings in a gallery. Essentially, the camera will be "diving" into each of the painting, showing a vast 3D environment that the viewer will navigate. It's like the viewer will be on a drone with infinite battery and range!

​

The main inspiration for the idea comes from the Coca-Cola Masterpiece ad, shown below:

I want to go for natural environments mixed in with some human elements. I appreciate the chaos and beauty of nature and I would like to express it in this short.

​

 

 

To get started, I've created a mood board of sorts for early conceptualization of the environments I'll be creating. I used PureRef to create the mood board.

Mood Board

Screenshot 2025-08-16 141752.jpg
Screenshot 2025-08-16 141925.jpg
Screenshot 2025-08-16 141937.jpg
Screenshot 2025-08-16 141950.jpg
Screenshot 2025-08-16 142007.jpg
Screenshot 2025-08-16 142023.jpg
Screenshot 2025-08-16 142039.jpg

© 2026 by Riley Strumpf.

bottom of page