visartz
04-06-2009, 06:05 PM
i want to render it in MAYA RMS with ENV LIGHT ON but it renders always black... *grrr*... someone know what i do/did wrong?
/************************************************** ************************************************** *****
* *
* VORONOI BAUMSHADER (INKL. UMGEBAUTE FILTER [s,t]) *
* *
* Code Inhalt: *
* *
* I. Includes und defines *
* *
* 1. Umgebaute Turbulence Funktion (turbulence_2d) *
* 2. Umgebaute "fractional Brown motion" Funktion (fBm_2d) *
* 3. Umgebaute Voronoi Funktion (voronoi_f1f2_2d) *
* 4. Shader *
* *
************************************************** ************************************************** *****/
/************************************************** *********************
* I. Includes und defines *
************************************************** *********************/
#include "noises.h"
#include "filterwidth.h"
#define snoisexy(x,y) (2 * (float noise(x,y)) - 1)
#define filteredsnoisexy(a,b,width) (snoisexy(a,b) * (1-smoothstep (0.2,0.75,width)))
#define normalizeRange(mi,mx,value) (value-mi)/(mx-mi)
/************************************************** *********************
* 1. Umgebaute Turbulence Funktion (turbulence_2d) *
************************************************** *********************/
float turbulence_2d ( float ss; float tt; float dS; uniform float octaves, lacunarity, gain) {
varying float sum = 0;
varying float sss = ss;
varying float ttt = tt;
varying float fw = dS;
uniform float amp = 1;
uniform float i;
for (i = 0; i < octaves; i += 1) {
sum += amp * filteredabs(filteredsnoisexy(sss,ttt,fw), 2*fw);
amp *= gain;
sss *= lacunarity; ttt *= lacunarity;
fw *= lacunarity;
}
return sum;
}
/************************************************** *********************
* 2. Umgebaute "fractional Brown motion" Funktion (fBm_2d) *
************************************************** *********************/
float fBm_2d(float ss, tt; uniform float octaves, lacunarity, gain) {
varying float sum = 0, amp = 1;
varying float sss = ss, ttt = tt;
uniform float i;
for(i=0; i<octaves; i += 1) {
sum += amp * snoisexy(sss, ttt);
amp *= gain;
ttt *= lacunarity;
sss *= lacunarity;
}
return sum;
}
/************************************************** *********************
* 3. Umgebaute Voronoi Funktion (voronoi_f1f2_2d) *
************************************************** *********************/
void voronoi_f1f2_2d (float ss, tt; float jitter; output float f1, spos1, tpos1; output float f2, spos2, tpos2; ) {
float sthiscell = floor(ss)+0.5, tthiscell = floor(tt)+0.5;
f1 = f2 = 1000;
uniform float i, j;
for (i = -1; i <= 1; i += 1) {
float stestcell = sthiscell + i;
for (j = -1; j <= 1; j += 1) {
float ttestcell = tthiscell + j;
float spos = stestcell +
jitter * (cellnoise(stestcell, ttestcell) - 0.5);
float tpos = ttestcell +
jitter * (cellnoise(stestcell+23, ttestcell-87) - 0.5);
float soffset = spos - ss;
float toffset = tpos - tt;
float dist = soffset*soffset + toffset*toffset;
if (dist < f1) {
f2 = f1; spos2 = spos1; tpos2 = tpos1;
f1 = dist; spos1 = spos; tpos1 = tpos;
} else if (dist < f2) {
f2 = dist;
spos2 = spos; tpos2 = tpos;
}
}
}
f1 = sqrt(f1); f2 = sqrt(f2);
}
/************************************************** *********************
* 4. Shader *
************************************************** *********************/
surface bark (
float Noise = 1.0;
float Barktiles_U = 4.0;
float Barktiles_V = 10.0;
float Gap_Range = 6.0;
float Gap_Roughness = 4.0;
float Gap_Gain = 0.6;
float Gap_Intensity = 0.02;
float Barkdetails_Layers = 10.0;
float Barkdetails_Layers_Range = 6.0;
float Barkdetails_Layers_Roughness = 2.0;
float Barkdetails_Layers_Gain = 0.5;
float Barkdetails_Layers_Intensity = 1.0;
float Barkdetails_Layerwidth = 1.957;
float Displacement = 0.08;
color Inner_Color = color(0.7, 0.5, 0.3);
color Outer_Color = color(0.5, 0.3, 0.1);
float If_Weld = 0;
float Weld_Distance_1 = 0.4;
float Weld_Distance_2 = 0.4;
float If_Trunk = 0;
float Trunk_Displacement_Base = 0.08;
float Trunk_Displacement_Top = 0;
){
float DisplaceInt = Displacement;
float ss = s;
float tt = t;
float ssmod_fbm = mod(ss * Barktiles_U, 2);
float ttmod_fbm = mod(tt * Barktiles_V, 2);
vector NN = normalize(N);
// Variablen für Voronoi Func
float f1, spos1, tpos1;
float f2, spos2, tpos2;
float diff;
// s und t mit fBm Filter überlagern
float voronoi_ss_fBm = (ss) + (Gap_Intensity * fBm_2d(ss, tt, Gap_Range, Gap_Roughness, Gap_Gain));
float voronoi_tt_fBm = (tt) + (Gap_Intensity * fBm_2d(ss, tt, Gap_Range, Gap_Roughness, Gap_Gain));
// Voronoi Pattern erzeugen
voronoi_f1f2_2d(voronoi_ss_fBm * Barktiles_U, voronoi_tt_fBm * Barktiles_V, Noise, f1, spos1, tpos1, f2, spos2, tpos2);
// Weiche Differenz der Voronoi Pattern berechnen
//float diff = 1 - smoothstep(0.0, 0.1, f2-f1) - smoothstep(0.9, 1.0, f2-f1);
diff = 1- (f2-f1);
// Variablen für FOR Schleife deklarieren
float amp = 1.0; // <- Amplitude (wird kleiner)
float i; // <- Schleifen-Counter
float hump = 0; // <- Sammler für entgültige Displacement- und Color-Daten
// For Schleife zur prozedualen Berechnung der weiteren Noise-Filter
for(i=0; i < Barkdetails_Layers; i += 1) {
voronoi_ss_fBm = (ss) + (Gap_Intensity * fBm_2d(ss, tt, Gap_Range, Gap_Roughness, Gap_Gain));
voronoi_tt_fBm = (tt) + (Gap_Intensity * fBm_2d(ss, tt, Gap_Range, Gap_Roughness, Gap_Gain));
voronoi_f1f2_2d(voronoi_ss_fBm * Barktiles_U, voronoi_tt_fBm * Barktiles_V, Noise, f1, spos1, tpos1, f2, spos2, tpos2);
diff = 1 - (f2-f1);
hump += amp * (1-(smoothstep(0.77,0.95,diff)) + turbulence_2d(ss, tt, filterwidth(s), Barkdetails_Layers_Range, Barkdetails_Layers_Roughness, Barkdetails_Layers_Gain));
ss = ss * Barkdetails_Layerwidth;
tt = tt * Barkdetails_Layerwidth;
amp *= 0.6;
}
float normalHump = hump / length(vtransform("object",NN));
if(If_Trunk > 0) {
DisplaceInt = mix(Trunk_Displacement_Base, Trunk_Displacement_Top, s);
}
// Punkt P und Normal N an hump anpassen (Displacement)
P = P + normalize(N) * (DisplaceInt * normalHump);
N = calculatenormal(P);
normal Nf = normalize(faceforward(N,I));
hump = normalizeRange(0.712768, 2.883801, hump);
// Ci = (mix(Inner_Color, Outer_Color, hump) * diffuse(faceforward(normalize(N), I)));
// color cimix = mix(Inner_Color, Outer_Color, hump) * diffuse(faceforward(normalize(N), I));
color cimix = mix(Inner_Color, Outer_Color, hump) * diffuse(faceforward(normalize(N), I));
if(If_Weld > 0) {
float gradient = smoothstep(0, Weld_Distance_1, s) * (1-smoothstep((1-Weld_Distance_2), 1, s));
Oi = gradient;
Ci = Oi * cimix;
}else{
Oi = Os;
Ci = cimix;
}
//Ci = mix(Cs, color(0,0,1), hump) * diffuse(faceforward(normalize(N), I));
}
/************************************************** ************************************************** *****
* *
* VORONOI BAUMSHADER (INKL. UMGEBAUTE FILTER [s,t]) *
* *
* Code Inhalt: *
* *
* I. Includes und defines *
* *
* 1. Umgebaute Turbulence Funktion (turbulence_2d) *
* 2. Umgebaute "fractional Brown motion" Funktion (fBm_2d) *
* 3. Umgebaute Voronoi Funktion (voronoi_f1f2_2d) *
* 4. Shader *
* *
************************************************** ************************************************** *****/
/************************************************** *********************
* I. Includes und defines *
************************************************** *********************/
#include "noises.h"
#include "filterwidth.h"
#define snoisexy(x,y) (2 * (float noise(x,y)) - 1)
#define filteredsnoisexy(a,b,width) (snoisexy(a,b) * (1-smoothstep (0.2,0.75,width)))
#define normalizeRange(mi,mx,value) (value-mi)/(mx-mi)
/************************************************** *********************
* 1. Umgebaute Turbulence Funktion (turbulence_2d) *
************************************************** *********************/
float turbulence_2d ( float ss; float tt; float dS; uniform float octaves, lacunarity, gain) {
varying float sum = 0;
varying float sss = ss;
varying float ttt = tt;
varying float fw = dS;
uniform float amp = 1;
uniform float i;
for (i = 0; i < octaves; i += 1) {
sum += amp * filteredabs(filteredsnoisexy(sss,ttt,fw), 2*fw);
amp *= gain;
sss *= lacunarity; ttt *= lacunarity;
fw *= lacunarity;
}
return sum;
}
/************************************************** *********************
* 2. Umgebaute "fractional Brown motion" Funktion (fBm_2d) *
************************************************** *********************/
float fBm_2d(float ss, tt; uniform float octaves, lacunarity, gain) {
varying float sum = 0, amp = 1;
varying float sss = ss, ttt = tt;
uniform float i;
for(i=0; i<octaves; i += 1) {
sum += amp * snoisexy(sss, ttt);
amp *= gain;
ttt *= lacunarity;
sss *= lacunarity;
}
return sum;
}
/************************************************** *********************
* 3. Umgebaute Voronoi Funktion (voronoi_f1f2_2d) *
************************************************** *********************/
void voronoi_f1f2_2d (float ss, tt; float jitter; output float f1, spos1, tpos1; output float f2, spos2, tpos2; ) {
float sthiscell = floor(ss)+0.5, tthiscell = floor(tt)+0.5;
f1 = f2 = 1000;
uniform float i, j;
for (i = -1; i <= 1; i += 1) {
float stestcell = sthiscell + i;
for (j = -1; j <= 1; j += 1) {
float ttestcell = tthiscell + j;
float spos = stestcell +
jitter * (cellnoise(stestcell, ttestcell) - 0.5);
float tpos = ttestcell +
jitter * (cellnoise(stestcell+23, ttestcell-87) - 0.5);
float soffset = spos - ss;
float toffset = tpos - tt;
float dist = soffset*soffset + toffset*toffset;
if (dist < f1) {
f2 = f1; spos2 = spos1; tpos2 = tpos1;
f1 = dist; spos1 = spos; tpos1 = tpos;
} else if (dist < f2) {
f2 = dist;
spos2 = spos; tpos2 = tpos;
}
}
}
f1 = sqrt(f1); f2 = sqrt(f2);
}
/************************************************** *********************
* 4. Shader *
************************************************** *********************/
surface bark (
float Noise = 1.0;
float Barktiles_U = 4.0;
float Barktiles_V = 10.0;
float Gap_Range = 6.0;
float Gap_Roughness = 4.0;
float Gap_Gain = 0.6;
float Gap_Intensity = 0.02;
float Barkdetails_Layers = 10.0;
float Barkdetails_Layers_Range = 6.0;
float Barkdetails_Layers_Roughness = 2.0;
float Barkdetails_Layers_Gain = 0.5;
float Barkdetails_Layers_Intensity = 1.0;
float Barkdetails_Layerwidth = 1.957;
float Displacement = 0.08;
color Inner_Color = color(0.7, 0.5, 0.3);
color Outer_Color = color(0.5, 0.3, 0.1);
float If_Weld = 0;
float Weld_Distance_1 = 0.4;
float Weld_Distance_2 = 0.4;
float If_Trunk = 0;
float Trunk_Displacement_Base = 0.08;
float Trunk_Displacement_Top = 0;
){
float DisplaceInt = Displacement;
float ss = s;
float tt = t;
float ssmod_fbm = mod(ss * Barktiles_U, 2);
float ttmod_fbm = mod(tt * Barktiles_V, 2);
vector NN = normalize(N);
// Variablen für Voronoi Func
float f1, spos1, tpos1;
float f2, spos2, tpos2;
float diff;
// s und t mit fBm Filter überlagern
float voronoi_ss_fBm = (ss) + (Gap_Intensity * fBm_2d(ss, tt, Gap_Range, Gap_Roughness, Gap_Gain));
float voronoi_tt_fBm = (tt) + (Gap_Intensity * fBm_2d(ss, tt, Gap_Range, Gap_Roughness, Gap_Gain));
// Voronoi Pattern erzeugen
voronoi_f1f2_2d(voronoi_ss_fBm * Barktiles_U, voronoi_tt_fBm * Barktiles_V, Noise, f1, spos1, tpos1, f2, spos2, tpos2);
// Weiche Differenz der Voronoi Pattern berechnen
//float diff = 1 - smoothstep(0.0, 0.1, f2-f1) - smoothstep(0.9, 1.0, f2-f1);
diff = 1- (f2-f1);
// Variablen für FOR Schleife deklarieren
float amp = 1.0; // <- Amplitude (wird kleiner)
float i; // <- Schleifen-Counter
float hump = 0; // <- Sammler für entgültige Displacement- und Color-Daten
// For Schleife zur prozedualen Berechnung der weiteren Noise-Filter
for(i=0; i < Barkdetails_Layers; i += 1) {
voronoi_ss_fBm = (ss) + (Gap_Intensity * fBm_2d(ss, tt, Gap_Range, Gap_Roughness, Gap_Gain));
voronoi_tt_fBm = (tt) + (Gap_Intensity * fBm_2d(ss, tt, Gap_Range, Gap_Roughness, Gap_Gain));
voronoi_f1f2_2d(voronoi_ss_fBm * Barktiles_U, voronoi_tt_fBm * Barktiles_V, Noise, f1, spos1, tpos1, f2, spos2, tpos2);
diff = 1 - (f2-f1);
hump += amp * (1-(smoothstep(0.77,0.95,diff)) + turbulence_2d(ss, tt, filterwidth(s), Barkdetails_Layers_Range, Barkdetails_Layers_Roughness, Barkdetails_Layers_Gain));
ss = ss * Barkdetails_Layerwidth;
tt = tt * Barkdetails_Layerwidth;
amp *= 0.6;
}
float normalHump = hump / length(vtransform("object",NN));
if(If_Trunk > 0) {
DisplaceInt = mix(Trunk_Displacement_Base, Trunk_Displacement_Top, s);
}
// Punkt P und Normal N an hump anpassen (Displacement)
P = P + normalize(N) * (DisplaceInt * normalHump);
N = calculatenormal(P);
normal Nf = normalize(faceforward(N,I));
hump = normalizeRange(0.712768, 2.883801, hump);
// Ci = (mix(Inner_Color, Outer_Color, hump) * diffuse(faceforward(normalize(N), I)));
// color cimix = mix(Inner_Color, Outer_Color, hump) * diffuse(faceforward(normalize(N), I));
color cimix = mix(Inner_Color, Outer_Color, hump) * diffuse(faceforward(normalize(N), I));
if(If_Weld > 0) {
float gradient = smoothstep(0, Weld_Distance_1, s) * (1-smoothstep((1-Weld_Distance_2), 1, s));
Oi = gradient;
Ci = Oi * cimix;
}else{
Oi = Os;
Ci = cimix;
}
//Ci = mix(Cs, color(0,0,1), hump) * diffuse(faceforward(normalize(N), I));
}
