Carsten Bauer marble cal file

Hello all
Time ago I've downloaded from RadZilla Project web pages marvellous Radiance
Materials wrote by Cartsen Bauer
(patterns and cal files).
Only now I've found the time to check and test them, and even if they are
all incredibles,
I think that marbles are...almost real.
I'm trying to study them to find the way to manage them to have different
colors etc,
and I post this 2 questions hope that someone could help me to understand:

1- changing colors in marbles.
    I've understand that the main color of the "dark brown marble" (For
example) is managed by

    void colorfunc marble2up
    4 red grn blu c-stone3tilxy.cal
    0
    42 0.5 0.16 0.05 0.03
    0.6 0.19 0.08 0.06
    0.65 0.15 0.085 0.045
    0.9 0.155 0.043 0.025
          0.165 0.09 0.05
    0.2 0.25 0.15
    0.2 4.2 7.3 11.6
          1.0 1.0 1.0
    0.11 0.46 4
    2 1.8 0.13
    -0.1 0.12 1
    90.0 0.5 0.5 0.25

    where the 42 parameters are the 42 ones of the c-stone3tilxy.cal file:

       arg(1) arg(2) arg(3) arg(4) color at 0< x <arg(1)
      arg(5) arg(6) arg(7) arg(8) color at arg(1)< x <arg(5)
      arg(9) arg(10) arg(11) arg(12) color at arg(5)< x <arg(9)
      arg(13) arg(14) arg(15) arg(16) color at arg(9)< x <arg(13)
          arg(17) arg(18) arg(19) color at arg(13)<x <1
      arg(20) turbulence
      arg(21) turb scale
      arg(22) unsharp borders

      arg(23) arg(24) arg(25) arg(26) crack color at arg(23)
      arg(27) arg(28) arg(29) crack color at border

      arg(30) crack left border {( < arg(23) )}
      arg(31) crack right border {( > arg(23) )}
      arg(32) crack period

      arg(33) crack noise-func selector (1- perl. 2- fract. 3- rand.
4-perl*rand)
      arg(34) crack turb intensity
      arg(35) crack scale

      arg(36) crack occurrence threshhold (-1 < arg(36) < 1)
      arg(37) " scale
      arg(38) -

      arg(39) tiling rot. angle (degrees)
      arg(40) tiling xstep
      arg(41) tiling ystep
      arg(42) tiling xoffset

     First 19 parmeters are related to the marble color.
     My question is: is there a way to "calculate/Define" those 19 paremters
for the desired color?
     they are not "triple values" (r g b), they are 4 values for each "row",
and what means "color at arg(1)< x <arg(5)"

    2- marble tiles.
      Marble tiles are defined with args 39-40-41-42 or also in the marble
mat file?
      Is it possible to use the marble pattern without tiles?

      Any help is welcome

        Cristiano

      Here the dark brown marble mat file and calc files.

···

################################################################
    ################# dark brown marble, white cracks #############
################################################################

#
# x y plane, tiles x 0.5 y 0.5 (args 40 & 41)
#

void colorfunc marble2up
4 red grn blu c-stone3tilxy.cal
0
42 0.5 0.16 0.05 0.03
    0.6 0.19 0.08 0.06
    0.65 0.15 0.085 0.045
    0.9 0.155 0.043 0.025
          0.165 0.09 0.05
    0.2 0.25 0.15
    0.2 4.2 7.3 11.6
          1.0 1.0 1.0
    0.11 0.46 4
    2 1.8 0.13
    -0.1 0.12 1
    90.0 0.5 0.5 0.25

void plastic marble2base
0
0
5 0.17 0.065 0.04 0 0.03

void colorfunc grouts2
4 red grn blu c-1c.cal
0
3 0.51 0.505 0.5

void texfunc fugen
6 xpert ypert zpert t-brickptxz.cal -rx -90
0
14 0.5 0.5 0.25 1
   0.01 0.01 1
   0.28 0.15 0.32
   1 0 1 1

fugen mixfunc marble2tex
6 marble2up grouts2 fore m-brickptxz.cal -rx -90
0
14 0.5 0.5 0.25
    1 0.006 0.006 1
    0.002 0.002 1
    1 0.0 20 20

marble2tex plastic marble2
1 marble2base
0
5 1 1 1 0.3 0.03

################################################################

################################################################
    ################# c-stone3tilxy.cal #############
################################################################

