|
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 |
|
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 |
|
|
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;
|
|