Nabil Jabour and Antoine Jaspar walked us through the solar eclipse study inspired by Denis Villeneuve's Dune: Part Two, detailing MaterialX shader setup in Houdini and comp workflow in Nuke.
Introduction
Hey everyone! We are Antoine Jaspar and Nabil Jabour, VFX Artists & Technical Directors from Belgium. We both have around 5 years of professional experience in the VFX industry and we try as much as possible to develop our skills through visual studies. This is one of those studies!
Nabil will cover the first part, walking through his MaterialX shader setup in Houdini and explaining how he did the solar flares, and Antoine will then break down his comp workflow in Nuke.
Inspiration
Nabil: On April 8th, 2024, everyone on the Internet was talking about the solar eclipse that happened in the U.S. It looked amazing and very captivating. I started to learn more about this phenomenon and also tried to replicate it in Houdini. Turns out, my computer couldn't handle that much volume data in my viewport, so I had to try another technique that would not melt my CPU. That's when I found this video from Samuel Krug.
This amazing artist recreated some nice solar flares generating volume noises at render time, which was mind-opening to me. But this was done in Blender. My goal was to figure out how to do that in Houdini, preferably rendering it with Karma, using MaterialX shaders.
Antoine: I was truly impressed with the overall look of Dune: Part Two, and as soon as I saw the "eclipse shot", I was eager to try my hand at achieving similar results in compositing. When Nabil mentioned he was working on something similar, I was thrilled to collaborate and see how I could enhance it with my own expertise. I was also confident it would be a valuable exercise in understanding how to build that kind of shots.
Goals:
- Speed. The setup had to be fast and not crash my scene. This was crucial for our iterative workflow.
- Look. We wanted to achieve the Dune: Part Two mood.
Making the Solar Flares Shader
Base Setup
In this setup, everything happens in Solaris, so we're not stepping a foot in any other context of Houdini. What we want, is just to add spheres (sun and moon), and a camera that is placed correctly. The scale of our scene doesn't really matter.
Solar Flares MaterialX Shader
Note: KarmaXPU doesn't seem to support this type of shader yet.
On top of our two geometries, which are the moon and the sun, we need a third one which will be our solar flares. We'll make this one using a ReferenceLOP, referencing the sun geo.
We also want this new primitive to behave like a volume when being rendered. After the ReferenceLOP node, drop a Render Geometry Settings LOP node, go to the Uniform Volume section, and check the Uniform Volume option.
Awesome! Now we have our volumetric Solar Flares under /FX/Solar_Flares! Our Scene Graph should look like that:
The foundations of this effect are now all set, we can go and build the Solar_Flares shader!
Understanding MTLX Volume Shaders
After assigning very simple shaders (using the Karma Material Builder) to our sun and our moon geometries, this is what we see through our camera in the Karma render.
Now, let's assign a Karma Material to our /FX/Solar_Flares. Make sure that the color is set to black and that the specular is off. Slightly increase the displacement and the emission.
This is what we see! Weird huh? This is simply the sun geo extruded and turned into a uniform volume.
The idea of my workflow is that we can turn this boring uniform volume into a very complex-looking volume, just by applying some noises into the Opacity and Emission values. Yes, it's just that! It looks like the opacity parameter acts as a density multiplier. The hardest part is to find the perfect values.
IMPORTANT: From now on, you should do all your tests with good render settings. I go as high as 250 Pixel Samples, 0.001 Noise Level, 12 of Screendoor Samples, 1 of Volume Step Rate, and 8 of Volume Limit.
I have no clue why I had to go this high, but know that it still renders very fast and it will give you the best results. Going for the default values will make everything so noisy it's unreadable.
ARCS – Intro
Here's what the ARCS shader looks like. This is pretty much Samuel Krug's workflow on Blender but translated into Houdini with MaterialX nodes. I strongly advise you to watch the video mentioned above if you are interested in seeing every step of the shader building. In this article, I will explain the main ideas behind the shader which I think are very interesting.
Basically, we will carve into our density with a noise (doing that through the opacity parameter), and then multiply that density by the distance from the center of our sphere. Before starting, make sure you have enough displacement to work with!
ARCS – Base Shape and Roughness
Making the base shape of these arcs relies on noise patterns. In this case, we use a Unified Noise 3D. This one allows you to have control over classic noise parameters such as Frequency and Offset. It also has a "Fractal" noise type which is detrimental to this effect.
This Unified Noise 3D will be fed in the Pivot parameter of another noise node which is the classic Mtlx Noise 3D node. This noise node has 2 other inputs: Amplitude and Position.
For the Position input, I use the MTLX Position node and multiply by a chosen value. This multiplier will control the Roughness of the effect. To the Amplitude input, I wire just the MTLX Position node.
The way I found that wiring the position data to the amplitude parameter is simply a happy accident. Let's roll with it!
ARCS – Expansion
The idea here is that we're multiplying the existing noises by the distance from the center of the sphere. We do that by getting the magnitude of the position and multiplying the first set of noise in its Z component, and then by multiplying again the second set of noise. Also, that magnitude is tweaked with some math operations (subtract, multiply, power) in order to get the desired look.
ARCS – Blur
After all our operations, the solar flares are very blurred by default. So, using a combination of MTLX Multiply and MTLX Power is crucial at the very end of this shader. The goal is to make the low values lower and the high values higher in order to get finer details.
Conclusion
Thank you for reading this breakdown! I hope you got a rough idea of the workflow used to build these cool solar flares! As I said before, please have a look at Samuel Krug's tutorial if you would like to know more about the values of the noises that should be used and other stuff! Of course, you will have to still do more manual tweaks here and there to make it look the way you want.
Compositing in Nuke
Comp Overview
Antoine: I'm excited to share the work I've done on this project. In this making-of, I'll be focusing on the compositing workflow I used in Nuke, to achieve this final result:
Initially, Nabil showed me his renders, slapcomps, and tests. We both agreed that we could enhance the work by dedicating more time to the compositing process. It was crucial to find a look that we both liked and could use as a reference.
For this project, our main reference was the eclipse from Dune: Part Two, but we also drew inspiration from real eclipse footage. However, we tried to reinterpret it a bit in our own style.
Script Overview
To clearly explain the different steps of the compositing process, I've included a screenshot of my final Nuke Node graphs with annotations for clarity:
The script is made of two main parts:
- Overall Look & Animation. This part focuses on creating the basic visuals and movements of the shot.
- Details & Lens Post Effects. This part adds finer details and lens post effects, which are adjustments to simulate how a real camera lens would affect the shot, making it look more realistic and polished.
Overall Look & Animation
Animation
The first step, apart from setting up the format, composition settings, colorspace, etc., was to properly configure the animation. This animation is essential as it will drive everything else and impact every other aspect of the composition and the overall look of the shot.
Nothing fancy here: a black constant with a circular shape used as an alpha, merged on top of Nabil's raw render. I added a few keyframes to slow down the animation at the end, highlighting the climax of the eclipse.
At first generated through Houdini, the black moon shape was re-created in Nuke which greatly improved the speed of the overall composition. By using a single image input instead of the entire EXR sequence, the process became much more efficient.
Look
Once everything was in place and the project skeleton was properly set up with the desired timing and frame range, it was crucial to define the look of the first and last frames. These frames are key moments that need emphasis. Once it was done, I ensured that all the intermediate phases played smoothly, maintaining a consistent flow from start to finish.
Ambiance and animation must work together. For example, the shot's brightness should gradually dim from start to finish, with glows adapting accordingly. The setup relies on luminance, so as the sun’s illuminated part fades, brightness naturally dims. However, I manually adjusted certain aspects, like tweaking the glow threshold at the end to maintain subtle glows even as brightness decreases.
To achieve this look, I tried to stay as straightforward as possible, it's always good to keep it simple to avoid being lost in the script which could become super heavy for no reason.
I used common workflows such as:
- Grades with rotos or noises as an alpha channel to enhance the brightness in specific areas (see first frame).
- Multiple exponential glows of varying sizes, thresholds, and intensities, were added together.
- Some noises to create breakups in the background.
Lens Post FX
The following image shows how the lens can introduce artifacts into the final outcome. My goal was to emulate this look to enhance our render. This was achieved mostly through halation, heat distortion, dirt, flares, and more.
John Finney
Halation
If you pay attention to the border of the moon (to the border of the highest contrasted areas), you can see the red color bleeding. To replicate this effect, I used a colorized glow in the brightest areas.
Heat Distortions
There's nothing too complex here. Just some distortions to introduce irregularity and convey the sun's "fiery" quality. I achieved this using animated noise and the iDistort node.
Lens Dirts
I decided to add some lens dirt as I usually do in super bright or contrasted shots but it's really subtle here in this specific case. It just helps break the "perfect gradient look" of the shot and complexify it a bit.
Lens Flares
One important aspect I wanted to have in the shot is lens flares. I did use two types of lens flare here:
- A horizontal lens flare I made based on the luminance of the shot that would serve as a base.
- Several lens flares made with Optical Flare to mimic organic and realistic lens flares that I have animated by myself based on references. You can find lots of good references on Sharegrid's channel.
Cam Shake
We can't really call a cam shake “lens post-FX” as it emulates the camera movement rather than the lens but it's a nice subtle addition to the final look.
Grain
The final touch was adding grain, like the cherry on top. I chose to introduce a significant amount of noise, simulating a high ISO setting to reveal details, as the scene becomes very dark towards the end (and as for the camera shake, it helps to understand we are "zoomed in"). While this may not be entirely accurate, it contributes to achieving a "cinematic" look.
Conclusion
This shot was a great challenge as we created everything together, and I had to ensure we matched the look of Dune: Part Two. It was also an excellent exercise to start from a black background and bring it to life. We both learned new techniques and also enhanced our collaborative workflow. This means that more similar projects are definitely coming.
We hope that this article helps some of you understand the process we went through and that it will help you achieve your own art pieces. Keep in mind that there are plenty of ways to achieve the final result and our workflow was only a path among tons of possibilities.
Thank you all for reading! Don't hesitate to follow us on our social media accounts!
Nabil Jabour, FX Technical Director
Antoine Jaspar, Digital Compositor
Keep reading
You may find these articles interesting