Objects go through material degradation when they are exposed to heat or fire. A Master Material Class was constructed from which a material instance will be created for each scene object. An instanced material allows procedural modification of an object’s appearance. It enables manual control over the burning states of the objects. This also allows testing every parameter that affects the appearance of an object. The material instance is integrated with the dynamic propagation system so that the parameter controls are taken over by the system.
The Master Material Class is made of several properties to define the surface information of a degradable object. These properties are Base Color, Emissive Color, Metallic, Roughness, Normal, Displacement and Opacity. Details on the construction of these properties follows next.
The base color drives the overall color information of the material to be applied on an object. It accepts texture samples that allow the user to specify textures from image files. These textures are 1) pre-burnt state texture, 2) post-burnt state texture and 3) an optional mid-burnt state texture. They are connected to a ``Lerp’’ node, short for Linear Interpolation. The lerp node allows transition between two materials or textures based on the alpha input. The alpha can either be another texture sample or a set of material expressions to calculate how the transition should occur. The lerp node is used in other material properties such as emissive color, normal etc. This is to allow similar transition between two states, pre-burnt to burnt. More explanation on material transitioning in the system is given in the following sub-section.
The emissive color controls how much glow or light emission a burning surface gives out. The construction of the emissive color was very challenging. It is constructed using three groups of material expressions. 1) Emissive mask for combustible objects, 2) Emissive mask for metallic objects, and finally 3) Growth mask and Forward/Reverse expressions to control the material transition between the unburnt, burning and burnt states of a surface. The set of material expressions under growth mask allows a burning object’s surface to incrementally glow and also fade away as the surface cools down.
An assumption was made, for simplicity, that unlike combustible objects, metallic objects do not burn away. They would slowly heat up and glow red. Therefore, it was easier to create a separate group of material expressions for emission on metallic surfaces despite few repetitions.
The normal map properties were used to create surface details and illusion of bumps on the surfaces of burning objects. For example, the bubbles formed on heated plastic surface and rough bumps on burnt fabric were achieved through normal maps. The normal map property, just like base color input, allows designer to set both pre-burnt state and burnt state. The system will then transition between the two states as the object is degrading.
Displacement maps were used to drive the deformation of a mesh. The displacement network allows usage of custom displacement textures for each object in the scene or a default texture. The intensity of the displacement can be controlled parametrically. Initially the displacements were causing excessive deformation on the x and y axes of the mesh (sideways). Due to this, meshes appeared very skewed and warped. To counter this, a limit was set to the x and y axes to prevent any sideway deformation and allow only vertical (z-axis) deformation. The results were more natural in that as meshes underwent heat and fire, they appeared to be melting and gravitating towards the ground.
The primary purpose of the opacity mask in the visual demo was to allow objects to expose transparency in areas that have burnt. This is used in objects of paper material. By default, the opacity masking is turned off as most objects are primarily opaque. If an object has to have opacity masking, an instance of this Master Material class will have its blending mode set to “masked”. The opacity is controlled by two texture sample parameters. By default, they have a complete white texture. White denotes opaque while black is transparent. The material instance allows the user to change the textures to have custom opacity values on a burning object. In the case of paper, there is to be complete transparency.
Material transition is a process in which texture A changes to texture B based on either a scalar parameter or another texture, which could be used as a pattern. The Linear Interpolation (Lerp) between the 2 textures is revealed using a "Sphere Mask" node.
The material node called "Sphere Mask" takes in four parameters: 1) The edge point of the masking sphere, 2) location of the center of the masking sphere, 3) its radius and finally 4) the hardness or fall-off region of the mask. The edge point parameter determines how a burning object’s surface reveals its underlying texture. Surface edges do not burn in perfect spheres. In order to create an unevenness in the edge, a greyscale texture parameter is used as first input. This parameter accepts a texture which is basically a cloud image rendered in Adobe Photoshop using just black and white colors. It is then multiplied with a user editable parameter called “Turbulence” to affect the amount of distortion along the edges. High values of turbulence results in higher distortion. When the player clicks on an actor mesh, the point of click becomes the center of the sphere mask. Its radius is derived from the bounding sphere’s radius. At each event tick, as the bounding sphere’s radius is incremented, the sphere mask’s radius is updated. The sphere mask’s radius is also multiplied with another user controllable parameter called ``maskMultiplier’’. This controls the rate of expansion of the sphere mask’s radius.
The above material expressions network limit displacement along vertical (Z-axis) direction only. Initial displacements caused excessive sideway deformations. To limit this, expressions were used to ensure the deformation would occur along Z-axis or vertical direction giving the illusion of mesh melting and effects of gravity.
The next step involved in creating transition effects was to have glowing edges. Receding edges of burning surfaces glow intensely when exposed to heat and flames. First step in creating a glowing edge was to create a texture of size 256 pixels by 1 pixel. The texture sample is shown below. It is primarily a black image with a thin white gradient strip. The white and gradient areas is multiplied with a Vector3 value (RGB) to create a yellow border. The output is multiplied with a parameter called ``Glowness’’ to control the brightness.
A: A single channel output of a turbulent texture is subtracted by .5 to reduce it to a -.5 to .5 range. Then it's multiplied by a dynamic turbulence intensity value. Then two append nodes are used to turn this single channel into 3 channel RGB data. Then all of this turbulence is added into Absolute World Position to produce an output which represents a World Position distorted in all 3 axes by texture based clouds.
B: Radius is multiplied by a maskMultiplier value to artificially shift the mask ahead of the animated radius value. This is used as the radius value in a sphere mask which also takes in the location of the burn point and the distorted World Position from section A. initialHardness is added to the clamped result of the radius divided by 500, forcing the mask to harden gradually over a 500 unit transition.
C: The output of the spheremask is clamped and multiplied by the hardness adjustment (multiplied by 15 and added to 1) in order to shift the 0 to 1 range of the spheremask out to the outer edge of the sphere volume. The 0 to 1 range is then inverted and 0 is appended to the G channel to create an empty V channel for the texture mapping, since we only need a U channel to map a linear gradient. The IF statement exists to determine if a sample of the U channel is exactly 1, to prevent a border clipping error in the texture sample.
D: The grayscale output of the texture sample is multiplied by the IF statement and then multiplied by an RGB color to give the glow its color. Then it's multiplied by an intensity value to give it bloom.
Creating the Edge Glow
What happens when the objects has finished burning and is cooling down? When a user clicks on a mesh, both a bounding sphere and a cooling sphere are spawned at the mouse click location. That location becomes the center of the spheres’ radius. The purpose of the bounding sphere Is explained under propagation. The following explains the purpose of the cooling sphere. When a mesh has more than 90%-95% of its vertices completely burnt, a scalar parameter called ``cooldown’’ in the Master Material Class is set to ‘1’. The ``cooldown’’ parameter is set to either ‘1’ or ‘0’, where ‘1’ means the mesh is in cooling state and ‘0’ is in heating state. Once set to ‘1’, the cooling sphere begins to expand. As the sphere expands, the areas falling within its radius begins to cool down. Visually, this is represented by the reduction in the amount of emissive color given out by that region previously burning.
When the cooldown parameter is zero, Sphere Mask utilizes the radius of the bounding sphere that causes fire propagation. As explained earlier, during the propagation stage, the material changes to burnt states and emits red and red-orange glows. When the cooldown parameter is one, Sphere Mask utilizes the radius of the cooling sphere whose corresponding material radius is called ``secondRadius’’. As this radius increases, it reverses the emissive colors to nil slowly.