{ (c)-20.08.2002-C.Bauer(Berlin)

  c-stone3tilxy.cal

  5 color fractal noise (softened) crack x tiling xy

  output: red, grn, blu (names to list as colorfunc string args)

  42 parameters:

  arg(1) arg(2) arg(3) arg(4) color at 0< x <arg(1)
  arg(5) arg(6) arg(7) arg(8) color at arg(1)< x <arg(5)
  arg(9) arg(10) arg(11) arg(12) color at arg(5)< x <arg(9)
  arg(13) arg(14) arg(15) arg(16) color at arg(9)< x <arg(13)
      arg(17) arg(18) arg(19) color at arg(13)<x <1
  arg(20) turbulence
  arg(21) turb scale
  arg(22) unsharp borders

  arg(23) arg(24) arg(25) arg(26) crack color at arg(23)
      arg(27) arg(28) arg(29) crack color at border

  arg(30) crack left border {( < arg(23) )}
  arg(31) crack right border {( > arg(23) )}
  arg(32) crack period

  arg(33) crack noise-func selector (1- perl. 2- fract. 3- rand.
4-perl*rand)
  arg(34) crack turb intensity
  arg(35) crack scale

  arg(36) crack occurrence threshhold (-1 < arg(36) < 1)
  arg(37) " scale
  arg(38) -

  arg(39) tiling rot. angle (degrees)
  arg(40) tiling xstep
  arg(41) tiling ystep
  arg(42) tiling xoffset

}

shifty = floor(Py/arg(41));
shiftx = floor((Px-shifty*arg(42))/arg(40));

rotang = DEGREE*arg(39)*(shiftx+shifty);

PPx = Px*cos(rotang) + Py*sin(rotang);
PPy = Py*cos(rotang) - Px*sin(rotang);
PPz = Pz;

dist = arg(20)*fnoise3(PPx,PPy,PPz);

xev = (PPx + dist)/arg(21);
yev = (PPy + dist)/arg(21);
zev = (PPz + dist)/arg(21);

selector = if(arg(22), 0.5*(1-fnoise3(xev,
yev,zev))+arg(22)*(0.5-rand((PPx+PPy+PPz)/3)),
                              0.5*(1-fnoise3(xev, yev, zev)));

delfa13 = selector-arg(13);
delfa9 = selector-arg(9);
delfa5 = selector-arg(5);
delfa1 = selector-arg(1);

fnorm = if(delfa13, delfa13/(1-arg(13)), if(delfa9, delfa9/(arg(13)-arg(9)),
       if(delfa5, delfa5/(arg(9)-arg(5)), if(delfa1, delfa1/(arg(5)-arg(1)),
selector/arg(1)))));

basenoise = select(floor(arg(33)), arg(34)*noise3(PPx,PPy,PPz),
arg(34)*fnoise3(PPx,PPy,PPz),

arg(34)*rand((PPx+PPy+PPz)/3),arg(34)*(noise3(PPx,PPy,PPz)*rand((PPx+PPy+PPz
)/3)));

xfilt = (PPx+basenoise)/arg(35);

fildec = mod(floor(xfilt), arg(32));

fdl = frac(xfilt);

filfa = if(fildec, 0, if(fdl-arg(31), 0 , if(fdl-arg(30), if(fdl-arg(23),
1 - (fdl-arg(23))/(arg(31)-arg(23)),
                                                              1-
(arg(23)-fdl)/(arg(23)-arg(30))), 0)));
filfa2 = if(noise3(PPx/arg(37),PPy/arg(37),PPz/arg(37))-arg(36), filfa, 0);

fred = arg(27) + filfa2*(arg(24)-arg(27));
fgrn = arg(28) + filfa2*(arg(25)-arg(28));
fblu = arg(29) + filfa2*(arg(26)-arg(29));

Rl = if(delfa13, arg(14), if(delfa9, arg(10), if(delfa5, arg(6), if(delfa1,
arg(2), arg(17)))));
Gl = if(delfa13, arg(15), if(delfa9, arg(11), if(delfa5, arg(7), if(delfa1,
arg(3), arg(18)))));
Bl = if(delfa13, arg(16), if(delfa9, arg(12), if(delfa5, arg(8), if(delfa1,
arg(4), arg(19)))));

Ru = if(delfa13, arg(17), if(delfa9, arg(14), if(delfa5, arg(10), if(delfa1,
arg(6), arg(2)))));
Gu = if(delfa13, arg(18), if(delfa9, arg(15), if(delfa5, arg(11), if(delfa1,
arg(7), arg(3)))));
Bu = if(delfa13, arg(19), if(delfa9, arg(16), if(delfa5, arg(12), if(delfa1,
arg(8), arg(4)))));

red = (Rl+(Ru-Rl)*fnorm)*fred;
grn = (Gl+(Gu-Gl)*fnorm)*fgrn;
blu = (Bl+(Bu-Bl)*fnorm)*fblu;
################################################################

################################################################
    ################# c-1c.cal #############
################################################################

{ (c)-20.08.2002-C.Bauer(Berlin)

  c-1c.cal

  1 color cal file (workaround for mixing)

  output red, grn, blu

  arg(1) = red color val
  arg(2) = green "
  arg(3) = blue "
}

red = arg(1);
grn = arg(2);
blu = arg(3);

################################################################

################################################################
    ################# t-brickptxz.cal #############
