ViewVC Help
View File | Revision Log | Show Annotations | Download File | Root Listing
root/radiance/ray/src/cal/cal/metals.cal
Revision: 1.1
Committed: Sat Feb 22 02:07:21 2003 UTC (21 years, 2 months ago) by greg
Branch: MAIN
CVS Tags: rad5R2, rad4R2P2, rad5R0, rad5R1, rad3R7P2, rad3R7P1, rad4R2, rad4R1, rad4R0, rad3R5, rad3R6, rad3R6P1, rad3R8, rad3R9, rad4R2P1
Log Message:
Changes and check-in for 3.5 release
Includes new source files and modifications not recorded for many years
See ray/doc/notes/ReleaseNotes for notes between 3.1 and 3.5 release

File Contents

# User Rev Content
1 greg 1.1 {
2     Complex indices of refraction for 4 metals:
3    
4     copper
5     gold
6     aluminum
7     silver
8    
9     Data borrowed from Andrew Glassner's book, "Principles of
10     Digital Image Synthesis" from Morgan Kaufmann
11     publishers.
12    
13     The functions below permit the computation of
14     spectral reflectance at any incident angle and
15     wavelength in the 380-775 nm range.
16     }
17    
18     spec_copper(ct,wl) : spec_refl(copper_nr,copper_ni,ct,wl);
19     spec_gold(ct,wl) : spec_refl(gold_nr,gold_ni,ct,wl);
20     spec_aluminum(ct,wl) : spec_refl(aluminum_nr,aluminum_ni,ct,wl);
21     spec_silver(ct,wl) : spec_refl(silver_nr,silver_ni,ct,wl);
22    
23     {
24     Fresnel's equations
25     }
26     sq(x) : x*x;
27     Sqrt(x) : if(x,sqrt(x),0);
28     fuvA(ct,nr,nk) : sq(nr)*(1-sq(nk)) - (1-sq(ct));
29     fuvB(ct,nr,nk) : sqrt(sq(fuvA(ct,nr,nk)) + 4*sq(sq(nr)*nk));
30     fu2(ct,nr,nk) : (fuvA(ct,nr,nk) + fuvB(ct,nr,nk))/2;
31     fv2(ct,nr,nk) : (-fuvA(ct,nr,nk) + fuvB(ct,nr,nk))/2;
32     fperp2(ct,nr,nk) : (sq(ct-sqrt(fu2(ct,nr,nk))) + fv2(ct,nr,nk)) /
33     (sq(ct+sqrt(fu2(ct,nr,nk))) + fv2(ct,nr,nk));
34     fpara2(ct,nr,nk) : (sq(sq(nr)*(1-sq(nk))*ct - sqrt(fu2(ct,nr,nk))) +
35     sq(2*sq(nr)*nk*ct - Sqrt(fv2(ct,nr,nk)))) /
36     (sq(sq(nr)*(1-sq(nk))*ct + sqrt(fu2(ct,nr,nk))) +
37     sq(2*sq(nr)*nk*ct + Sqrt(fv2(ct,nr,nk))));
38     fresnel2(ct,nr,nk) : (fperp2(ct,nr,nk) + fpara2(ct,nr,nk))/2;
39    
40     spec_refl(nrf,nif,ct,wl) : fresnel2(ct,nrf(wl),nif(wl)/nrf(wl));
41    
42     {
43     Complex refractive index interpolation functions
44     for our metals.
45     }
46     interp_arr2`(i,x,f):(i+1-x)*f(i)+(x-i)*f(i+1);
47     interp_arr`(x,f):if(x-1,if(f(0)-x,interp_arr2`(floor(x),x,f),f(f(0))),f(1));
48     copper_nr`p24653(i):select(i,1.18828,1.18828,1.1871,
49     1.185312,1.183702,1.182223,1.180822,1.179452,1.178062,1.176602,
50     1.175023,1.173274,1.171306,1.169114,1.166702,1.164034,1.161139,
51     1.158046,1.154787,1.15139,1.150639,1.151381,1.151354,1.150138,
52     1.147313,1.142456,1.135149,1.12497,1.114585,1.102313,1.085276,
53     1.062659,1.034637,1.003658,0.965898,0.921582,0.870931,0.812255,
54     0.740885,0.667504,0.595384,0.527793,0.468,0.415458,0.372648,
55     0.338234,0.310878,0.289246,0.272,0.256103,0.243055,0.232653,
56     0.224696,0.218982,0.215308,0.213646,0.213653,0.21435,0.215,
57     0.214749,0.214074,0.21333,0.21272,0.21238,0.212566,0.213295,
58     0.214605,0.21645,0.218648,0.221044,0.223483,0.225852,0.228145,
59     0.230367,0.232522,0.234613,0.236647,0.238625,0.240554,0.242437);
60     copper_nr(x):interp_arr`((x-380)/5+1,copper_nr`p24653);
61     copper_ni`p24653(i):select(i,2.078662,2.078662,2.09304,
62     2.117618,2.142816,2.168463,2.194386,2.220412,2.246369,2.272084,
63     2.297387,2.322103,2.346061,2.369725,2.393291,2.415747,2.43704,
64     2.457114,2.475917,2.493393,2.511981,2.5307,2.547674,2.562687,
65     2.575524,2.58597,2.593811,2.59883,2.599943,2.598045,2.594923,
66     2.591761,2.58795,2.579443,2.575114,2.576699,2.585936,2.603536,
67     2.627422,2.660953,2.703188,2.753184,2.81,2.875556,2.945518,
68     3.018414,3.092775,3.167127,3.24,3.312184,3.381591,3.448394,
69     3.512766,3.57488,3.634911,3.693233,3.750162,3.805661,3.86,
70     3.91448,3.967796,4.019675,4.069952,4.118678,4.166057,4.212465,
71     4.258351,4.30398,4.349268,4.394238,4.438778,4.48251,4.525993,
72     4.569252,4.612311,4.655197,4.697934,4.740548,4.783062,4.825503);
73     copper_ni(x):interp_arr`((x-380)/5+1,copper_ni`p24653);
74     gold_nr`p24653(i):select(i,1.678455,1.678455,1.675263,
75     1.666817,1.658,1.649184,1.640737,1.634183,1.629351,1.622275,
76     1.612759,1.59989,1.579005,1.548932,1.510154,1.464924,1.417717,
77     1.374532,1.325871,1.268297,1.195681,1.110843,1.021396,0.933039,
78     0.84688,0.767504,0.695794,0.631604,0.571663,0.516924,0.469422,
79     0.429107,0.395941,0.369509,0.348463,0.33137,0.316801,0.303023,
80     0.288205,0.273748,0.259998,0.2473,0.236,0.226102,0.217697,
81     0.210535,0.204364,0.198936,0.194,0.188606,0.183521,0.178812,
82     0.174544,0.170786,0.167605,0.165016,0.163,0.161554,0.160597,
83     0.160049,0.159829,0.159855,0.160027,0.160222,0.160515,0.160903,
84     0.161383,0.161953,0.162609,0.163349,0.164163,0.165023,0.165954,
85     0.166952,0.16801,0.169122,0.170283,0.171487,0.172728,0.174);
86     gold_nr(x):interp_arr`((x-380)/5+1,gold_nr`p24653);
87     gold_ni`p24653(i):select(i,1.953596,1.953596,1.953178,
88     1.953892,1.956,1.958108,1.958822,1.957185,1.952822,1.945549,
89     1.93636,1.925744,1.912865,1.897096,1.87876,1.860113,1.841519,
90     1.821149,1.805653,1.797055,1.790414,1.790218,1.80338,1.832168,
91     1.875281,1.93352,2.004628,2.085559,2.177679,2.276178,2.374557,
92     2.469264,2.557729,2.640573,2.714364,2.779947,2.838163,2.883275,
93     2.896406,2.904831,2.909502,2.911371,2.91139,2.91051,2.909684,
94     2.909863,2.912,2.917045,2.925952,2.939671,2.959155,2.985355,
95     3.019223,3.061712,3.113773,3.179622,3.260394,3.348767,3.442244,
96     3.53833,3.634528,3.728342,3.817474,3.900933,3.978438,4.050759,
97     4.118664,4.182923,4.244306,4.303581,4.361628,4.419346,4.476388,
98     4.532793,4.588597,4.643842,4.698567,4.752808,4.806607,4.86);
99     gold_ni(x):interp_arr`((x-380)/5+1,gold_ni`p24653);
100     aluminum_nr`p24654(i):select(i,0.459522,0.459522,
101     0.464578,0.477268,0.49,0.502732,0.515422,0.528027,0.54054,
102     0.553012,0.565131,0.577244,0.589948,0.603591,0.618,0.632493,
103     0.646781,0.660667,0.674693,0.689087,0.703759,0.718931,0.734853,
104     0.751561,0.769,0.786605,0.786342,0.784987,0.806091,0.844815,
105     0.878276,0.898602,0.915377,0.934823,0.958,0.981445,1.002914,
106     1.024224,1.046286,1.070014,1.09594,1.123162,1.15,1.176546,1.2,
107     1.22,1.243866,1.27122,1.3,1.32833,1.356345,1.384367,1.411292,
108     1.439278,1.47,1.502859,1.53467,1.566741,1.6,1.634324,1.670565,
109     1.708526,1.747843,1.787991,1.83,1.872679,1.919912,1.972871,
110     2.030324,2.090685,2.153505,2.220514,2.285233,2.345712,2.4,
111     2.45085,2.499693,2.545931,2.589417,2.63);
112     aluminum_nr(x):interp_arr`((x-380)/5+1,aluminum_nr`p24654);
113     aluminum_ni`p24654(i):select(i,4.712543,4.712543,
114     4.737463,4.799026,4.86,4.920975,4.982537,5.046061,5.111395,
115     5.175306,5.233723,5.288472,5.344414,5.405324,5.47,5.531815,
116     5.592108,5.653007,5.714261,5.775548,5.836021,5.896012,5.956376,
117     6.017607,6.08,6.138476,6.196043,6.255528,6.318217,6.382319,
118     6.443884,6.502451,6.563588,6.63103,6.69,6.743231,6.801953,
119     6.861834,6.919963,6.977149,7.034889,7.092927,7.15,7.206569,
120     7.26,7.31,7.364944,7.422566,7.48,7.535376,7.588417,7.639844,
121     7.690237,7.740152,7.79,7.841236,7.896558,7.953478,8.01,
122     8.066238,8.11997,8.17108,8.21945,8.265363,8.31,8.354383,
123     8.40055,8.452595,8.501185,8.543206,8.575872,8.598589,8.611949,
124     8.618302,8.62,8.623612,8.625132,8.622376,8.614337,8.6);
125     aluminum_ni(x):interp_arr`((x-380)/5+1,aluminum_ni`p24654);
126     silver_nr`p24654(i):select(i,0.172643,0.172643,0.172179,
127     0.172143,0.173,0.173857,0.173821,0.171576,0.167032,0.162298,
128     0.159271,0.158423,0.157828,0.155916,0.15216,0.147613,0.143045,
129     0.138757,0.135317,0.132764,0.131138,0.130306,0.130009,0.129992,
130     0.130061,0.130105,0.130103,0.130043,0.130125,0.130219,0.130091,
131     0.129646,0.128675,0.126824,0.124775,0.122763,0.121029,0.119768,
132     0.119005,0.118838,0.119176,0.119927,0.121,0.122437,0.124046,
133     0.125766,0.127538,0.129303,0.131,0.132869,0.13459,0.136141,
134     0.137502,0.138652,0.13957,0.14011,0.140229,0.140185,0.14005,
135     0.139897,0.139801,0.139833,0.140154,0.141061,0.142139,0.143315,
136     0.144516,0.145667,0.146695,0.147527,0.148028,0.147986,0.147682,
137     0.147174,0.146517,0.145769,0.144987,0.144227,0.143545,0.143);
138     silver_nr(x):interp_arr`((x-380)/5+1,silver_nr`p24654);
139     silver_ni`p24654(i):select(i,1.801357,1.801357,1.824736,
140     1.886179,1.95,2.013821,2.075264,2.132024,2.183605,2.231833,
141     2.278383,2.324504,2.371326,2.420021,2.470635,2.520932,2.569545,
142     2.615768,2.660014,2.702999,2.744957,2.786577,2.828568,2.871323,
143     2.916154,2.961894,3.007563,3.052436,3.095771,3.137532,3.178189,
144     3.218184,3.257945,3.297745,3.337667,3.377699,3.41783,3.458226,
145     3.499347,3.540295,3.58086,3.620832,3.66,3.697,3.733363,
146     3.769467,3.805689,3.842407,3.88,3.919219,3.959434,4.000389,
147     4.041828,4.083495,4.125135,4.166709,4.208175,4.249203,4.289791,
148     4.329939,4.369645,4.408909,4.447676,4.485809,4.523594,4.561111,
149     4.598441,4.635663,4.672859,4.710108,4.747403,4.784542,4.82189,
150     4.859458,4.897254,4.935289,4.973571,5.012111,5.050918,5.09);
151     silver_ni(x):interp_arr`((x-380)/5+1,silver_ni`p24654);