Shock Diamonds with Flare

Welcome to Vulcan

Vulcan is a new way to add realistic and dynamic flames to your games Rockets, Jets or other objects that need a flame or plasma type effect. Vulcan is a procedural layer based Mesh system which builds your flame shape and also a custom Shader that will render and animate the flame effect.

This is an alternative the the usual Particle system based way of adding jet or thrust effects to engines. While particles can look good they can also suffer from a lack of realism when moving and it can be hard to get the look you want. Vulcan allows you to design the mesh you need using layers so making it easy to add subtle detail and interest to the flames as well as also allowing that flame to bend if required when moving, change its size, shape, colors and even collide with scene Planes or Spheres.

Once you are happy with a Flame you can add it to your project as a simple mesh or keep the object with the Flame script so you can update the flame at runtime if you want.

Vulcan also allows you to bake out your flame to Blendshapes so you can create a flame with different looks and shapes and then once baked you can change the whole shape of the flame by just changing the Blendshape values, great for expanding rocket plumes as it increases in altitude.

It is important to note that once a flame is built then no CPU time is used at all to animate the flame in your game, all the work is done by the Shader making the flames very fast.

Image

Features

Vulcan is full of useful features to make your Flames look great and to make creating them easy and fun.

  • Layer Based
  • Procedural Meshes
  • Detail Slider
  • Flame Flutter
  • Flame Pulses
  • Reorderable Layers
  • Disable Layers
  • Layer Position
  • Layer Size
  • Layer Rotation
  • Multi Material Support
  • Profile Curve
  • Multiple Mesh Types
  • Vertex Distribution
  • Double Sided Option
  • Flip Normals
  • Cap Start and Ends
  • Full UV editing
  • Rings of Flames
  • Soften Edges
  • Intensity
  • Rim Coloring
  • Fade System
  • Bend values
  • Collision Options
  • Works with Builtin, URP and HDRP
  • Shader Graphs for URP and HDRP included
  • In Scene Edit tools
  • Improved Inspector options
  • Noise Texture Builder
  • Flame Map Builder
  • Gradient Map Builder
  • Flame Library Window
  • Flame Preferences
  • Build Blendshapes from your Flames
  • Easy Level of Detail Sliders
  • Visualize Mesh Data
  • Full Undo
  • Tooltips
Image

Installing

To install Vulcan after purchase just locate the Vulcan Asset in the package manager window like any other asset, click 'Download' and once that has completed click the 'Install' button. A window will open showing all the files in the package, you can either select all the items and install the package or you can just select the package file for the pipeline you are using. Click the Import button and Vulcan will install.

When the initial install is complete a window will appear which will allow you to complete the installation for the pipeline you are using. Vulcan will auto detect which pipeline is installed and you can just click the 'Install Button'. Once the button is clicked the full version of Vulcan with the correct shaders, materials and demo scene will be imported, you can still choose which files to install if you don't want the demo scene etc.

If you are using the Built in pipeline you will find the Shaders in the Vulcan menu option when selecting a shader. If you are using URP or HDRP then the shaders will be in the 'Shader Graphs' section. The Shader graphs are included so you can duplicate them and change them if you need to.

If you are using HDRP and want to see the Vulcan Demo scene make sure that you go to the Project Settings/Graphics/HDRP Global Settings and select the 'Vulcan HDRP Pipeline Settings' this will make sure the Lighting and Post Processing are set correctly. If you see a scene with very bright objects then you have not selected the correct Settings File.

If you see warnings in the Console from Text Mesh Pro about Underline character not available then you can go to the TMPro settings window and check the 'Disable Warnings' box to stop them.

Image

Getting Started

Once installed you can create your first flame. To do so just create and empty GameObject and then click the 'Add Component' button and type 'Flame' and select that component. The Flame component will now be added to the GameObject along with a MeshFilter and a MeshRenderer component. The Default Flame Material will also have been added and a basic flame mesh will be built with a single layer.

You can also just use the GameObject menu and go to Vulcan/Flame and click that and a new Flame object will be added to the scene.

And the final way to add a flame to the scene is to use the Flame Select Window where you can pick from any Flames already in the project through clicking a Thumbnail of the flame you want. To add a new Flame object to the scene using the Flame Library Window make sure you have no objects selected before clicking a thumbnail, that will then add the flame as a new GameObject to the scene, if you have objects selected then the flame mesh will be changed for the selected flame, or if a Flame component is already present on the object the values will be updated to the selected flame.

See the Flame Library Window section for more info.

Image

Flame

