/usr/share/radiance/fitSH.cal is in radiance-materials 4R1+20120125-1.
This file is owned by root:root, with mode 0o644.
The actual contents of the file can be viewed below.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 | { RCSid $Id: fitSH.cal,v 1.1 2005/02/16 15:51:45 greg Exp $ }
{
Fit Spherical Harmonic Coefficients for a Light Probe
2/16/2005 G. Ward
Constants:
xres - horizontal input resolution
yres - vertical input resolution
map - light probe mapping (1=angular, 2=mirror)
Usage:
pvalue -h -H -pR -d probe.hdr \
| rcalc -e 'xres:512;yres:512;map:1' \
-f spharm.cal -f fitSH.cal \
| total > coef_R.dat
Repeat for green and blue components if desired
}
map : 1; { just angular for now }
mod(n,d) : n - floor(n/d)*d;
sq(x) : x*x;
x = mod(recno-1, xres);
y = yres-1 - floor((recno-1)/xres);
h = 1/xres*x - .5;
v = 1/yres*y - .5;
beta_ang = 2*PI*sqrt(h*h + v*v);
gamma_ang = atan2(v, h);
sine_beta_ang = sin(beta_ang);
Dx_ang = cos(beta_ang);
Dy_ang = cos(gamma_ang)*sine_beta_ang;
Dz_ang = sin(gamma_ang)*sine_beta_ang;
theta_ang = acos(Dz_ang);
phi_ang = atan2(Dy_ang, Dx_ang);
omega_ang = sq(4*PI/(xres+yres))*if(beta_ang-.01, sine_beta_ang/beta_ang, 1);
cond = select(map, PI-1e-4-beta_ang);
theta = select(map, theta_ang);
phi = select(map, phi_ang);
omega = select(map, omega_ang);
{ Level 0-2 harmonics }
$1 = $1*SphericalHarmonicB(1,theta,phi)*omega;
$2 = $1*SphericalHarmonicB(2,theta,phi)*omega;
$3 = $1*SphericalHarmonicB(3,theta,phi)*omega;
$4 = $1*SphericalHarmonicB(4,theta,phi)*omega;
$5 = $1*SphericalHarmonicB(5,theta,phi)*omega;
$6 = $1*SphericalHarmonicB(6,theta,phi)*omega;
$7 = $1*SphericalHarmonicB(7,theta,phi)*omega;
$8 = $1*SphericalHarmonicB(8,theta,phi)*omega;
$9 = $1*SphericalHarmonicB(9,theta,phi)*omega;
{ Level 3 harmonics }
$10 = $1*SphericalHarmonicB(10,theta,phi)*omega;
$11 = $1*SphericalHarmonicB(11,theta,phi)*omega;
$12 = $1*SphericalHarmonicB(12,theta,phi)*omega;
$13 = $1*SphericalHarmonicB(13,theta,phi)*omega;
$14 = $1*SphericalHarmonicB(14,theta,phi)*omega;
$15 = $1*SphericalHarmonicB(15,theta,phi)*omega;
$16 = $1*SphericalHarmonicB(16,theta,phi)*omega;
{ Level 4 harmonics }
$17 = $1*SphericalHarmonicB(17,theta,phi)*omega;
$18 = $1*SphericalHarmonicB(18,theta,phi)*omega;
$19 = $1*SphericalHarmonicB(19,theta,phi)*omega;
$20 = $1*SphericalHarmonicB(20,theta,phi)*omega;
$21 = $1*SphericalHarmonicB(21,theta,phi)*omega;
$22 = $1*SphericalHarmonicB(22,theta,phi)*omega;
$23 = $1*SphericalHarmonicB(23,theta,phi)*omega;
$24 = $1*SphericalHarmonicB(24,theta,phi)*omega;
$25 = $1*SphericalHarmonicB(25,theta,phi)*omega;
{ Level 5 harmonics }
$26 = $1*SphericalHarmonicB(26,theta,phi)*omega;
$27 = $1*SphericalHarmonicB(27,theta,phi)*omega;
$28 = $1*SphericalHarmonicB(28,theta,phi)*omega;
$29 = $1*SphericalHarmonicB(29,theta,phi)*omega;
$30 = $1*SphericalHarmonicB(30,theta,phi)*omega;
$31 = $1*SphericalHarmonicB(31,theta,phi)*omega;
$32 = $1*SphericalHarmonicB(32,theta,phi)*omega;
$33 = $1*SphericalHarmonicB(33,theta,phi)*omega;
$34 = $1*SphericalHarmonicB(34,theta,phi)*omega;
$35 = $1*SphericalHarmonicB(35,theta,phi)*omega;
$36 = $1*SphericalHarmonicB(36,theta,phi)*omega;
{ Level 6 harmonics }
$37 = $1*SphericalHarmonicB(37,theta,phi)*omega;
$38 = $1*SphericalHarmonicB(38,theta,phi)*omega;
$39 = $1*SphericalHarmonicB(39,theta,phi)*omega;
$40 = $1*SphericalHarmonicB(40,theta,phi)*omega;
$41 = $1*SphericalHarmonicB(41,theta,phi)*omega;
$42 = $1*SphericalHarmonicB(42,theta,phi)*omega;
$43 = $1*SphericalHarmonicB(43,theta,phi)*omega;
$44 = $1*SphericalHarmonicB(44,theta,phi)*omega;
$45 = $1*SphericalHarmonicB(45,theta,phi)*omega;
$46 = $1*SphericalHarmonicB(46,theta,phi)*omega;
$47 = $1*SphericalHarmonicB(47,theta,phi)*omega;
$48 = $1*SphericalHarmonicB(48,theta,phi)*omega;
$49 = $1*SphericalHarmonicB(49,theta,phi)*omega;
{ Level 7 harmonics }
$50 = $1*SphericalHarmonicB(50,theta,phi)*omega;
$51 = $1*SphericalHarmonicB(51,theta,phi)*omega;
$52 = $1*SphericalHarmonicB(52,theta,phi)*omega;
$53 = $1*SphericalHarmonicB(53,theta,phi)*omega;
$54 = $1*SphericalHarmonicB(54,theta,phi)*omega;
$55 = $1*SphericalHarmonicB(55,theta,phi)*omega;
$56 = $1*SphericalHarmonicB(56,theta,phi)*omega;
$57 = $1*SphericalHarmonicB(57,theta,phi)*omega;
$58 = $1*SphericalHarmonicB(58,theta,phi)*omega;
$59 = $1*SphericalHarmonicB(59,theta,phi)*omega;
$60 = $1*SphericalHarmonicB(60,theta,phi)*omega;
$61 = $1*SphericalHarmonicB(61,theta,phi)*omega;
$62 = $1*SphericalHarmonicB(62,theta,phi)*omega;
$63 = $1*SphericalHarmonicB(63,theta,phi)*omega;
$64 = $1*SphericalHarmonicB(64,theta,phi)*omega;
{ Level 8 harmonics }
$65 = $1*SphericalHarmonicB(65,theta,phi)*omega;
$66 = $1*SphericalHarmonicB(66,theta,phi)*omega;
$67 = $1*SphericalHarmonicB(67,theta,phi)*omega;
$68 = $1*SphericalHarmonicB(68,theta,phi)*omega;
$69 = $1*SphericalHarmonicB(69,theta,phi)*omega;
$70 = $1*SphericalHarmonicB(70,theta,phi)*omega;
$71 = $1*SphericalHarmonicB(71,theta,phi)*omega;
$72 = $1*SphericalHarmonicB(72,theta,phi)*omega;
$73 = $1*SphericalHarmonicB(73,theta,phi)*omega;
$74 = $1*SphericalHarmonicB(74,theta,phi)*omega;
$75 = $1*SphericalHarmonicB(75,theta,phi)*omega;
$76 = $1*SphericalHarmonicB(76,theta,phi)*omega;
$77 = $1*SphericalHarmonicB(77,theta,phi)*omega;
$78 = $1*SphericalHarmonicB(78,theta,phi)*omega;
$79 = $1*SphericalHarmonicB(79,theta,phi)*omega;
$80 = $1*SphericalHarmonicB(80,theta,phi)*omega;
$81 = $1*SphericalHarmonicB(81,theta,phi)*omega;
|