ViewVC Help
View File | Revision Log | Show Annotations | Download File | Root Listing
root/radiance/ray/src/cal/cal/glass3.cal
Revision: 1.1
Committed: Tue Mar 7 01:55:07 2023 UTC (14 months, 1 week ago) by greg
Branch: MAIN
CVS Tags: rad5R4, HEAD
Log Message:
feat: Added approximation for triple-glazing

File Contents

# Content
1 { RCSid $Id$ }
2 {
3 Approximated triple-glazing model using BRTDfunc.
4
5 void BRTDfunc glaze3
6 10
7 sr_red sr_grn sr_blu
8 st_red st_grn st_blu
9 0 0 0
10 glass3.cal
11 0
12 18 0 0 0 0 0 0 0 0 0
13 rfspc gfspc bfspc
14 rbspc gbspc bbspc
15 rtspc gtspc btspc
16
17 where:
18 rfspc, gfspc, bfspc - front specular RGB at normal
19 rbspc, gbspc, bbspc - back specular RGB at normal
20 rtspc, gtspc, btspc - transmitted RGB at normal
21
22 You can use the first 9 arguments to get diffuse components,
23 but the glazing model won't work very well if you do.
24 Also, if the transmission plus reflection on either side
25 adds up to greater than 1.0, you will be violating physics.
26
27 G.Ward for LBNL
28 }
29 Rexp : -2.5; { exponent found to work well for Fresnel }
30
31 Tsr = CrP*arg(16);
32 Tsg = CgP*arg(17);
33 Tsb = CbP*arg(18);
34 { specular flux transfer, front }
35 Sfr = arg(10) + Tsr;
36 Sfg = arg(11) + Tsg;
37 Sfb = arg(12) + Tsb;
38 { specular flux transfer, back }
39 Sbr = arg(13) + Tsr;
40 Sbg = arg(14) + Tsg;
41 Sbb = arg(15) + Tsb;
42 { Fresnel reflection estimator for triple-glazing }
43 FresR = exp(Rexp*abs(RdotP)) - exp(Rexp);
44 specAdj(s) = s + (1-s)*FresR;
45 { Specular reflection, front & back }
46 sr_red = specAdj(if(Rdot, arg(10) , arg(13)));
47 sr_grn = specAdj(if(Rdot, arg(11) , arg(14)));
48 sr_blu = specAdj(if(Rdot, arg(12) , arg(15)));
49 { Specular transmission }
50 st_red = if(Rdot, Sfr, Sbr) - sr_red;
51 st_grn = if(Rdot, Sfg, Sbg) - sr_grn;
52 st_blu = if(Rdot, Sfb, Sbb) - sr_blu;