The Flame component is the core to the Vulcan system. This script will allow you to add multiple layers to the flame and change all the various colors and effects. This section will guide you through the various sections of the Fame Inspector and explain what all the various options do.

The first button in the inspector will save the current state of the Flame mesh to an asset in your project. This mesh can then be used with any Flame material in your project and the Flame component need not be applied, all the data for the correct rendering and animation of the flame is encoded into the mesh data.

Next are the global values that are applied to all the flame layers.

Scale

These values can be used to scale the final flame mesh in the width and height directions. There are also scale values in the Flame shader so you have a choice of ways to scale the final end result.

Bend Curve

This curve controls how the flame will be allowed to bend when Angle values are applied to it, generally you want to have no bend (0) at the start of the flame and full bend at the end (1). For weak flames such as candles then you want a bit of bend to happen across most of the flame, but for a Jet or Rocket engine you would likely want any bending near the end of the flame.

Speed

This will control the overall speed of any animations the flame may have, this will adjust all layers the same, but you can adjust each layer on its own as will be seen later. This value can also be negative if you need to have the animations go backwards.

Length and Round Detail

The number of vertices used for the flame is defined per layer in the mesh settings where you can choose how many vertices make up each layer and hence the final total. These two sliders will adjust all those values so you can easily decrease or increase the overall mesh density easily. This is useful for making level of detail meshes, or adjusting the mesh density at runtime depending on quality settings of the device your game is running on.

The info box will tell you the current vertex, triangles and submesh count for the current flame, this makes it easy to see what effect the sliders are having on the vertex count.

Flutter

Flutter is the random movement you see in various flames due to various wind movements or turbulent airflow. This effect can be applied to your flame and the overall effect will be controlled by these values. How the flame actually moves due to flutter is controlled by the Noise texture that is applied to the flame material so you can control how smooth or rough the overall look is by changing the noise channels, we have included a Noise Map builder in Vulcan to allow you to more easily create your own noise textures. See the Flame Noise Map section for more info on how to create those.

Flutter

The maximum amount of movement applied to the mesh, low values will result in very small movement and higher values will give a lot.

Flutter Scale

How the noise values relates to the size of the mesh, making this value small will give smoother more gentle movements to the flame, higher values will give a much more turbulent look to the flutter.

Flutter Speed

How fast the flutter changes, this value will depend on the type of the flame you are creating, a small flame with not much force behind it will have a lower value where as a rocket engine will need higher values.

Flutter Curve

Controls where on the flame the flutter will appear and how much, so again you would likely start the curve at 0 0 so no flutter happens at the source of the flame going up to full flutter at the end of the flame.

Pulse

Pulse allows you to add a more subtle movement to the flame and adds a pulse like effect and movement to the flame, this is useful for say Rocket engines where you want to show subtle variations in the output of the engine. Again the noise texture is used to control the look of the pulsing.

Pulse

Controls how much movement will be added by the pulse, low values will add small amounts, larger values will add more movement to the flame.

Pulse Scale

This value allows you to control how much of the flame is changed, so a low value here will change the whole flame as one and a larger value will mean you will see more than one pulse at a time on the flame, so a large rocket engine would need a larger value than a small flame.

Pulse Speed

How fast the pulse moves through the flame, this value will vary depending on the overall size of the flame and the speed you want.

Pulse Curve

Again controls where on the flame the pulsing will be visible, this curve could be used to setup regions of pulsing in a large rocket flame for example. Again though generally there will be little pulsing at the start of the flame and more towards the end.

Visualize Properties

This section allows you to visualize most of the settings as they are applied to a mesh, this will show per vertex for the currently selected flame layer various bits of info that is encoded in the mesh. The colors used to display this info can be changed in the Vulcan Preferences window.

The values that can be shown through this section are:

  • UVx - UV X coord
  • UVy - UV Y coord
  • Against - How much the flame will move when moving into wind
  • Displace - How much a flame will move due to flutter etc
  • Intensity - How bright the flame is
  • Length Fade - How the flame will fade in and out
  • Softness - The softness of the flame edge
  • Color - The color of the flame
  • Alpha - The Alpha value of the flame
  • Normals - The flame normals
  • Bend - How much it can bend
  • Normz - Normalized length value
  • Speed - Speed of any animation
  • Tris - Outlines the flame triangles
  • Move - How much the vertex will move
  • Move Scale - How much a vertex will move with scale
  • Scale - How much a vertex will scale

Info Size

How big the vertex boxes will be.

Info Type

Which info to display

Flame Info Display

Flame Layers

This is the section where we can start to build up a flame. The mesh for a flame can be made from a single layer or multiple layers depending on what detail you need from the flame, each layer has a load of options to control the mesh shape, number of vertices, coloring, positioning, UV mapping, material values and general visual options.

