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.

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.

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

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.

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

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

With Terracing

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.


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.

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.

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

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.

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

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.

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.


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.


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.

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.

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.

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.

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.

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.


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.

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.

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.

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.

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


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

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.


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.

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

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.

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.
Additionally, I have an extra soundtrack that could potentially work better on timing.
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.

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.

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.

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.

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