################################################################
{ (c)-20.08.2002-C.Bauer(Berlin)

   t-brickptxz.cal

    brick normal-pattern xz-plane, x-offset

  output: xpert, ypert, zpert (texfunc-string args)

  14 parameters

  arg(1) zstep
  arg(2) xstep
  arg(3) xoffset
  arg(4) -
  arg(5) grout size z
  arg(6) grout size x
  arg(7) -
  arg(8) grout effect ampl.
  arg(9) -
  arg(10) -
  arg(11) noise-func selector (1 - perlin, 2 - fractal)
  arg(12) turb. amplitude
  arg(13) turb. scale x
  arg(14) turb. scale z
}
PPz = Pz + arg(12)*select(arg(11),
noise3(Px/arg(13),Py/arg(13),Pz/arg(14)), fnoise3(Px/arg(13), Py/arg(13),
Pz/arg(14)));

PPx = Px + arg(12)*select(arg(11),
noise3(Px/arg(13),Py/arg(13),Pz/arg(14)), fnoise3(Px/arg(13), Py/arg(13),
Pz/arg(14)));

pr = PPz/arg(1);

evpt = frac(pr)*arg(1); {eval points}

stp = floor(pr);
evx = arg(2)*frac((PPx-stp*arg(3))/arg(2));
delmfal = evx-arg(3);
delmfau = evx-(arg(3)+arg(6));
delmf6 = if(delmfal, if(delmfau,0,1),0);
delfa5 = evpt-arg(5);
delfa5h = evpt-(arg(5)/2);
delfa6 = evx-arg(6);
delfa6h = evx - (arg(6)/2);
xpert = if(delfa5,if(delfa6,0,if(delfa6h, -arg(8), arg(8))),0);
ypert = 0;
zpert = if(delfa5, 0 , if(delfa5h, if(delfa6,-arg(8),0), if(delmf6, 0,
arg(8))));

################################################################

################################################################
    ################# t-brickptxz.cal #############
################################################################
{ (c)-20.08.2002-C.Bauer(Berlin)

  m-brickptxz.cal

  brick mix pattern, foreground = brick-material, background = grout
material
  output: fore

  14 parameters

  arg(1) zstep
  arg(2) xstep
  arg(3) xoffset
  arg(4) -
  arg(5) grout size z
  arg(6) grout size x
  arg(7) -
  arg(8) z-trans
  arg(9) x-trans
  arg(10) -
   arg(11) noise-func selector (1 - perlin, 2 - fractal)
  arg(12) turb. amplitude
  arg(13) turb. scale x
  arg(14) turb. scale z

}

Ptx = Px-arg(8);
Ptz = Pz-arg(9);

PPz = Ptz + arg(12)*select(arg(11),
noise3(Ptx/arg(13),Py/arg(13),Ptz/arg(14)), fnoise3(Ptx/arg(13), Py/arg(13),
Ptz/arg(14)));
PPx = Ptx + arg(12)*select(arg(11),
noise3(Ptx/arg(13),Py/arg(13),Ptz/arg(14)), fnoise3(Ptx/arg(13), Py/arg(13),
Ptz/arg(14)));

pr = PPz/arg(1);
evpt = frac(pr)*arg(1); {eval points}
stp = floor(pr);

evx = arg(2)*frac((PPx-stp*arg(3))/arg(2));

delfa5 = evpt-arg(5);

delfa6 = evx-arg(6);

fore = if(delfa5, if(delfa6, 1,0),0);

################################################################

Hi Christiano,

its interesting to read that there is at least one person out there who
actually uses some of the stuff I've published on my site :slight_smile:

Concerning the pattern files, I think I cannot repeat it often enough
that they where made in an 'experimental' phase, when I started to get
aquainted with the radiance functional language.
So they are everything else but well worked out (this applies
unfortunately also to editing and handling), and they are not supported
by me in this form anymore.

To answer your two questions:

color:
In many pattern files (not only in marble) the color pattern is produced
with a 'color map' and random noise functions. Means, a random noise
function gives you a value between 0 and 1 (or -1 and 1),and dependent
on that a color is drawn / interpolated from a handful of values.

Often I use 5 color-maps, so you have 4 'division' values, between 0 and
1 (the fifth is always 1.0, so it is left out), and of course a color
rgb tripel for each division)
Changing the color of a pattern thus means the tedious job of changing
all the 5 color values. As a first start, simply leave the division
values as the are (i.e. arg 1,5,9,13) and just change the color tripels.
As an additional awkwardness, some patterns are set up as a mixture of
two layers, so you have to do this color-editing twice, once for each
layer..

tiles:
The problem with the whole pattern file business is that you need lots
of calculations files for each different pattern or variant of a it,
and, well, that small collection I've produced covers only a few cases.
In the tiles/no tiles case, however, there is a trick:
just make the tile x and y step (arg(40) and arg(41) for the marble
pattern) very large, larger than the object made out of that material,
(and maybe use a translation transformation also),
so that no tile grouts appear on your object.

Hope this helps
-Carsten

···

--
---------------------------------------------------------

"Der Deckel muß zugehen." (P.Kölsch)

---------------------------------------------------------

Hi Carsten,

its interesting to read that there is at least one person out there who
actually uses some of the stuff I've published on my site :slight_smile:

Well, at least two, I'd say :wink:

Ciao ciao,

Francesco