To Add a layer just click the + button at the bottom right of the Layer list, that will add a new Layer. You can reorder the list by dragging and dropping. And you can also quick enable or disable a layer by clicking the Toggle box. The list will show the name of the layer and will also show the name of the material that layer is currently using to render itself. Vulcan allows you to use multiple materials per flame to give you more control over the end result, and if you have a lot of materials it makes it easy to see which one the layer is using in case you need to change any shader values.

To select a Layer to edit just click that layer in the list and the inspector will show its values below the list.

Flame Layer

This is where you can edit each layer of the flame values. There are multiple sections to this part of the Inspector which can be opened and closed as needed. We shall go through each section.

First is the general options.

Name

The name to use for this layer, makes it easier to edit complex flames as it is easy to see which layer you are currently editing either in the Inspector or in the Scene View

Enabled

Whether this layer is enabled or not. This can also be set in the Layer List view

Edit Curve

When editing the Flame layer in the scene view this drop down allows you to pick which curve is shown in the scene to edit. This can also be set at the top of the Scene view when the Vulcan Tools are enabled. Check the Editing a Flame section for more info.

Transform

This section controls the position, size and shape of the flame layer.

Mesh Values

This section controls the type of mesh used for the layer as well as the number of vertices, whether mesh is capped and other various options.

UV

The UV mapping that is used for the layer.

Visuals

Main visual options such as colors, intensity, lighting, softness etc.

Material Shader Values

Shows the most used Shader values for the material for the layer for quicker editing.

Copy & Paste

At the bottom of the Layer section there will be Copy and Paste buttons, this allows you to Copy all the layers values and apply it to any other layer on any other flame. Makes it much easier to reuse layers. The Paste button will only appear if there is a layer in the Copy buffer.

Transform

This section controls the size and position of each flame layer. A lot of these values can also be changed by using the various gizmos provided in the scene view when you select the Vulcan Tools from the Tool Panel.

Offset

Position along the forward axis of the flame for the start of the layer

Position

The X and Y position for the start of the layer

Rotate

Will rotate the layer around the forward axis

Radius

The radius of the layer, this is used with the Profile curve in the Mesh section to control the overall size of the layer

Length

The total length of the layer

Scale X

The Layer can be scaled on the X Axis with this value. There are also scaling options in the shader or the whole flame scaling can be used.

Scale Y

The Layer can be scaled on the Y Axis with this value. There are also scaling options in the shader or the whole flame scaling can be used.

Move Offset

How much the layer will move when the Shader move value is changed. This can be used to move a layer such as shock diamonds along the length of the flame as the Shader move value is increased

Move Scale

How much the layer will scale when the Shader move value is changed.

Mesh Values

Here you can control the look of the mesh that is used for this Layer. You have control over the Profile of the layer as well as the type of mesh that will be used to render the layer. You have options to Cap the start and or the End of a layer if the mesh type allows. You can select which material will be used, how vertices are positioned, how many vertices are used, whether the mesh is double sided or the normals need flipping etc.

Material ID

This slider will say which material the layer uses. If you want to use more than one material for your flame add them as required in the normal way in the Mesh Renderer, the slider will then allow you to pick which material to use. The material name will be shown in the Layer List so you can tell when you have the right one.

Profile

This curves dictates the shape of the flame layer, click the curve to open the edit window and add and move points as you need to get the shape of the curve, the curve is multiplied by the Radius value in the Transform section so generally it is best to set the Radius to a key value such as a nozzle size and then adjust the curve from there, that will make it easier to use the flame on different size nozzles as you will just need to change the Radius value. This curve can also be edited directly in the scene view which makes it easier to get the profile just where you want it.

For all curves in Vulcan you can right click them and copy and paste the curve to any other Vulcan curve, this makes it much easier to reuse curves. Also if you right click you can choose to apply the curve to any other layers, if you click the Apply option a small pop up will appear where you can select the layers to paste the curve to.

Vertex Dist

This allows you to control where the vertices will be placed along the length of the flame. A straight line from 0 to 1 will give the normal linear distribution. But depending on the shape of your curve you maybe not need vertices in one place but need more in another so you can use this to control the placement of vertices where you need them.

Scale

Controls how the mesh is scaled when the Shader scale values are changed. So you can say that you dont want any scaling to appear until after the end of a nozzle and so on. Or if it is say an area near the start of the flame which you dont want to change size at all then you can set the curve to 0 and the scaling will have no effect.

Min Shape Offset

