Reference Video 1

 

Reference Video 2

 

This is the first attempt at the RSL shader. I used several planes stacked together and created the shader.

 
RSL Code:

surface
flame(float Kd = 1,
freq = 6,
radius = 10,
blur = 0.1;
color top = color(1,0,0),
lower = color(1,1,0);
point center = 0;
string spacename = "shader")
{
point p = transform(spacename, P);
color surfcolor = mix(top, lower, t);

if(1 - t > noise(p * freq))
Oi = Os;
else
Oi = 0;
float r = radius + (noise(p * 7) - 0.5) * 0.2;
float dist = distance(transform("object",P),
transform("object",center));

Oi = Oi * (1 - smoothstep(r - blur, r + blur, dist));

normal n = normalize(N);
color diffusecolor = diffuse(n) * Kd;
Ci = Oi * Cs * diffusecolor * surfcolor

 
 
Final Displacement Shader
 
Displacement Shader Code: .

displacement
flame_displacement(float Km = 0.1,
freq = 5,
amp = 2.5,
hump2freq = 5,
hump2amp = 0.5,
start = 0,
end = 1;
string spacename = "object",
spacename2 = "object")
{
float hump = 0;
float hump2 = 0;
vector diff = normalize(N) - normalize(Ng);
normal n = normalize(N);

hump = (noise(transform(spacename, P) * freq) - 0.5) * amp;
hump2 = (noise(transform(spacename2, P) * hump2freq) - 0.5) * hump2amp;

hump += cos(hump + freq);

P = P - n * ((hump * smoothstep(0, 1, t)) + hump2) * Km;

N = normalize(calculatenormal(P)) + diff

 
 
Fire Shader
 
Fire Shader Code:

surface
flame_shader_glow(float Kfb = 1,
freq = 5,
edgewidth = 0.2,
base = 0.2,
periodoffset = 1,
periodscale = 1;
color color1 = (0.486,0.964,0.929),
color2 = (0.666,0.976,0.952),
color3 = (0.984,0.945,0.486),
color4 = (0.960,0.478,0.219),
color5 = (0.980,0.160,0.160),
color6 = (1.0,0.301,0.086),
color7 = (1,0.8,0),
color8 = (1,0.8,0);
string spacename = "flameShader")
{
normal n = normalize(N);
normal nf = faceforward(n,I);

point p = transform(spacename, P);

vector i = normalize(-I);
float period = 1 - nf.i;

color surfcolor = spline("catmull-rom",t,color1,color2,color3,color4,color5,color6,color7,color8);
float rim = (period * periodscale + periodoffset) * 2;

if (t < base)
Oi = smoothstep(0,base,t);
else
Oi = 1;

Oi *= smoothstep(t - edgewidth, t + edgewidth, noise(p * freq) * .5);

Ci = Kfb * surfcolor * rim * Oi;

 
 
Final Composite, using Cylinder object as base geometry
 
 
welcome to my web site. all work copyright © 2010 josh triplett