Rookie Awards 2024 - Open for Entries!
Crown Flame
Share  

Crown Flame

Martin Alexander Suriadi Ng
by martinalex on 22 May 2023 for Rookie Awards 2023

I initially started this project to practice simulating fire as photo-realistically as possible. I like the result of it, and that is why, along the way, I polish it even further.

1 693 0
Round of applause for our sponsors

I initially started this project to practice simulating and shading fire as photo-realistically as possible. I was browsing along on the Sketchfab website to find a great base model for initializing the simulation and I stumbled upon this crown model.

The first step is to create a source for the simulation. In this case, I am using the "Scatter" SOP and choosing the points for initializing the "Pyro Source Spread" SOP. Then, I grouped the "burned" points, essentially the points that have the "burn" point float attribute of 1.0, and then I use the "Retime" node to change the speed of the grouping, and the "Time Shift" node to specify in which frame the grouping started.

Next, I created a "mask" attribute and transfer it into the initial crown geometry with the "burned" group as the source of the transfer.

Using a "chramp()" VEX function, I am able to obtain the leading edge of the mask and save it as a "mult" attribute. This "mult" attribute is used later for multiplying it with the "mask" attribute.

Then, I multiply the "mult" attribute with a noise using the "Attribute Noise" SOP and use the inverted noisy breakup of the "mult" attribute to multiply it with the "mask" attribute, resulting in a noisy "mask" attribute at the leading edge. I also append a "Time Shift" node to further polish the noisy breakup.

The "mask" attribute is used to drive the displacement of the geometry using the "Attribute VOP" node. I also save the value that is used for the displacement as a "cracks" attribute.

Next, I used the "Object Merge" SOP to import the final displaced geometry and used it as the source for the pyro simulation. The "Attribute Interpolate" node plays a huge role in this case because I am able to obtain the "burn" attribute from the initial spread simulation. Again, grouping the points that have the "burn" value of 1.0, and using it for the "Pyro Source" SOP for the simulation data.

In terms of the pyro simulation itself, I turned on the buoyancy and the disturbance. Then, I add a custom "Gas Turbulence" DOP inside of it with the clamped value of the Y force to be from -0.1 to 1000. I did this since if I have the default turbulence, I can see some fire that is flowing downwards, and I do not feel that it is a very physically accurate simulation.

Finally, I wanted to emit some sparks for an additional simulation as well. To create the emitter, I deleted some points based on some restrictions. First, I deleted points that are facing towards the origin, I did this so that there will be no sparks that will spawn on the faces that are facing inside of the helmet or the 'head' part. Then, I deleted some of the points using a "delete" attribute that is created using the "Attribute Noise" SOP and I used an animated random percentage of the points that do not have the "cracks" attribute (this was created previously in the "Attribute VOP" node) value of 0. This "emitSparks" group is the one that is going to drive where the particles will emit.

For the particle simulation, I created a custom "life" attribute to drive the life of the particles. Then, I used the "POP Advect by Volumes" DOP to drive the velocity of the particles based on the velocity of the pyro simulation.

This is the whole Object node of the project.

Finally, after finishing rendering it, I composite it into Nuke. Using the proper AOV, I am able to separate the individual lights and change them in post. Personally, I really like to use the "Glow Exponential" node from the SpinVFX gizmos if I want to add some glow to a fire. I think it helps a lot with this project.

That concludes my breakdown of creating this project. Thank you.


Comments (0)

This project doesn't have any comments yet.