This value and the one below can be used to apply a random noise value to the vertices so you dont have a perfect mesh, keep both values at 1 to not have any noise applied. This will be the low value of the range of the noise applied.

Max Shape Offset

This value and the one below can be used to apply a random noise value to the vertices so you dont have a perfect mesh, keep both values at 1 to not have any noise applied. This will be the high value of the range of the noise applied.

Flip Normals

If you have a layer and want to see the back of it then you can flip the normals with this toggle.

Double Sided

Quite often you will want to see inside and outside of the layer as flames are generally see through, so check this box to have the mesh have back faces as well.

Mesh Type

You have a choice of 3 types of mesh to use for the layer:

  • Round - Cylinder type mesh with start and end cap options
  • Planes - Multiple planes rotate around the forward axis
  • Slices - Cylinder type slices along the length of the layer

Depending on the type of mesh selected you will see different options to set the number of vertices in the mesh as well as any capping options.

Height Segs

How many segments the mesh uses along its length, used with the Vertex Dist curve as well so you have full control over where the vertices appear.

Sides

How many sides the mesh will have.

Num Slices

If a slice mesh type is selected this controls how many slices will be used.

Slice Segs

For each slice this says how many segments along the length to use.

Thickness

How thick each slice is.

Slice Alpha

A curve to control the alpha across each slice useful for fading in and out slices.

Spacing

The Gap between each slice, slices can overlap if you want.

Num Planes

If Plane mesh type is selected this says how many planes to use. Each mesh will be rotated around the middle according to how many planes there are. Use the Rotate value in the Transform section to adjust the orientation of the planes.

Width Segs

With planes this says how many segments across the width of the mesh there should be.

Cap Start

Says whether to add a cap to the start of the mesh.

Cap Flip

Flip the start caps normals.

Cap Start Smooth

Should the start cap smoothly blend into the rest of the mesh.

Smooth Bias

This controls how the normals are calculated for a cap, will bias the normal from the mesh direction to the cap direction

UV Adj

You can control the UV mapping of the start cap with this value.

Cap End

Says whether to add a cap to the end of the mesh.

Cap Flip

Flip the start caps normals.

Cap End Smooth

Should the end cap smoothly blend into the rest of the mesh.

Smooth Bias

This controls how the normals are calculated for a cap, will bias the normal from the mesh direction to the cap direction

UV Adj

You can control the UV mapping of the end cap with this value.

Ring Count

You can have layer duplicated multiple times around a ring by increasing this value. If the value is more than 1 then the two values below will be shown.

Ring Radius

The radius of the ring the meshes will be applied to.

Ring Angle

The start angle for the first mesh in the ring, the spacing of the rest will be determined by the ring count.

UV

These values can be used to control the UV mapping of the Noise and Mask textures to the flame layer. This can useful to adjust the scaling of the noise effect over the layer and the position, tiling and scaling of any mask texture applied. You can also use the Shader Offset and tiling values.

UV Tile X

Changes how the texture map tiles in the X Direction

UV Tile Y

Changes how the texture map tiles in the Y Direction

UV Offset

Adjusts the texture Offset

Visuals

This section gives you control over the Layers coloring, lighting, brightness and other visual aspects of the Layer. This the key area for the settings that will control how your flame looks in your scene. The coloring for the layer is done by a gradient so you can easily vary the color and alpha of the layer along its length. Note the shader also has a Color value as well which will tint these colors as well for more control. You can also control how much Rim lighting is applied via a max value and a control curve, and the same for the Intensity.

Speed

This controls the speed of any animation for this layer. It allows you to vary from layer to layer the look and feel of any movement applied to the flame. The shader also has a value which can be used to adjust the layers using that material.

Soften

Vulcan has a system to try and soften the edge of flame layers so they look more natural. Increasing this value will increase the softness and it works with the Softness curve below. Again the shader also has a value to control the softness on top of this value as well. A value of 0 will not apply any softening.

Softness

The curve can be used to control how much softness is applied along the length of the flame layer.

Intensity

How bright this layer is, this is like the intensity value of an HDR color, higher values will give brighter looking flames. Its value is also controlled by the curve below and a Shader based value.

Intensity Crv

You can control the intensity along the length of the flame layer with this curve. So generally you would have a value of 1 at the start of the flame and reduce it to 0 at the end. Note you can also use the Alpha value in the Color setting below to adjust the brightness as well.

Cap Start Intensity

If your flame layer has a start cap this value can be used to control its intensity.

Cap End Intensity

If your flame layer has a start cap this value can be used to control its intensity.

Color

