Final Render:
Beauty Shot:
VFX Breakdown:
For this project, I am trying to create burning palo santo / incense in Houdini using particles and pyro. I began by finding a reference:
I'm focusing on recreating the swirly smoke, and adding in a flame in the beginning that goes out.
11/5/24 Reference Update:
I own a lot of palo santo myself, so I decided to record a video of me burning it, as the reference video I included at the top doesn't show a flame or the burning area cooling off:
Reference video taken by me (fire goes out at 0:22 seconds)
I took a picture as well of what it looked like after it had cooled off completely. As you can see in the image below, the areas where it burned the hottest turned into ashy white points:
Reference image taken by me
I did have to do a couple of takes for the video, hence why in the reference image there are multiple ashy white points, as those points are where the flame was applied. As you can see in the reference video that I took, the fire was applied to the top left corner of the stick, so that is where an ashy white area formed.
11/11/24 - 11/12/24: Compositing Breakdown
I want to begin by showing the "raw" footage rendered from Houdini, then show my Nuke script. I did include a VFX breakdown at the top of the blog, but I will also include it in this update so you can compare the footage to the "raw" footage.
VFX Breakdown (with compositing layers)
"Raw" renders:
Original rendered footage of plate (stick, ground, ashtray, burn)
Issue 1: super noisy on the stick and the ashtray. :(
Original rendered footage of Smoke 1
Issue 2: Blobby fire
Original rendered footage of Smoke 2
Issue 3: super stringy looking.
To show what I did to get to the final product, I am going to go through my updated Nuke script now, feel free to reference the breakdown.
Nuke script of final render
Issue 1 Solution: To fix the first issue of the noisiness (refer to green container labeled "Noise fix (mask)", I used a framehold node on the last frame (as it has the most exposed part of the stick with out the burn covering it). I used a mask to cover the ashtray and the stick (this only works because it is a non-moving camera), and I roto'd the area where the burn spreads so that the mask wouldn't cover it up as it moved.
Noise mask roto
Issue 2 Solution: To fix the blobby fire, this required adding extra glow around the fire (refer to red container labeled "Extra fire glow (shape)"). I roto'd an area for more glow around the fire, carefully moving the roto points to the edges of the burn spread so that the glow didn't also look blobby, but to also give it a red tinge on the edge. I had to re-roto the noise mask with some feather roto so that the glow looked more natural. Ironically I did not use a glow node, I used an edge blur node as it had a better effect. There was glow added within the yellow container labeled "flame and smoke fix".
I did adjust the opacity (using the merge node's mix), grading, blur, and transform of "Smoke 1"'s sequence. There is also a roto because when transforming, there was a hard edge at the top due the smoke not being big enough to reach the end of the frame, so I feathered the cut edge using roto. I can show a before and after of fixing the fire:
Original flame (frame 1)
Flame after "Extra fire glow (shape)" and "flame and smoke fix" nodes (frame 1)
"Extra fire glow (shape)" roto (frame 1)
Issue 3 Solution: As you saw, the wispy smoke was super sharp and stringy. Within the "wispy smoke adjustments" blue container, I have the glow, grade, edgeblur, blur, transform, and a roto. The glow and grade was to adjust the shade of white, and I did keyframe the grade to imitate real smoke, it gets darker and lighter over the final render but very subtly to make it look natural. The blur was to help with the sharp stringy lines, and the edge blur was to try and blend in the edges better.
I did transform it (with some keyframing), because at some parts it felt like the smoke was too small, and that the wispy cloud should be higher up in the frame. The roto mask was used because the stringy cloud at the top felt like it was lingering too long, so I feathered the right edge to fake a fade away of the smoke. I will show some images:
Original wispy smoke comped in
Wispy smoke after "wispy smoke adjustments"'s nodes (same frame as previous image)
Wispy smoke roto and feathering (faking falloff / fade away)
The fixes I did were to make everything more seamless with the footage I rendered out, and a little more believable. The last thing was to adjust the saturation and glow of the actual burning area, which I did within the red container labeled "Burning Glow". Since the burning area was rendered onto the stick and not a separate layer, I roto'd the area to keep the glow within only the burning area, as it was originally the whole plate (include floor, stick, ashtray) glow. These images have subtle differences:
Original burn area (no edit)
Burn area with glow and saturation adjustment (darker)
Compositing is about the subtle work as well to help make the final image believable. I do want to share my final render after compositing (it is also at the top of the blog), as well as a before image with everything together before edits:
Final render (after compositing work)
Slap comp with no edits
Thank you for reading my blog!
11/11/24: Technical Breakdown
General node overview
I will give a brief overview of my nodes. The red node labeled "palo_santo_practice" was my initials tests of the burning and color attribute transfer that I did not end up using for the final. These can be seen in the first couple of updates within this blog (scroll down).
"Puffy Smoke" Container - Contains my original smoke simulation that is puffier than the wispy smoke.
"Burning Palo Santo" Container - Contains palo santo model and the geo for the emissive burning tip.
"Thin Wispy Smoke" - Contains the pyro sim and the wispy thin smoke that emits from the pyro sim. (Pyro sim visibility is turned off)
"Set Dressing" Container - Contains the ground and ashtray models
"Lights and Camera" Container - Contains the 2 lights and set Render Camera. It also has a lopnet which I initially was going to use to render in Karma, but unfortunately did not end up using due to circumstances.
Inside "flame and smoke" node
Within the "flame and smoke" node was the general use of the billowy smoke shelf tool. I made a couple of adjustments to its velocity, density, disturbance, turbulence, buoyancy, and dissipation to achieve the look I wanted (these are adjusted within the "pyrosolver_billowy_smoke" node). I keyframed the flame to go out after two seconds as well.
Within the "Burning Palo Santo" container, it has the actual model with material (palo_santo_model), as well as a separate geo node for the burning tip. Here's what it looks like within the "burn_tip" node:
Inside "burn_tip" geo node
Inside the "burn_tip" node, I applied what I attempted in the "palo_santo_practice" node. I took the exact same palo santo model and clipped it to just the end tip. I think applied the pyrosource nodes with a delete this time, and converted from particles, to vbd, to a polygon mesh. I then applied the material (which is an emissive red shader).
Inside "pyro_sim" node in "Thin Wispy Smoke" container
I briefly explained how I made the wispy smoke in the last update, but I want to go a little more in detail this time. This pyro sim is creating points from volume from a sphere. Those points are then applied with pyrosource and velocity (basically applied wind). Then within the "volumerasterizeattributes1", we keep these attributes:
"Volumerasterizeattributes1" settings
We keep density, velocity, and temperature. Then the pyrosolver is our actual smoke (I adjusted dissipation, turbulence, and smoke color). The "purge_attr" and "purge_groups" nodes clean up the attributes we don't need for the file cache. The file cache is very important to create the wispy smoke, so CACHE IT!
Inside "thin_smoke" geo
Within the "thin_smoke" geo, you are sourcing from the "pyro_sim" node (so if you transform one or the other, the wispy smoke will NOT work). You can put a polygon down as a source, here I chose a box as the object emitter. Points are created from the volume, and then an index is created. Pyro_sim is then brought in and then converted, and both are plugged into the solver. The nodes that are within a container in the middle essentially refines the particles and makes then smoother (mentioned in last update below).
VEX code in "pointwrangle1", sourced from Alessandro's website (link in last update below)
The above image has the VEX code that was implemented in the "pointwrangle1" node that is pulled from the website I linked before. Here it is again:
This affects the density, age, and scale of the particles.
Inside "thin_smoke"'s solver node
Within the "thin_smoke"'s solver node, we have the points refined (as the wispy smoke has streak lines created by the particles). Here is the VEX code for the "quick_smooth" attribute wrangle.
VEX code in "quick_smooth" node, sourced from Alessandro's website (link in last update below)
This essentially creates the smooth streaks with the points. The next two nodes, "age_points" and "kill_old", allows the points to die off since they won't die off on their own (as these are not points in a popsolver that has that control).
Going back to the containers, the "Set Dressing" container has the ground plane and ashtray with materials applied. The "Lights and camera" has the 2 lights in the scene, and the set Render Camera. It also includes a lopnet, but as you see in the sticky note, I could not render in Karma. I ended up rendering in Mantra since I was stuck at home sick and needed to render asap. In the next update, I will break down my compositing work (above update).
11/9/24-11/11/24: Smoke and Comp
I tried following a new smoke method from this website:
This is a flipbook of recreating it within my scene:
Recreating wispy smoke flipbook
I recreated it within my houdini scene with some adjustments, such as adjusting the density and keyframing certain aspects like velocity and turbulence. To give a basic summary:
Inside new pyro sim
You create a new pyro sim, and make adjustments to movement within here. The wispy smoke comes from this, so the important thing is to cache it.
Inside wispy smoke node tree
You essentially bring in the first pyro sim you made, using it's density and volume attributes. I adjusted the age so that the smoke did not last as long, but the wispy smoke emits from the same smoke as your pyro sim, so they must be in the same location. Transform AFTER you have cached everything.
Close up of wispy smoke node tree
This area specifically smooths out the particles, here is an image with them turned off:
Wispy smoke with specific nodes turned off
As you can see the smoke just doesn't look as smooth. I was also thinking that the smoke was looking a little empty, so I tried to include both my original smoke and the wispy smoke. This is what it looked like in the viewport:
Two smoke flipbook
It didn't look too bad, however in render view it looked like this:
Render with both smoke sims
This was not the look I wanted. I was thinking about resizing and keyframing the transform on the puffy smoke to move correctly with the wispy smoke, but I was having issues as this was starting to slow down and crash my computer. So my best solution was to do this in post - compositing! This gives a lot more control over final image results.
Screenshot of Nuke Script
I rendered out the final scene with the burning tip together ( I would prefer to render out the burning tip separately so i could solely control the glow on it, but then I wouldn't get the emissive reflection on the floor if I did that separately. I then rendered out the smokes separately so I could have more control. Here are the renders of the smoke separately slap comped onto the final scene with out any edits (nodes are turned off):
Slap comp with only puffy smoke (unedited)
Slap comp with only thin wispy smoke (unedited)
Slap comp with both smokes (unedited)
Now this is what the comp looks like after I masked off the area to add glow to the burning tip, roto'd a fall off point for the wispy smoke, blurred both the smokes out and changed their opacities. I did try to keyframe the transform for the puffy smoke to match the movement of the wispy smoke, but I may either get rid of that or clean it up a lot more:
Slap comp with both smokes after editing
I did change the scaling of the wispy smoke as it was bothering me that so much was clumping within the frame. I like the visuals of both the smoke, but I will receive feedback today and adjust accordingly. Next steps:
-Adjust smoke according to feedback
-Render at correct resolution
-Fix compositing
11/5/24-11/6/24: Switching methods
I originally had some ideas of how I wanted to do this project, and I tried making some of those ideas work last night. However, they were not visually appealing nor was it something I wanted as a final piece. I woke up with a newer idea and decided to give that a shot, which in my opinion, looks better than what I had last night. In this update, I'm going to go through my processes so you can see how my idea and work developed overnight. The latest development is shown at the end of this update (before the divider).
My original idea was to have the booleaned area (created by pyrospread) to change color by keyframing the shader that is on the burning area. There is emission applied on the shader, but it isn't realistic as we are viewing through the viewport instead of an actual render with lighting set up. Here is a flipbook to visually understand what I mean.
Keyframed emissive shader on burning area
This gave me the essence of what I wanted, as when burning palo santo like in the reference I video taped myself, the burning area cools off to a blackened area. However, I am missing the ashy white areas that usually appear in the very burnt areas, usually close to the source of where the fire was.
To recreate the ashy white center, I thought about using an attribute transfer method specifically to transfer the ashy white color onto the area. I used a sphere that is lowered down to the burning area, and keyframed it to grow in size following the burning area pyrospread. Here is a flipbook to show the attribute transfer prep:
Attribute transfer prep (for color transfer)
Unfortunately when I set it up and ran it, it didn't work quite as planned. Even though the source of the attribute transfer (sphere) is originally touching the burned area, the only area that was getting affected by the transfer was the wood (NOT burned area). It was turning everything else but the burned area ashy white. HOWEVER! This gave me a new idea. What if I were to shift gears and make the attribute transfer color to black to create the blacked areas on the wood itself, and keyframed the burning booleaned area from burning red color to the ashy white center that was desired? Here is that idea executed:
Switching attribute transfer and pyrospread colors method flipbook
Here is a render, as the ashy white color was not appearing in the flipbook/viewport:
Switching attribute transfer and pyrospread colors method render
As you can see... though the colors were what I wanted, the blackened area wasn't working the way I wanted as there were gaps of regular wood shader between the blacked area and the burning area. I tried to up the divisions on the stick to see if that would help, but alas the issue persisted.
I was feeling pretty distraught at this point since everything was just looking ugly - I couldn't get the burning area (stick tip) to look correctly in any aspect, and the stick itself was ugly. I had issues with the UVs and the displacement. I decided to get an actual palo santo model and move the flame/smoke onto the tip of it. The model I picked had the correct shader and displacement working, and it already had a beautiful texture that included a burnt end with an ashy area. Here are some images of that:
New palo santo model with texture in viewport
New palo santo model render
I was thinking that the flame was looking small, I scaled up the flame and smoke that it looked more accurate. Here is a render of that as well:
New palo santo model render (flame scaled up)
Palo Santo 3D model source: https://zb-vision.com/2023/02/23/palo-santo-3d-model-4/
At this point is where I called it for the night; I just wanted to get some visuals right as previously everything was stressing me out. That is when I got a new idea as I was waking up this morning.
My new idea was to similarly apply what I did before onto the new model. Here is an image of a new node tree with my new idea:
New burn area node tree
I essentially took the new palo santo model and clipped it so that it was just the tip. I applied the pyrospread method again, but this time included a delete node. I had the source of the pyrospread come from the right side (cooler side of tip), and delete the points as it moved closer to where the flame was. I scaled down the point size in point wrangle, and once again coverted the particles from vdb to a polygon. I then applied the burning area material/shader onto it, and transformed it so that it was on the tip. I messed with the scaling so that the area didn't just look like a cap sitting on the tip. I decided to get rid of the keyframe within the shader, so the shader no longer turns from emissive red to black. It now stays as an emissive red. Here is this new idea in action as a flipbook:
New burning area method applied flipbook
With the way I scaled the tip, there are some areas of the ashy white poking out, which I actually don't mind. I feel like it looks closer to the real thing. I am very happy with how it is looking visually, and now I can direct all my attention to the star of the show - the smoke.
11/4/24: Developing ideas
I had some time today to adjust the smoke and the pyrospread. I adjusted the smoke to have a longer dissipation, and appear more whispy, and I changed the pyrospread from particles/points to vdb, then essentially to a polygon. This got rid of my point wrangle color ramp, but allowed me to boolean the spread from the object (which I think looks and makes more sense). Here is a flip book of the new smoke and pyrospread, you can kind of see the flame in the beginning but I am still having trouble getting the flame to appear in the flipbook:
I did keyframe the flame to die after two seconds, hence why the glow goes away.
I was also trying to get a wood shader onto my object, but it's looking more like a block of wood in an old video game, so I may have to find a better texture and adjust UVs, as the displacement was not working at all. In this render, I have some noise displacement, but it's just not looking the way I want:
Test Render with wood shader and noise displacement
I did also want to break down my node tree so far:
Palo santo node tree (does not include flame/smoke solver)
I began with a simple box and mountain node, and applied the pyrosource. By having the group (labeled hot, and selects points scattered across the surface of the object) and creating an attribute (temperature), this allowed for a starting point for the pyrospread (which is applied in the pyrosourcespread node). The point wrangle originally allowed me to adjust the scaling of points, and to create a color ramp that imitated the colors of burning when spreading across wood. I applied a blast node that deletes all the points that are not effected by the pyrospread. The next three nodes allow me to convert the remaining points into vdb, then into a polygon shape. I applied a simple black shader onto it, and booleaned it from the original shape. However, when using this method, it rendered the point wrangle's color ramp useless, but it achieves the effect of burning eating away at wood.
My next step/idea is to keyframe the black shader to start off as a red shader with emission, then to fade into black (to imitate burning wood cooling off), then apply a color attribute transfer to the center of the black pyrospread, so I can apply an ashy white color that slowly spreads ontop of the black, similar to the reference. I also want to key frame the smoke so that it isn't as turbulent later on, like in the reference (as it looks like the smoke calms down after a bit). I also want to create a second smoke trail, as it looks like in the reference, it appears like there are two smoke trails. To summarize what the next steps are:
-Keyframe red emissive shader into black
-Apply color attribute transfer (ashy white onto center of the black)
-Fix wood shader and displacement
-Keyframe smoke to be calm after a few seconds
-Create a second smoke trail
11/2/24: Starting Off
I began by creating simple geometry to have the stick appearance. I then created a small flame that I keyframed so that it goes out after two seconds, but the smoke continues. I added a pyrospread to recreate the burning spread appearance. I rendered out a flipbook but for some reason the flame did not render out, nor can you see the color spread:
The burning look is achieved using a color ramp as the pyrospread passes through the points, but I did not include a delete node after the spread has passed. Instead, I have the color change to white, similar to the reference. However, I may change this.... I already do see some issues that I have to figure out:
-How to get the stick to appear "burned" (black/ashy white) after it has been burned through
-Lowering dissipation and making the smoke more swirly
I also wanted to include images of the viewport that has my flame and the color pyrospread on it since the flipbook did not show it:
Pyrospread with color ramp to recreate a hot glow burn
Small flame
The besides creating the small flame and burn, I was playing around with the turbulence and density of the smoke. I lowered the density a lot since I started off with the billowy smoke solver, and upped the turbulence. I left wind at 1, so the smoke did move instead of just floating up right. I'm working on making it more swirly.
Though this is just a simple beginning, I will continue to refine it.
Commentaires