The colors to use for the layer. This is a Gradient so you can vary the colors along the length of the mesh in anyway you want. You can also adjust the flame alpha here as well. The color values will be used along with the Intensity values and the Shader color and brightness values for the final overall look to the flame. If you right click the Gradient you can copy and paste the color values, you can also choose to apply the colors to selected layers.

Rim Amount

The Shader for the flames uses a Rim lighting system to add the general glow you get towards the edge of flames or the change in color that can be seen. You can control how much of that rim lighting is applied to this layer with this value and it is used with the curve the get the final value.

Rim Crv

This curves controls how much rim lighting is applied along the length of the flame layer.

Fade Offset

The Flame Shader has a Fade value which will cause the flame to fade out but you can control per layer at which point that layer will fade by changing this value. This means you can say that a shock diamond or an inner cone will fade out before an outer shell. This gives you control over what parts of a flame will appear and disappear and the order they do so.

Against Factor

If the flame is moving against its forward direction then a flame will compress a little, this value controls how much the layer will compress. A low value will mean very little compression, a higher vale will mean more. This will require a helper script on the Flame object to calculate the relative velocity of the flame etc. An example script is included in the asset.

Material Shader Values

To make it easier to adjust the final look of the layer and to save trying to find the right material for the layer to edit the shader values the current Material used for the layer has its commonly changed values displayed in this section for faster tweaking. These are the same values that will be found in the Material and so changing these values will change all flames using the same material. So it is suggested that each flame has its own material to avoid changing already made flames in your project.

Color

Color to tint the flame, the main color for a flame comes from the layer colors but this value can be used to tint the flame. It is an HDR value so you can also increase the intensity of the color if needed.

Brightness

Main Brightness of the flame color.

Intensity

Overall final Intensity of the flame.

Flame Level

Changes the transparency of the flame.

Soft Edges

Controls final softness of the flame. This is the side on softness control, there is also a value for softness looking down the length of the flame.

Soft Edges 1

Softness when looking down the length of the flame.

Soften Factor

How the two softness values are blended together, adjust to get smoother changes as the view angle rotates.

Scroll Speed

Final control over the speed of any scrolling texture animation.

Flutter

Final control over how much the flame flutters.

Flutter Speed

Final control over the speed of any fluttering.

Pulse

Final control over how much the flame pulses.

Pulse Speed

Final control over how fast the flame pulses.

Flipbook Speed

You can use a texture for the main color of the flame and if you want this can be a flip book animation. You can set how many rows and columns in the main material section. This value controls the playback speed of the flip book animation.

Spread

When the collision shader is being used this controls how much a flame will spread on impact.

Detect Dist

The blending distance for collisions, this controls how far back along the flame a collision effect is seen.

Plane Offset

When a collision shader is used this will offset the flame from the collision plane or sphere when a collision happens.

Image

Flame Blend Map

The flame shader can use a mask texture to control the brightness of a flame, this uses the r channel of a texture to adjust the lighting. This will allow you to add detail or subtle effects to the lighting of the flame. To help you make your Blend Map Vulcan includes a simple Blend Map creator.

To make a Blend Map go to the Asset menu and then choose Vulcan/Blend Map, this will add a new asset to your project which will hold the values used to create the map.

If you select the newly created Blend Map asset in the project the Inspector will show the current map settings. You can adjust those and bake out the map to a normal Unity texture which you can then select in your Flame Material.

In a Blend Map the brighter the pixel in the map the brighter the flame will be that uses that area of the map. You can off course use any software to make these maps. Only the red channel is currently used by the shader.

Width

The width of the Blend Map texture.

Height

The height of the Blend Map texture.

Fill

The fill gradient is the value that the map will be filled with.

Curve

The curve allows you to offset the gradient across the width of the map, this allows you to make more interesting maps.

Save Map

Clicking this button will save or update the texture with the new values. The texture will be saved in the same folder as the Blend Map asset used to create it and will use the same name.

It is likely more options will be added to this if needed, so please let me know if you need anything added.

Image

Flame Noise Map

The Noise Map is used by Vulcan to add various effects to the flame shader. It is mainly used to add the flutter movement to the flame as well as the pulse movement. The noise is also used to add variation to the brightness, color and transparency of the flame.

The Red, Green and Blue channel control the vertex movements on the X, Y and Z axis so you can have different styles of movement for each axis if you need it. The alpha channel is used to control the lighting and coloring effects.

You should experiment with the various noise values to see what effect they have, it is pretty powerful and has a big effect on the end look of the flame.

The noise textures generated by this system are tile able and that is important to avoid any seams in the final flames. If you do want to use your own textures they should be tile able to get the best results.

To add a Noise Map asset to your project go to the Assets/Vulcan menu and choose Noise Map, a new map will be created in the current folder.

Width

Width of the final noise map.

Height

Height of the final noise map.

Edit Layer

Use this drop down to pick which layer of the noise texture you want to change the values for.

Enabled

Is the layer enabled or not.

Seamless

Make the noise seamless, this should stay on but it is there in case you need noise textures for other things.

Seed

The seed value for the noise.

Frequency X

How quickly the noise changes in the X direction.

Frequency Y

How quickly the noise changes in the Y direction.

Octaves

How many layers the noise will have.

Persistence

How quickly the noise values change.

Lacunarity

How the frequency of the noise changes between octaves.

Power

How quickly noise vales will falloff.

Inverted

Inverts the final noise texture.

Range

Changes the range of the noise values.

Remap

Remaps the final noise to fit in the range of the remap values.

Save Map

This will save the noise map to a texture in the same folder as the Noise Map asset and will use the same name.

Image

Gradient Map

Although Vulcan does not directly make use of Gradient maps the Gradient map system is included in case it proves useful for anyone. All it does is take a Gradient of colors and alpha and makes a simple texture from it which can then be used in a Shader.

To add a Gradient Map asset to your project go to the Assets/Vulcan menu and choose Gradient Map, a new map will be created in the current folder.

Width

Width of the gradient texture.

Height

Height of the gradient texture.

Fill

The gradient used to fill the texture.

Save Map

This will save the map to the project in the same folder as the Gradient map asset and using the same name.

Image

Flame Library Window

The Flame Library Window can be found in the Window/Vulcan menu. When first opened it will scan the project for any Flame prefabs and will generate Thumbnails for each one found, this can take a while if you have a large project, a task bar will show the progress. Once complete the window will open and it will show you a scrollable thumbnail list of all the flames.

You can now select a Flame object in you scene or select multiple flame objects and if you then click a thumbnail its values will be applied to all the selected GameObjects that have Flame components on them. If the selected object(s) do not have Flame components then just the mesh values will be changed to use the selected flame mesh.

It maybe that the flames do not show up against the current background color, if so you can change the background color value and then click 'Refresh' the redo the thumbnails with that new color.

By default when applying the flame values to the scene flame objects it will also update those objects materials to the ones used by the flame prefab. If you don't want the current material replaced uncheck the 'Set Material' box.

Image

Editing a Flame

As well as being able to set all the values for the flame in the Inspector you can also change a lot of the values in the Scene View itself. Vulcan has various Tool modes and Gizmos to aid in editing your flame appearance.

If you have a Flame object selected in the scene then the Unity Tool Selector will show Two new options at the Bottom. The top flame icon will set the tool mode to Transform, this will allow you to change a layer positions, offset and rotation.

The second Flame icon will allow you to change the profile of the layer as well as its size.

In the Vulcan tool modes you will see small Blue Spheres, each sphere is a flame layer, if you click the sphere that layer will be selected for editing in the scene and in the Inspector. When you have a layer selected the scene view will show you the general shape of the layer with rings along the length of the flame.

You can alter the number of rings that are shown and the line thickness by the options at the top of the scene view. Also in that section you can select which curve to display and edit in the scene view from the Crv dropdown, and you can directly select a flame layer from the layer dropdown.

In Flame Transform tool will also show a position handle at the start of the flame this can be used to change the start or Offset value for the layer as well as its position in the XY plane. The red sphere gizmo at the end of the flame can be dragged to change the length of the layer. In the middle of the flame there will be a White ring you can drag the edge of that ring to change the flames rotation value.

In the second tool mode you will again see the blue spheres to allow you to click and select a layer. The white ring in the middle of the flame will now have a pair of white spheres which if you drag will change the radius of the flame layer. You will also see a thick orange line this is the profile or shape of the flame layer. The white spheres can be dragged to change the shape of the layer. Holding down X or Y will constrain the movement to those axis so you more easily adjust the shape. The boxes mid way between the Profile key gizmos can be clicked to add a new control point to the curve so you further fine tune the shape of the flame layer. Editing the curve in the scene view is easier than doing so in the inspector as you can directly see how the curve relates to the final mesh shape. If you press the Delete key the current profile point will be removed. There is full undo so if you delete something by mistake Undo will bring it back.

If you have a curve selected in the Inspector or in the top drop down you will see that curve appear at again there will be gizmos you can drag to change the values and you can add and remove control points in the same way as the profile curve.

Image

Blendshape Workshop

Sometimes a single flame shape even with scaling and animation is not enough. So we have added the option to bake different flames to Blendshapes so you can then easily change between them at runtime by just changing the blend weights. You can add any number of Blends to a mesh and each blend can be made up of multiple targets.

To use the Blendshape workshop you must use the same Flame, though you can copy it but you can not change the number of active layers or the mesh detail or anything that will change the number of vertices in the mesh. Also note only the vertex positions will be baked to the blendshape so it is not currently possible to have different colors etc. But you can change those in the material when you change the blendshape weights if you need to.

To use the Blendshape Workshop create and empty GameObject and add the Flame Blendshape Workshop component to it. Next select the the base flame object. This will be the mesh you will see when no blendshapes are applied. You can now add a Blendshape channel by clicking the + button in the Channels section.

Select a name for the Blendshape, this is what it will be called in the SkinnedMeshRenderer so choose something that makes sense. Now you start adding the new flame shapes, these would be flames you have already made in the scene to represent the blendshape you want and any intermediate shapes in that blend. Add as many frames as you need and for each frame select the Flame object and set its weight.

Once you have it all setup as you need click the 'Save Mesh to Project' button. This will bake out all the data to a new mesh asset in the project. You can then add that to a skinned mesh renderer with Flame materials applied and away you go. This is perfect for doing things like expanding flame blooms due to altitude etc.

Note if you dont want to see a layer in the mesh then dont disable it or delete that layer but just set the scale or length of the layer to zero so you can no longer see it but it will not mess up the vertex or tri count and break the blendshape.

Image

Shaders

Vulcan comes with two shaders for the Flames. First is the core Flame shader which provides all the functionality except for collisions, and the second is the same but adds the options to have a Plane and or Sphere collider for the flame to hit. If your flame doesn't need to hit anything then just use the base Flame shader otherwise use the Collision version.

The shader has a fair few options to control the final look and feel of the flame. We shall go through what each value does here. All of the values can be changed in the usual way at runtime. There are four sections to the Shader params, Lighting for the general colors, intensity etc. Textures where you can change the main texture, mask and noise options. Animation for items such as flutter, pulsing and other deformations and transforms to the flame and if you have are using the Collision version of the shader there is there final section for setting the various options for that.

Lighting

Vulcan comes with two shaders for the Flames. First is the core Flame shader which provides all the functionality except for collisions, and the second is the same but adds the options to have a Plane and or Sphere collider for the flame to hit. If your flame doesn't need to hit anything then just use the base Flame shader otherwise use the Collision version.

The shader has a fair few options to control the final look and feel of the flame. We shall go through what each value does here. All of the values can be changed in the usual way at runtime.

Color

Color to tint the flame, the main color for a flame comes from the layer colors but this value can be used to tint the flame. It is an HDR value so you can also increase the intensity of the color if needed.

Rim Color

The rim or edge color for the flame, this is an HDR color.

Rim Power

The Rim lighting power or falloff.

Flame Level

Changes the transparency of the flame.

Brightness

Main Brightness of the flame color.

Intensity

Overall final Intensity of the flame.

Length Fade

The flame can be faded out using the Blend value or this value can be used to fade along the length of a flame, each flame layer can control at which point it starts to fade so you have control over the order and positioning of the fade process.

Blend

Fades out the whole flame, useful for crossfading between flames etc.

Soften Edges

Controls final softness of the flame. This is the side on softness control, there is also a value for softness looking down the length of the flame.

Soften Edges 1

Softness when looking down the length of the flame.

Soften Factor

How the two softness values are blended together, adjust to get smoother changes as the view angle rotates.

Smoothness

Normal smoothness value you wont see much difference but is included incase you use the flame for something different.

Metallic

Normal metallic value, again like the smoothness you likely wont see much effect if you have bright flames.

Textures

In the Texture section you can pick the base color map as well as the Noise and Mask textures and set their tiling values. You will also find the FlipBook animation options and the scroll speeds.

Albedo

The color texture to use for the flame, this can be a flipbook texture that can be played back.

Tiling and Offset

The usual tiling and offset values for the texture, also the noise and mask texture have these values so you can further control the look of the flame.

Mask

Mask texture, the red channel is used to vary the lighting and color of the flame.

Noise

The main noise texture for the flame, the RGB channels are used in by the flutter and pulse system and the A channel for adding variation to the lighting etc.

FlipBook Speed

You can use a texture for the main color of the flame and if you want this can be a flip book animation. You can set how many rows and columns in the main material section. This value controls the playback speed of the flip book animation

FlipBook X

If you use a flipbook texture for the Albedo you set how many columns the animation has here.

FlipBook Y

If you use a flipbook texture for the Albedo you set how many rows the animation has here.

Scroll

Final control over the speed of any scrolling texture animation.

Scroll X

Speed of the texture scrolling in the x direction.

Animation

The Animation section allows you to control the movement and shape of the flame.

Flutter

Final control over how much the flame flutters.

Flutter Speed

Final control over the speed of any fluttering.

Pulse

Final control over how much the flame pulses

Pulse Speed

Final control over how fast the flame pulses.

Angle

How much the bend the flame in the X plane, this value should be set from script and calculated based on the relative movement of the flame, there is an example script in the demo scene for how to do that.

Angle Y

How much to bend the flame in the Y plane. If nothing else a small value here will give the impression of the flame raising up due to heat if the flame is on its side, again it is best to calc this value in a script and set it to get realistic behaviour from the flame.

Angle Power

Controls how the bend value will fall off from the end of the flame, allows you to limit the bend to the just the tip or spread over the whole flame.

Against

This value allows you to flatten the flame as if it were moving into a head wind.

Against Scale

The size of the against effect.

Taper X

The flame can be tapered in the X direction

Taper Y

The flame can be tapered in the Y direction

Move

Will move the flame, again each flame has control over how this value is applied and how much so you can have just parts of the flame move when this value is changed, useful for moving shock diamonds etc along a flame.

Scale

Scaling for the flame.

Collisions

The final section has the options for the collision system. You will need to have the Vulcan Collision shader selected to see these options.

Sphere Pos

The position of the sphere in the flames local space.

Sphere Radius

The radius of the collision sphere.

Sphere Offset

When a collision shader is used this will offset the flame from the collision sphere when a collision happens.

Plane Pos

The position of the plane in the local space of the flame object.

Plane Normal

The up vector of the plane in the flame local space.

Plane Offset

When a collision shader is used this will offset the flame from the collision plane when a collision happens.

Spread

When the collision shader is being used this controls how much a flame will spread on impact.

Detect Dist

The blending distance for collisions, this controls how far back along the flame a collision effect is seen.

Image

Vulcan Settings

Vulcan has a few values which you can alter if you need different colors for the various Gizmos and other options. You can access the settings through the Unity Preferences window and you will find a Vulcan option there.

Main Gizmo Color

Main color used for the Gizmos, used for the size and rotate ring and curve handles.

Secondary Gizmo Color

Used for lesser gizmos such as the flame shape rings.

Third Gizmo Color

Used for the profile curve

Thickness

The line thickness to use for the gizmos, can make it easier to see the lines against a complex flame. Can also be set in the scene view.

Shape Rings

How many rings to use to show the shape of the flame layer. Can also be set in the scene view

Show Move Handles

Disable the move handles if they get in the way.

Preview Color

The background color to use for the Flame Library thumbnails, can also be set in the Flame Library window.

Set Material

When using the Flame Library window you can say whether the material for the selected flame is also applied to the object in the scene or whether it will use the material already present on the object.

Tri Color Info

The color to show the flame mesh in if the tri info option is selected, also used to show the normals color.

Low Value Color

For the info display this is the color to use for low values.

High Value Color

For the info display this is the color to use for high values.

Edit Curve Color

The color for the edit curve in the scene view.

Label Color

The color for the flame labels.

Font Size

The font size to use for the flame labels.

Image

Helper Script

In the demo scene script folder you will find a simple example script called Flame Collision. This is a very basic example of how you can control the bend of a flame when it moves by changing the Angle values of the shaders, as well as how to set the collision info. To use it with your own flames just add the Flame Collision component to your flame gameobject and set the values. It is just a starting point.

Plane

The plane object you want the flame to collide with.

Sphere

The sphere object to collide with

Sphere Radius

The radius of the sphere.

Max Vel

The velocity that the max bend will happen at.

Angle

The max bend that will happen at max velocity.

Bend Damp

How quickly the flame reacts to changes in angle.

Image

Videos

Image

Keys

The Keys used by Vulcan.

X - When editing curves in the Scene view holding X will limit any movement to the X or Time axis.

Y - When editing curves in the Scene view Holding Y will limit any movement to the Y or Value axis.

Delete - When editing a curve in the scene view pressing delete will delete the curve key currently selected.

Image

Release Notes

Version 1.0

  • Initial Release
Image

Contact Us

If you have any questions about Vulcan then please Email Me and I will get back to you. If you are using Vulcan and have found a bug or something not working quite right then please submit a support ticket at  Support Desk Link

If you have an idea for a feature or an improvement please also get in touch, and we also have a Discord channel at Discord Link

If you like this asset please check out our other assets on the AssetStore.

You can find all my various website and media sites in my LinkTree