diff --git a/intern/cycles/doc/precompute/thin_film_table.py b/intern/cycles/doc/precompute/thin_film_table.py new file mode 100644 index 00000000000..f280d40bb72 --- /dev/null +++ b/intern/cycles/doc/precompute/thin_film_table.py @@ -0,0 +1,514 @@ +# SPDX-FileCopyrightText: 2011-2025 Blender Foundation +# +# SPDX-License-Identifier: Apache-2.0 + +import numpy as np +from scipy.interpolate import CubicSpline + +# CIE 1931 2-degree XYZ CMFs +CIEXYZ = np.array([ + [359, 0, 0, 0], + [360, 0.0001299, 0.000003917, 0.0006061], + [361, 0.000145847, 0.000004393581, 0.0006808792], + [362, 0.0001638021, 0.000004929604, 0.0007651456], + [363, 0.0001840037, 0.000005532136, 0.0008600124], + [364, 0.0002066902, 0.000006208245, 0.0009665928], + [365, 0.0002321, 0.000006965, 0.001086], + [366, 0.000260728, 0.000007813219, 0.001220586], + [367, 0.000293075, 0.000008767336, 0.001372729], + [368, 0.000329388, 0.000009839844, 0.001543579], + [369, 0.000369914, 0.00001104323, 0.001734286], + [370, 0.0004149, 0.00001239, 0.001946], + [371, 0.0004641587, 0.00001388641, 0.002177777], + [372, 0.000518986, 0.00001555728, 0.002435809], + [373, 0.000581854, 0.00001744296, 0.002731953], + [374, 0.0006552347, 0.00001958375, 0.003078064], + [375, 0.0007416, 0.00002202, 0.003486], + [376, 0.0008450296, 0.00002483965, 0.003975227], + [377, 0.0009645268, 0.00002804126, 0.00454088], + [378, 0.001094949, 0.00003153104, 0.00515832], + [379, 0.001231154, 0.00003521521, 0.005802907], + [380, 0.001368, 0.000039, 0.006450001], + [381, 0.00150205, 0.0000428264, 0.007083216], + [382, 0.001642328, 0.0000469146, 0.007745488], + [383, 0.001802382, 0.0000515896, 0.008501152], + [384, 0.001995757, 0.0000571764, 0.009414544], + [385, 0.002236, 0.000064, 0.01054999], + [386, 0.002535385, 0.00007234421, 0.0119658], + [387, 0.002892603, 0.00008221224, 0.01365587], + [388, 0.003300829, 0.00009350816, 0.01558805], + [389, 0.003753236, 0.0001061361, 0.01773015], + [390, 0.004243, 0.00012, 0.02005001], + [391, 0.004762389, 0.000134984, 0.02251136], + [392, 0.005330048, 0.000151492, 0.02520288], + [393, 0.005978712, 0.000170208, 0.02827972], + [394, 0.006741117, 0.000191816, 0.03189704], + [395, 0.00765, 0.000217, 0.03621], + [396, 0.008751373, 0.0002469067, 0.04143771], + [397, 0.01002888, 0.00028124, 0.04750372], + [398, 0.0114217, 0.00031852, 0.05411988], + [399, 0.01286901, 0.0003572667, 0.06099803], + [400, 0.01431, 0.000396, 0.06785001], + [401, 0.01570443, 0.0004337147, 0.07448632], + [402, 0.01714744, 0.000473024, 0.08136156], + [403, 0.01878122, 0.000517876, 0.08915364], + [404, 0.02074801, 0.0005722187, 0.09854048], + [405, 0.02319, 0.00064, 0.1102], + [406, 0.02620736, 0.00072456, 0.1246133], + [407, 0.02978248, 0.0008255, 0.1417017], + [408, 0.03388092, 0.00094116, 0.1613035], + [409, 0.03846824, 0.00106988, 0.1832568], + [410, 0.04351, 0.00121, 0.2074], + [411, 0.0489956, 0.001362091, 0.2336921], + [412, 0.0550226, 0.001530752, 0.2626114], + [413, 0.0617188, 0.001720368, 0.2947746], + [414, 0.069212, 0.001935323, 0.3307985], + [415, 0.07763, 0.00218, 0.3713], + [416, 0.08695811, 0.0024548, 0.4162091], + [417, 0.09717672, 0.002764, 0.4654642], + [418, 0.1084063, 0.0031178, 0.5196948], + [419, 0.1207672, 0.0035264, 0.5795303], + [420, 0.13438, 0.004, 0.6456], + [421, 0.1493582, 0.00454624, 0.7184838], + [422, 0.1653957, 0.00515932, 0.7967133], + [423, 0.1819831, 0.00582928, 0.8778459], + [424, 0.198611, 0.00654616, 0.959439], + [425, 0.21477, 0.0073, 1.0390501], + [426, 0.2301868, 0.008086507, 1.1153673], + [427, 0.2448797, 0.00890872, 1.1884971], + [428, 0.2587773, 0.00976768, 1.2581233], + [429, 0.2718079, 0.01066443, 1.3239296], + [430, 0.2839, 0.0116, 1.3856], + [431, 0.2949438, 0.01257317, 1.4426352], + [432, 0.3048965, 0.01358272, 1.4948035], + [433, 0.3137873, 0.01462968, 1.5421903], + [434, 0.3216454, 0.01571509, 1.5848807], + [435, 0.3285, 0.01684, 1.62296], + [436, 0.3343513, 0.01800736, 1.6564048], + [437, 0.3392101, 0.01921448, 1.6852959], + [438, 0.3431213, 0.02045392, 1.7098745], + [439, 0.3461296, 0.02171824, 1.7303821], + [440, 0.34828, 0.023, 1.74706], + [441, 0.3495999, 0.02429461, 1.7600446], + [442, 0.3501474, 0.02561024, 1.7696233], + [443, 0.350013, 0.02695857, 1.7762637], + [444, 0.349287, 0.02835125, 1.7804334], + [445, 0.34806, 0.0298, 1.7826], + [446, 0.3463733, 0.03131083, 1.7829682], + [447, 0.3442624, 0.03288368, 1.7816998], + [448, 0.3418088, 0.03452112, 1.7791982], + [449, 0.3390941, 0.03622571, 1.7758671], + [450, 0.3362, 0.038, 1.77211], + [451, 0.3331977, 0.03984667, 1.7682589], + [452, 0.3300411, 0.041768, 1.764039], + [453, 0.3266357, 0.043766, 1.7589438], + [454, 0.3228868, 0.04584267, 1.7524663], + [455, 0.3187, 0.048, 1.7441], + [456, 0.3140251, 0.05024368, 1.7335595], + [457, 0.308884, 0.05257304, 1.7208581], + [458, 0.3032904, 0.05498056, 1.7059369], + [459, 0.2972579, 0.05745872, 1.6887372], + [460, 0.2908, 0.06, 1.6692], + [461, 0.2839701, 0.06260197, 1.6475287], + [462, 0.2767214, 0.06527752, 1.6234127], + [463, 0.2689178, 0.06804208, 1.5960223], + [464, 0.2604227, 0.07091109, 1.564528], + [465, 0.2511, 0.0739, 1.5281], + [466, 0.2408475, 0.077016, 1.4861114], + [467, 0.2298512, 0.0802664, 1.4395215], + [468, 0.2184072, 0.0836668, 1.3898799], + [469, 0.2068115, 0.0872328, 1.3387362], + [470, 0.19536, 0.09098, 1.28764], + [471, 0.1842136, 0.09491755, 1.2374223], + [472, 0.1733273, 0.09904584, 1.1878243], + [473, 0.1626881, 0.1033674, 1.1387611], + [474, 0.1522833, 0.1078846, 1.090148], + [475, 0.1421, 0.1126, 1.0419], + [476, 0.1321786, 0.117532, 0.9941976], + [477, 0.1225696, 0.1226744, 0.9473473], + [478, 0.1132752, 0.1279928, 0.9014531], + [479, 0.1042979, 0.1334528, 0.8566193], + [480, 0.09564, 0.13902, 0.8129501], + [481, 0.08729955, 0.1446764, 0.7705173], + [482, 0.07930804, 0.1504693, 0.7294448], + [483, 0.07171776, 0.1564619, 0.6899136], + [484, 0.06458099, 0.1627177, 0.6521049], + [485, 0.05795001, 0.1693, 0.6162], + [486, 0.05186211, 0.1762431, 0.5823286], + [487, 0.04628152, 0.1835581, 0.5504162], + [488, 0.04115088, 0.1912735, 0.5203376], + [489, 0.03641283, 0.199418, 0.4919673], + [490, 0.03201, 0.20802, 0.46518], + [491, 0.0279172, 0.2171199, 0.4399246], + [492, 0.0241444, 0.2267345, 0.4161836], + [493, 0.020687, 0.2368571, 0.3938822], + [494, 0.0175404, 0.2474812, 0.3729459], + [495, 0.0147, 0.2586, 0.3533], + [496, 0.01216179, 0.2701849, 0.3348578], + [497, 0.00991996, 0.2822939, 0.3175521], + [498, 0.00796724, 0.2950505, 0.3013375], + [499, 0.006296346, 0.308578, 0.2861686], + [500, 0.0049, 0.323, 0.272], + [501, 0.003777173, 0.3384021, 0.2588171], + [502, 0.00294532, 0.3546858, 0.2464838], + [503, 0.00242488, 0.3716986, 0.2347718], + [504, 0.002236293, 0.3892875, 0.2234533], + [505, 0.0024, 0.4073, 0.2123], + [506, 0.00292552, 0.4256299, 0.2011692], + [507, 0.00383656, 0.4443096, 0.1901196], + [508, 0.00517484, 0.4633944, 0.1792254], + [509, 0.00698208, 0.4829395, 0.1685608], + [510, 0.0093, 0.503, 0.1582], + [511, 0.01214949, 0.5235693, 0.1481383], + [512, 0.01553588, 0.544512, 0.1383758], + [513, 0.01947752, 0.56569, 0.1289942], + [514, 0.02399277, 0.5869653, 0.1200751], + [515, 0.0291, 0.6082, 0.1117], + [516, 0.03481485, 0.6293456, 0.1039048], + [517, 0.04112016, 0.6503068, 0.09666748], + [518, 0.04798504, 0.6708752, 0.08998272], + [519, 0.05537861, 0.6908424, 0.08384531], + [520, 0.06327, 0.71, 0.07824999], + [521, 0.07163501, 0.7281852, 0.07320899], + [522, 0.08046224, 0.7454636, 0.06867816], + [523, 0.08973996, 0.7619694, 0.06456784], + [524, 0.09945645, 0.7778368, 0.06078835], + [525, 0.1096, 0.7932, 0.05725001], + [526, 0.1201674, 0.8081104, 0.05390435], + [527, 0.1311145, 0.8224962, 0.05074664], + [528, 0.1423679, 0.8363068, 0.04775276], + [529, 0.1538542, 0.8494916, 0.04489859], + [530, 0.1655, 0.862, 0.04216], + [531, 0.1772571, 0.8738108, 0.03950728], + [532, 0.18914, 0.8849624, 0.03693564], + [533, 0.2011694, 0.8954936, 0.03445836], + [534, 0.2133658, 0.9054432, 0.03208872], + [535, 0.2257499, 0.9148501, 0.02984], + [536, 0.2383209, 0.9237348, 0.02771181], + [537, 0.2510668, 0.9320924, 0.02569444], + [538, 0.2639922, 0.9399226, 0.02378716], + [539, 0.2771017, 0.9472252, 0.02198925], + [540, 0.2904, 0.954, 0.0203], + [541, 0.3038912, 0.9602561, 0.01871805], + [542, 0.3175726, 0.9660074, 0.01724036], + [543, 0.3314384, 0.9712606, 0.01586364], + [544, 0.3454828, 0.9760225, 0.01458461], + [545, 0.3597, 0.9803, 0.0134], + [546, 0.3740839, 0.9840924, 0.01230723], + [547, 0.3886396, 0.9874182, 0.01130188], + [548, 0.4033784, 0.9903128, 0.01037792], + [549, 0.4183115, 0.9928116, 0.009529306], + [550, 0.4334499, 0.9949501, 0.008749999], + [551, 0.4487953, 0.9967108, 0.0080352], + [552, 0.464336, 0.9980983, 0.0073816], + [553, 0.480064, 0.999112, 0.0067854], + [554, 0.4959713, 0.9997482, 0.0062428], + [555, 0.5120501, 1, 0.005749999], + [556, 0.5282959, 0.9998567, 0.0053036], + [557, 0.5446916, 0.9993046, 0.0048998], + [558, 0.5612094, 0.9983255, 0.0045342], + [559, 0.5778215, 0.9968987, 0.0042024], + [560, 0.5945, 0.995, 0.0039], + [561, 0.6112209, 0.9926005, 0.0036232], + [562, 0.6279758, 0.9897426, 0.0033706], + [563, 0.6447602, 0.9864444, 0.0031414], + [564, 0.6615697, 0.9827241, 0.0029348], + [565, 0.6784, 0.9786, 0.002749999], + [566, 0.6952392, 0.9740837, 0.0025852], + [567, 0.7120586, 0.9691712, 0.0024386], + [568, 0.7288284, 0.9638568, 0.0023094], + [569, 0.7455188, 0.9581349, 0.0021968], + [570, 0.7621, 0.952, 0.0021], + [571, 0.7785432, 0.9454504, 0.002017733], + [572, 0.7948256, 0.9384992, 0.0019482], + [573, 0.8109264, 0.9311628, 0.0018898], + [574, 0.8268248, 0.9234576, 0.001840933], + [575, 0.8425, 0.9154, 0.0018], + [576, 0.8579325, 0.9070064, 0.001766267], + [577, 0.8730816, 0.8982772, 0.0017378], + [578, 0.8878944, 0.8892048, 0.0017112], + [579, 0.9023181, 0.8797816, 0.001683067], + [580, 0.9163, 0.87, 0.001650001], + [581, 0.9297995, 0.8598613, 0.001610133], + [582, 0.9427984, 0.849392, 0.0015644], + [583, 0.9552776, 0.838622, 0.0015136], + [584, 0.9672179, 0.8275813, 0.001458533], + [585, 0.9786, 0.8163, 0.0014], + [586, 0.9893856, 0.8047947, 0.001336667], + [587, 0.9995488, 0.793082, 0.00127], + [588, 1.0090892, 0.781192, 0.001205], + [589, 1.0180064, 0.7691547, 0.001146667], + [590, 1.0263, 0.757, 0.0011], + [591, 1.0339827, 0.7447541, 0.0010688], + [592, 1.040986, 0.7324224, 0.0010494], + [593, 1.047188, 0.7200036, 0.0010356], + [594, 1.0524667, 0.7074965, 0.0010212], + [595, 1.0567, 0.6949, 0.001], + [596, 1.0597944, 0.6822192, 0.00096864], + [597, 1.0617992, 0.6694716, 0.00092992], + [598, 1.0628068, 0.6566744, 0.00088688], + [599, 1.0629096, 0.6438448, 0.00084256], + [600, 1.0622, 0.631, 0.0008], + [601, 1.0607352, 0.6181555, 0.00076096], + [602, 1.0584436, 0.6053144, 0.00072368], + [603, 1.0552244, 0.5924756, 0.00068592], + [604, 1.0509768, 0.5796379, 0.00064544], + [605, 1.0456, 0.5668, 0.0006], + [606, 1.0390369, 0.5539611, 0.0005478667], + [607, 1.0313608, 0.5411372, 0.0004916], + [608, 1.0226662, 0.5283528, 0.0004354], + [609, 1.0130477, 0.5156323, 0.0003834667], + [610, 1.0026, 0.503, 0.00034], + [611, 0.9913675, 0.4904688, 0.0003072533], + [612, 0.9793314, 0.4780304, 0.00028316], + [613, 0.9664916, 0.4656776, 0.00026544], + [614, 0.9528479, 0.4534032, 0.0002518133], + [615, 0.9384, 0.4412, 0.00024], + [616, 0.923194, 0.42908, 0.0002295467], + [617, 0.907244, 0.417036, 0.00022064], + [618, 0.890502, 0.405032, 0.00021196], + [619, 0.87292, 0.393032, 0.0002021867], + [620, 0.8544499, 0.381, 0.00019], + [621, 0.835084, 0.3689184, 0.0001742133], + [622, 0.814946, 0.3568272, 0.00015564], + [623, 0.794186, 0.3447768, 0.00013596], + [624, 0.772954, 0.3328176, 0.0001168533], + [625, 0.7514, 0.321, 0.0001], + [626, 0.7295836, 0.3093381, 0.00008613333], + [627, 0.7075888, 0.2978504, 0.0000746], + [628, 0.6856022, 0.2865936, 0.000065], + [629, 0.6638104, 0.2756245, 0.00005693333], + [630, 0.6424, 0.265, 0.00004999999], + [631, 0.6215149, 0.2547632, 0.00004416], + [632, 0.6011138, 0.2448896, 0.00003948], + [633, 0.5811052, 0.2353344, 0.00003572], + [634, 0.5613977, 0.2260528, 0.00003264], + [635, 0.5419, 0.217, 0.00003], + [636, 0.5225995, 0.2081616, 0.00002765333], + [637, 0.5035464, 0.1995488, 0.00002556], + [638, 0.4847436, 0.1911552, 0.00002364], + [639, 0.4661939, 0.1829744, 0.00002181333], + [640, 0.4479, 0.175, 0.00002], + [641, 0.4298613, 0.1672235, 0.00001813333], + [642, 0.412098, 0.1596464, 0.0000162], + [643, 0.394644, 0.1522776, 0.0000142], + [644, 0.3775333, 0.1451259, 0.00001213333], + [645, 0.3608, 0.1382, 0.00001], + [646, 0.3444563, 0.1315003, 0.000007733333], + [647, 0.3285168, 0.1250248, 0.0000054], + [648, 0.3130192, 0.1187792, 0.0000032], + [649, 0.2980011, 0.1127691, 0.000001333333], + [650, 0.2835, 0.107, 0], + [651, 0.2695448, 0.1014762, 0], + [652, 0.2561184, 0.09618864, 0], + [653, 0.2431896, 0.09112296, 0], + [654, 0.2307272, 0.08626485, 0], + [655, 0.2187, 0.0816, 0], + [656, 0.2070971, 0.07712064, 0], + [657, 0.1959232, 0.07282552, 0], + [658, 0.1851708, 0.06871008, 0], + [659, 0.1748323, 0.06476976, 0], + [660, 0.1649, 0.061, 0], + [661, 0.1553667, 0.05739621, 0], + [662, 0.14623, 0.05395504, 0], + [663, 0.13749, 0.05067376, 0], + [664, 0.1291467, 0.04754965, 0], + [665, 0.1212, 0.04458, 0], + [666, 0.1136397, 0.04175872, 0], + [667, 0.106465, 0.03908496, 0], + [668, 0.09969044, 0.03656384, 0], + [669, 0.09333061, 0.03420048, 0], + [670, 0.0874, 0.032, 0], + [671, 0.08190096, 0.02996261, 0], + [672, 0.07680428, 0.02807664, 0], + [673, 0.07207712, 0.02632936, 0], + [674, 0.06768664, 0.02470805, 0], + [675, 0.0636, 0.0232, 0], + [676, 0.05980685, 0.02180077, 0], + [677, 0.05628216, 0.02050112, 0], + [678, 0.05297104, 0.01928108, 0], + [679, 0.04981861, 0.01812069, 0], + [680, 0.04677, 0.017, 0], + [681, 0.04378405, 0.01590379, 0], + [682, 0.04087536, 0.01483718, 0], + [683, 0.03807264, 0.01381068, 0], + [684, 0.03540461, 0.01283478, 0], + [685, 0.0329, 0.01192, 0], + [686, 0.03056419, 0.01106831, 0], + [687, 0.02838056, 0.01027339, 0], + [688, 0.02634484, 0.009533311, 0], + [689, 0.02445275, 0.008846157, 0], + [690, 0.0227, 0.00821, 0], + [691, 0.02108429, 0.007623781, 0], + [692, 0.01959988, 0.007085424, 0], + [693, 0.01823732, 0.006591476, 0], + [694, 0.01698717, 0.006138485, 0], + [695, 0.01584, 0.005723, 0], + [696, 0.01479064, 0.005343059, 0], + [697, 0.01383132, 0.004995796, 0], + [698, 0.01294868, 0.004676404, 0], + [699, 0.0121292, 0.004380075, 0], + [700, 0.01135916, 0.004102, 0], + [701, 0.01062935, 0.003838453, 0], + [702, 0.009938846, 0.003589099, 0], + [703, 0.009288422, 0.003354219, 0], + [704, 0.008678854, 0.003134093, 0], + [705, 0.008110916, 0.002929, 0], + [706, 0.007582388, 0.002738139, 0], + [707, 0.007088746, 0.002559876, 0], + [708, 0.006627313, 0.002393244, 0], + [709, 0.006195408, 0.002237275, 0], + [710, 0.005790346, 0.002091, 0], + [711, 0.005409826, 0.001953587, 0], + [712, 0.005052583, 0.00182458, 0], + [713, 0.004717512, 0.00170358, 0], + [714, 0.004403507, 0.001590187, 0], + [715, 0.004109457, 0.001484, 0], + [716, 0.003833913, 0.001384496, 0], + [717, 0.003575748, 0.001291268, 0], + [718, 0.003334342, 0.001204092, 0], + [719, 0.003109075, 0.001122744, 0], + [720, 0.002899327, 0.001047, 0], + [721, 0.002704348, 0.0009765896, 0], + [722, 0.00252302, 0.0009111088, 0], + [723, 0.002354168, 0.0008501332, 0], + [724, 0.002196616, 0.0007932384, 0], + [725, 0.00204919, 0.00074, 0], + [726, 0.00191096, 0.0006900827, 0], + [727, 0.001781438, 0.00064331, 0], + [728, 0.00166011, 0.000599496, 0], + [729, 0.001546459, 0.0005584547, 0], + [730, 0.001439971, 0.00052, 0], + [731, 0.001340042, 0.0004839136, 0], + [732, 0.001246275, 0.0004500528, 0], + [733, 0.001158471, 0.0004183452, 0], + [734, 0.00107643, 0.0003887184, 0], + [735, 0.0009999493, 0.0003611, 0], + [736, 0.0009287358, 0.0003353835, 0], + [737, 0.0008624332, 0.0003114404, 0], + [738, 0.0008007503, 0.0002891656, 0], + [739, 0.000743396, 0.0002684539, 0], + [740, 0.0006900786, 0.0002492, 0], + [741, 0.0006405156, 0.0002313019, 0], + [742, 0.0005945021, 0.0002146856, 0], + [743, 0.0005518646, 0.0001992884, 0], + [744, 0.000512429, 0.0001850475, 0], + [745, 0.0004760213, 0.0001719, 0], + [746, 0.0004424536, 0.0001597781, 0], + [747, 0.0004115117, 0.0001486044, 0], + [748, 0.0003829814, 0.0001383016, 0], + [749, 0.0003566491, 0.0001287925, 0], + [750, 0.0003323011, 0.00012, 0], + [751, 0.0003097586, 0.0001118595, 0], + [752, 0.0002888871, 0.0001043224, 0], + [753, 0.0002695394, 0.0000973356, 0], + [754, 0.0002515682, 0.00009084587, 0], + [755, 0.0002348261, 0.0000848, 0], + [756, 0.000219171, 0.00007914667, 0], + [757, 0.0002045258, 0.000073858, 0], + [758, 0.0001908405, 0.000068916, 0], + [759, 0.0001780654, 0.00006430267, 0], + [760, 0.0001661505, 0.00006, 0], + [761, 0.0001550236, 0.00005598187, 0], + [762, 0.0001446219, 0.0000522256, 0], + [763, 0.0001349098, 0.0000487184, 0], + [764, 0.000125852, 0.00004544747, 0], + [765, 0.000117413, 0.0000424, 0], + [766, 0.0001095515, 0.00003956104, 0], + [767, 0.0001022245, 0.00003691512, 0], + [768, 0.00009539445, 0.00003444868, 0], + [769, 0.0000890239, 0.00003214816, 0], + [770, 0.00008307527, 0.00003, 0], + [771, 0.00007751269, 0.00002799125, 0], + [772, 0.00007231304, 0.00002611356, 0], + [773, 0.00006745778, 0.00002436024, 0], + [774, 0.00006292844, 0.00002272461, 0], + [775, 0.00005870652, 0.0000212, 0], + [776, 0.00005477028, 0.00001977855, 0], + [777, 0.00005109918, 0.00001845285, 0], + [778, 0.00004767654, 0.00001721687, 0], + [779, 0.00004448567, 0.00001606459, 0], + [780, 0.00004150994, 0.00001499, 0], + [781, 0.00003873324, 0.00001398728, 0], + [782, 0.00003614203, 0.00001305155, 0], + [783, 0.00003372352, 0.00001217818, 0], + [784, 0.00003146487, 0.00001136254, 0], + [785, 0.00002935326, 0.0000106, 0], + [786, 0.00002737573, 0.000009885877, 0], + [787, 0.00002552433, 0.000009217304, 0], + [788, 0.00002379376, 0.000008592362, 0], + [789, 0.0000221787, 0.000008009133, 0], + [790, 0.00002067383, 0.0000074657, 0], + [791, 0.00001927226, 0.000006959567, 0], + [792, 0.0000179664, 0.000006487995, 0], + [793, 0.00001674991, 0.000006048699, 0], + [794, 0.00001561648, 0.000005639396, 0], + [795, 0.00001455977, 0.0000052578, 0], + [796, 0.00001357387, 0.000004901771, 0], + [797, 0.00001265436, 0.00000456972, 0], + [798, 0.00001179723, 0.000004260194, 0], + [799, 0.00001099844, 0.000003971739, 0], + [800, 0.00001025398, 0.0000037029, 0], + [801, 0.000009559646, 0.000003452163, 0], + [802, 0.000008912044, 0.000003218302, 0], + [803, 0.000008308358, 0.0000030003, 0], + [804, 0.000007745769, 0.000002797139, 0], + [805, 0.000007221456, 0.0000026078, 0], + [806, 0.000006732475, 0.00000243122, 0], + [807, 0.000006276423, 0.000002266531, 0], + [808, 0.000005851304, 0.000002113013, 0], + [809, 0.000005455118, 0.000001969943, 0], + [810, 0.000005085868, 0.0000018366, 0], + [811, 0.000004741466, 0.00000171223, 0], + [812, 0.000004420236, 0.000001596228, 0], + [813, 0.000004120783, 0.00000148809, 0], + [814, 0.000003841716, 0.000001387314, 0], + [815, 0.000003581652, 0.0000012934, 0], + [816, 0.000003339127, 0.00000120582, 0], + [817, 0.000003112949, 0.000001124143, 0], + [818, 0.000002902121, 0.000001048009, 0], + [819, 0.000002705645, 0.0000009770578, 0], + [820, 0.000002522525, 0.00000091093, 0], + [821, 0.000002351726, 0.0000008492513, 0], + [822, 0.000002192415, 0.0000007917212, 0], + [823, 0.000002043902, 0.0000007380904, 0], + [824, 0.000001905497, 0.0000006881098, 0], + [825, 0.000001776509, 0.00000064153, 0], + [826, 0.000001656215, 0.0000005980895, 0], + [827, 0.000001544022, 0.0000005575746, 0], + [828, 0.00000143944, 0.000000519808, 0], + [829, 0.000001341977, 0.0000004846123, 0], + [830, 0.000001251141, 0.00000045181, 0], + [831, 0, 0, 0], +]) + +# Interpolate CIE data +cie_X = CubicSpline(CIEXYZ[:, 0], CIEXYZ[:, 1], extrapolate=False) +cie_Y = CubicSpline(CIEXYZ[:, 0], CIEXYZ[:, 2], extrapolate=False) +cie_Z = CubicSpline(CIEXYZ[:, 0], CIEXYZ[:, 3], extrapolate=False) + + +def resample(func, freq): return np.nan_to_num(func(1000 / freq) / (freq * freq)) + + +endfreq = 60 # Cover 0 to 60 um +N = 1022 # 1022 real datapoints result in 512 Fourier-space complex values. + +# Resample in frequency space +freqs = np.linspace(0, np.pi * (N - 1) / endfreq, N) +freqs = np.clip(freqs, a_min=1e-40, a_max=None) +Sx = resample(cie_X, freqs) +Sy = resample(cie_Y, freqs) +Sz = resample(cie_Z, freqs) + +# Take FFT +Sp_x = np.fft.rfft(Sx) +Sp_y = np.fft.rfft(Sy) +Sp_z = np.fft.rfft(Sz) + +# Print table +print(f"static const float table_thin_film_cmf[{Sp_x.shape[0]}][6] = {{") +for i in range(Sp_x.shape[0]): + vals = [Sp_x[i].real, Sp_y[i].real, Sp_z[i].real, Sp_x[i].imag, Sp_y[i].imag, Sp_z[i].imag] + print(" {" + ", ".join(f"{val: .7e}f" for val in vals) + " },") +print("};") diff --git a/intern/cycles/kernel/closure/bsdf_util.h b/intern/cycles/kernel/closure/bsdf_util.h index 66792060b15..328bee63219 100644 --- a/intern/cycles/kernel/closure/bsdf_util.h +++ b/intern/cycles/kernel/closure/bsdf_util.h @@ -10,6 +10,7 @@ #include "kernel/types.h" #include "kernel/util/colorspace.h" +#include "kernel/util/lookup_table.h" #include "util/color.h" @@ -351,20 +352,32 @@ ccl_device_inline Spectrum closure_layering_weight(const Spectrum layer_albedo, * transform and store them as a LUT that gets looked up here. * In practice, using the XYZ fit and converting the result from XYZ to RGB is easier. */ -ccl_device_inline Spectrum iridescence_lookup_sensitivity(const float OPD, const float shift) +ccl_device_inline Spectrum iridescence_lookup_sensitivity(KernelGlobals kg, + const float OPD, + const float shift) { - const float phase = M_2PI_F * OPD * 1e-9f; - const float3 val = make_float3(5.4856e-13f, 4.4201e-13f, 5.2481e-13f); - const float3 pos = make_float3(1.6810e+06f, 1.7953e+06f, 2.2084e+06f); - const float3 var = make_float3(4.3278e+09f, 9.3046e+09f, 6.6121e+09f); + /* The LUT covers 0 to 60 um. */ + float x = M_2PI_F * OPD / 60000.0f; + const int size = THIN_FILM_TABLE_SIZE; - float3 xyz = val * sqrt(M_2PI_F * var) * cos(pos * phase + shift) * exp(-sqr(phase) * var); - xyz.x += 1.64408e-8f * cosf(2.2399e+06f * phase + shift) * expf(-4.5282e+09f * sqr(phase)); - return xyz / 1.0685e-7f; + const float3 mag = make_float3( + lookup_table_read(kg, x, kernel_data.tables.thin_film_table + 0 * size, size), + lookup_table_read(kg, x, kernel_data.tables.thin_film_table + 1 * size, size), + lookup_table_read(kg, x, kernel_data.tables.thin_film_table + 2 * size, size)); + const float3 phase = make_float3( + lookup_table_read(kg, x, kernel_data.tables.thin_film_table + 3 * size, size), + lookup_table_read(kg, x, kernel_data.tables.thin_film_table + 4 * size, size), + lookup_table_read(kg, x, kernel_data.tables.thin_film_table + 5 * size, size)); + + return mag * cos(phase - shift); } -ccl_device_inline float3 iridescence_airy_summation( - const float T121, const float R12, const float R23, const float OPD, const float phi) +ccl_device_inline float3 iridescence_airy_summation(KernelGlobals kg, + const float T121, + const float R12, + const float R23, + const float OPD, + const float phi) { if (R23 == 1.0f) { /* Shortcut for TIR on the bottom interface. */ @@ -381,7 +394,7 @@ ccl_device_inline float3 iridescence_airy_summation( /* Truncate after m=3, higher differences have barely any impact. */ for (int m = 1; m < 4; m++) { Cm *= r123; - R += Cm * 2.0f * iridescence_lookup_sensitivity(m * OPD, m * phi); + R += Cm * 2.0f * iridescence_lookup_sensitivity(kg, m * OPD, m * phi); } return R; } @@ -428,32 +441,11 @@ ccl_device Spectrum fresnel_iridescence(KernelGlobals kg, const float2 phi = make_float2(M_PI_F, M_PI_F) - phi12 + phi23; /* Perform Airy summation and average the polarizations. */ - float3 R = mix(iridescence_airy_summation(T121.x, R12.x, R23.x, OPD, phi.x), - iridescence_airy_summation(T121.y, R12.y, R23.y, OPD, phi.y), + float3 R = mix(iridescence_airy_summation(kg, T121.x, R12.x, R23.x, OPD, phi.x), + iridescence_airy_summation(kg, T121.y, R12.y, R23.y, OPD, phi.y), 0.5f); - /* Color space conversion here is tricky. - * In theory, the correct thing would be to compute the spectral color matching functions - * for the RGB channels, take their Fourier transform in wavelength parametrization, and - * then use that in iridescence_lookup_sensitivity(). - * To avoid this complexity, the code here instead uses the reference implementation's - * Gaussian fit of the CIE XYZ curves. However, this means that at this point, R is in - * XYZ values, not RGB. - * Additionally, since I is a reflectivity, not a luminance, the spectral color matching - * functions should be multiplied by the reference illuminant. Since the fit is based on - * the "raw" CIE XYZ curves, the reference illuminant implicitly is a constant spectrum, - * meaning Illuminant E. - * Therefore, we can't just use the regular XYZ->RGB conversion here, we need to include - * a chromatic adaption from E to whatever the white point of the working color space is. - * The proper way to do this would be a Von Kries-style transform, but to keep it simple, - * we just multiply by the white point here. - * - * NOTE: The reference implementation sidesteps all this by just hard-coding a XYZ->CIE RGB - * matrix. Since CIE RGB uses E as its white point, this sidesteps the chromatic adaption - * topic, but the primary colors don't match (unless you happen to actually work in CIE RGB.) - */ - R *= make_float3(kernel_data.film.white_xyz); - return saturate(xyz_to_rgb(kg, R)); + return saturate(R); } CCL_NAMESPACE_END diff --git a/intern/cycles/kernel/types.h b/intern/cycles/kernel/types.h index 607cec6c6d8..06e1250ce7a 100644 --- a/intern/cycles/kernel/types.h +++ b/intern/cycles/kernel/types.h @@ -33,6 +33,7 @@ CCL_NAMESPACE_BEGIN #define FILTER_TABLE_SIZE 1024 #define RAMP_TABLE_SIZE 256 #define SHUTTER_TABLE_SIZE 256 +#define THIN_FILM_TABLE_SIZE 512 #define BSSRDF_MIN_RADIUS 1e-8f #define BSSRDF_MAX_HITS 4 @@ -1433,7 +1434,7 @@ struct KernelTables { int sheen_ltc; int ggx_gen_schlick_ior_s; int ggx_gen_schlick_s; - int pad1; + int thin_film_table; int pad2; }; static_assert_align(KernelTables, 16); diff --git a/intern/cycles/scene/shader.cpp b/intern/cycles/scene/shader.cpp index c8204ab1a87..ca67faf2b36 100644 --- a/intern/cycles/scene/shader.cpp +++ b/intern/cycles/scene/shader.cpp @@ -417,7 +417,7 @@ bool Shader::need_update_geometry() const /* Shader Manager */ -ShaderManager::ShaderManager() +ShaderManager::ShaderManager() : thin_film_table_offset_(TABLE_OFFSET_INVALID) { update_flags = UPDATE_ALL; @@ -629,6 +629,11 @@ void ShaderManager::device_update_common(Device * /*device*/, ktables->ggx_gen_schlick_ior_s = ensure_bsdf_table(dscene, scene, table_ggx_gen_schlick_ior_s); ktables->ggx_gen_schlick_s = ensure_bsdf_table(dscene, scene, table_ggx_gen_schlick_s); + if (thin_film_table_offset_ == TABLE_OFFSET_INVALID) { + thin_film_table_offset_ = scene->lookup_tables->add_table(dscene, thin_film_table); + } + dscene->data.tables.thin_film_table = (int)thin_film_table_offset_; + /* integrator */ KernelIntegrator *kintegrator = &dscene->data.integrator; kintegrator->use_volumes = has_volumes; @@ -655,6 +660,8 @@ void ShaderManager::device_free_common(Device * /*device*/, DeviceScene *dscene, scene->lookup_tables->remove_table(&entry.second); } bsdf_tables.clear(); + scene->lookup_tables->remove_table(&thin_film_table_offset_); + thin_film_table_offset_ = TABLE_OFFSET_INVALID; dscene->shaders.free(); } @@ -862,6 +869,79 @@ static bool to_scene_linear_transform(OCIO::ConstConfigRcPtr &config, } #endif +void ShaderManager::compute_thin_film_table(const Transform &xyz_to_rgb) +{ + /* Our implementation of Thin Film Fresnel is based on + * "A Practical Extension to Microfacet Theory for the Modeling of Varying Iridescence" + * by Laurent Belcour and Pascal Barla + * (https://belcour.github.io/blog/research/publication/2017/05/01/brdf-thin-film.html). + * + * The idea there is that for a naive implementation of Thin Film interference, you'd compute + * the reflectivity for a given wavelength using Airy summation, and then numerically integrate + * the product of this reflectivity function and the Color Matching Functions of the colorspace + * you're working in to obtain the RGB (or XYZ) values. + * However, this integration would require too many evaluations to be practical. + * Therefore, they reformulate the computation as a rapidly converging series involving the + * Fourier transform of the CMFs. + * + * Specifically, we need to: + * - Compute the RGB CMFs from the XYZ CMFs using the working color space's XYZ-to-RGB matrix + * - Resample the RGB CMFs to be parametrized by frequency instead of wavelength as usual + * - Compute the FFT of the CMFs + * - Store the result as a LUT + * - Look up the values for each channel at runtime based on the optical path difference and + * phase shift. + * + * Computing an FFT here would be annoying, so we'd like to precompute it, but we only know + * the XYZ-to-RGB matrix at runtime. Luckily, both resampling and FFT are linear operations, + * so we can precompute the FFT of the resampled XYZ CMFs and then multiply each entry with + * the XYZ-to-RGB matrix to get the RGB LUT. + * + * That's what this function does: We load the precomputed values, convert to RGB, normalize + * the result to make the DC term equal to 1, convert from real/imaginary to magnitude/phase + * since that form is smoother and therefore interpolates more nicely, and then store that + * into the final table that's used by the kernel. + */ + assert(sizeof(table_thin_film_cmf) == 6 * THIN_FILM_TABLE_SIZE * sizeof(float)); + thin_film_table.resize(6 * THIN_FILM_TABLE_SIZE); + + float3 normalization; + float3 prevPhase = zero_float3(); + for (int i = 0; i < THIN_FILM_TABLE_SIZE; i++) { + const float *table_row = table_thin_film_cmf[i]; + /* Load precomputed resampled Fourier-transformed XYZ CMFs. */ + const float3 xyzReal = make_float3(table_row[0], table_row[1], table_row[2]); + const float3 xyzImag = make_float3(table_row[3], table_row[4], table_row[5]); + + /* Linearly combine precomputed data to produce the RGB equivalents. Works since both + * resampling and Fourier transformation are linear operations. */ + const float3 rgbReal = transform_direction(&xyz_to_rgb, xyzReal); + const float3 rgbImag = transform_direction(&xyz_to_rgb, xyzImag); + + /* We normalize all entries by the first element. Since that is the DC component, it normalizes + * the CMF (in non-Fourier space) to an area of 1. */ + if (i == 0) { + normalization = 1.0f / rgbReal; + } + + /* Convert the complex value into magnitude/phase representation. */ + const float3 rgbMag = sqrt(sqr(rgbReal) + sqr(rgbImag)); + float3 rgbPhase = atan2(rgbImag, rgbReal); + + /* Unwrap phase to avoid jumps. */ + rgbPhase -= M_2PI_F * round((rgbPhase - prevPhase) * M_1_2PI_F); + prevPhase = rgbPhase; + + /* Store in lookup table. */ + thin_film_table[i + 0 * THIN_FILM_TABLE_SIZE] = rgbMag.x * normalization.x; + thin_film_table[i + 1 * THIN_FILM_TABLE_SIZE] = rgbMag.y * normalization.y; + thin_film_table[i + 2 * THIN_FILM_TABLE_SIZE] = rgbMag.z * normalization.z; + thin_film_table[i + 3 * THIN_FILM_TABLE_SIZE] = rgbPhase.x; + thin_film_table[i + 4 * THIN_FILM_TABLE_SIZE] = rgbPhase.y; + thin_film_table[i + 5 * THIN_FILM_TABLE_SIZE] = rgbPhase.z; + } +} + void ShaderManager::init_xyz_transforms() { /* Default to ITU-BT.709 in case no appropriate transform found. @@ -890,6 +970,8 @@ void ShaderManager::init_xyz_transforms() rec709_to_b = make_float3(0.0f, 0.0f, 1.0f); is_rec709 = true; + compute_thin_film_table(xyz_to_rec709); + #ifdef WITH_OCIO /* Get from OpenColorO config if it has the required roles. */ OCIO::ConstConfigRcPtr config = nullptr; @@ -955,6 +1037,8 @@ void ShaderManager::init_xyz_transforms() rec709_to_g = make_float3(rec709_to_rgb.y); rec709_to_b = make_float3(rec709_to_rgb.z); is_rec709 = transform_equal_threshold(xyz_to_rgb, xyz_to_rec709, 0.0001f); + + compute_thin_film_table(xyz_to_rgb); #endif } diff --git a/intern/cycles/scene/shader.h b/intern/cycles/scene/shader.h index 240e38e3115..054991c0b47 100644 --- a/intern/cycles/scene/shader.h +++ b/intern/cycles/scene/shader.h @@ -226,6 +226,7 @@ class ShaderManager { static thread_mutex lookup_table_mutex; unordered_map bsdf_tables; + size_t thin_film_table_offset_; thread_spin_lock attribute_lock_; @@ -238,6 +239,7 @@ class ShaderManager { float3 rec709_to_g; float3 rec709_to_b; bool is_rec709; + vector thin_film_table; template size_t ensure_bsdf_table(DeviceScene *dscene, Scene *scene, const float (&table)[n]) @@ -249,6 +251,8 @@ class ShaderManager { const float *table, const size_t n); + void compute_thin_film_table(const Transform &xyz_to_rgb); + uint get_graph_kernel_features(ShaderGraph *graph); virtual void device_update_specific(Device *device, diff --git a/intern/cycles/scene/shader.tables b/intern/cycles/scene/shader.tables index 88d7bc69611..9f350c15814 100644 --- a/intern/cycles/scene/shader.tables +++ b/intern/cycles/scene/shader.tables @@ -1282,4 +1282,521 @@ static const float table_ggx_gen_schlick_s[4096] = { 0.000000f, 0.559516f, 0.644881f, 0.698590f, 0.736655f, 0.762997f, 0.778331f, 0.782183f, 0.773776f, 0.752689f, 0.719302f, 0.675070f, 0.622442f, 0.564517f, 0.504549f, 0.445448f }; +/* Precomputed color matching functions for the Thin Film Fresnel logic. + * Computed by intern/cycles/doc/precompute/thin_film_table.py. */ +static const float table_thin_film_cmf[512][6] = { + { 2.0432441e+00f, 2.0415664e+00f, 2.0443382e+00f, 0.0000000e+00f, 0.0000000e+00f, 0.0000000e+00f }, + { 1.9983457e+00f, 1.9961237e+00f, 1.9758113e+00f, -4.2244055e-01f, -4.2709941e-01f, -5.2414345e-01f }, + { 1.8657730e+00f, 1.8618661e+00f, 1.7748733e+00f, -8.2567141e-01f, -8.3496764e-01f, -1.0129641e+00f }, + { 1.6517839e+00f, 1.6449087e+00f, 1.4551344e+00f, -1.1914287e+00f, -1.2052602e+00f, -1.4335444e+00f }, + { 1.3664505e+00f, 1.3551257e+00f, 1.0382412e+00f, -1.5032892e+00f, -1.5213639e+00f, -1.7576118e+00f }, + { 1.0231439e+00f, 1.0056903e+00f, 5.5239608e-01f, -1.7474670e+00f, -1.7691599e+00f, -1.9634589e+00f }, + { 6.3785226e-01f, 6.1246104e-01f, 3.0429753e-02f, -1.9134691e+00f, -1.9376694e+00f, -2.0374132e+00f }, + { 2.2837314e-01f, 1.9324515e-01f, -4.9243995e-01f, -1.9945763e+00f, -2.0195503e+00f, -1.9747546e+00f }, + {-1.8657879e-01f, -2.3302751e-01f, -9.8100881e-01f, -1.9881260e+00f, -2.0114245e+00f, -1.7800190e+00f }, + {-5.8829752e-01f, -6.4717933e-01f, -1.4024809e+00f, -1.8955839e+00f, -1.9140184e+00f, -1.4666694e+00f }, + {-9.5899607e-01f, -1.0306680e+00f, -1.7286929e+00f, -1.7224040e+00f, -1.7321117e+00f, -1.0561559e+00f }, + {-1.2826530e+00f, -1.3664357e+00f, -1.9380156e+00f, -1.4776888e+00f, -1.4742986e+00f, -5.7643396e-01f }, + {-1.5457512e+00f, -1.6396851e+00f, -2.0168026e+00f, -1.1736708e+00f, -1.1525722e+00f, -6.0041806e-02f }, + {-1.7378727e+00f, -1.8385453e+00f, -1.9602894e+00f, -8.2504850e-01f, -7.8175299e-01f, 4.5812867e-01f }, + {-1.8521202e+00f, -1.9545976e+00f, -1.7728807e+00f, -4.4821419e-01f, -3.7879093e-01f, 9.4321297e-01f }, + {-1.8853497e+00f, -1.9832377e+00f, -1.4678119e+00f, -6.0418966e-02f, 3.8027940e-02f, 1.3627436e+00f }, + {-1.8382065e+00f, -1.9238573e+00f, -1.0662075e+00f, 3.2107950e-01f, 4.4992996e-01f, 1.6888449e+00f }, + {-1.7149688e+00f, -1.7798393e+00f, -5.9560606e-01f, 6.7984063e-01f, 8.3851835e-01f, 1.9001043e+00f }, + {-1.5232160e+00f, -1.5583684e+00f, -8.8054499e-02f, 1.0009933e+00f, 1.1866125e+00f, 1.9829921e+00f }, + {-1.2733441e+00f, -1.2700663e+00f, 4.2209464e-01f, 1.2718800e+00f, 1.4790235e+00f, 1.9327349e+00f }, + {-9.7796158e-01f, -9.2847205e-01f, 9.0053070e-01f, 1.4825635e+00f, 1.7032288e+00f, 1.7535869e+00f }, + {-6.5120250e-01f, -5.4939275e-01f, 1.3153149e+00f, 1.6261747e+00f, 1.8499180e+00f, 1.4584828e+00f }, + {-3.0799728e-01f, -1.5015632e-01f, 1.6390329e+00f, 1.6990923e+00f, 1.9133824e+00f, 1.0681005e+00f }, + { 3.6658384e-02f, 2.5119728e-01f, 1.8506246e+00f, 1.7009524e+00f, 1.8917346e+00f, 6.0940198e-01f }, + { 3.6839770e-01f, 6.3674791e-01f, 1.9367658e+00f, 1.6344969e+00f, 1.7869486e+00f, 1.1375585e-01f }, + { 6.7410565e-01f, 9.8951101e-01f, 1.8927131e+00f, 1.5052792e+00f, 1.6047216e+00f, -3.8522651e-01f }, + { 9.4244238e-01f, 1.2941994e+00f, 1.7225555e+00f, 1.3212505e+00f, 1.3541648e+00f, -8.5399079e-01f }, + { 1.1642460e+00f, 1.5378964e+00f, 1.4388622e+00f, 1.0922564e+00f, 1.0473428e+00f, -1.2613167e+00f }, + { 1.3328022e+00f, 1.7106100e+00f, 1.0617548e+00f, 8.2947778e-01f, 6.9868179e-01f, -1.5804164e+00f }, + { 1.4439766e+00f, 1.8056844e+00f, 6.1747219e-01f, 5.4484789e-01f, 3.2427953e-01f, -1.7907115e+00f }, + { 1.4962139e+00f, 1.8200513e+00f, 1.3653263e-01f, 2.5047951e-01f, -5.8852126e-02f, -1.8791707e+00f }, + { 1.4904142e+00f, 1.7543134e+00f, -3.4837959e-01f, -4.1869429e-02f, -4.3357385e-01f, -1.8411195e+00f }, + { 1.4297062e+00f, 1.6126567e+00f, -8.0465342e-01f, -3.2126679e-01f, -7.8339868e-01f, -1.6804729e+00f }, + { 1.3191365e+00f, 1.4026008e+00f, -1.2019628e+00f, -5.7799515e-01f, -1.0932285e+00f, -1.4093790e+00f }, + { 1.1653019e+00f, 1.1346008e+00f, -1.5142989e+00f, -8.0384679e-01f, -1.3500138e+00f, -1.0473059e+00f }, + { 9.7594967e-01f, 8.2152143e-01f, -1.7216867e+00f, -9.9231935e-01f, -1.5433084e+00f, -6.1963942e-01f }, + { 7.5957005e-01f, 4.7801150e-01f, -1.8114697e+00f, -1.1387137e+00f, -1.6656935e+00f, -1.5589309e-01f }, + { 5.2500431e-01f, 1.1980806e-01f, -1.7790825e+00f, -1.2401410e+00f, -1.7130565e+00f, 3.1234259e-01f }, + { 2.8108645e-01f, -2.3699499e-01f, -1.6282616e+00f, -1.2954513e+00f, -1.6847127e+00f, 7.5356784e-01f }, + { 3.6332866e-02f, -5.7667995e-01f, -1.3706883e+00f, -1.3050983e+00f, -1.5833680e+00f, 1.1385088e+00f }, + {-2.0131134e-01f, -8.8460619e-01f, -1.0250948e+00f, -1.2709581e+00f, -1.4149288e+00f, 1.4420744e+00f }, + {-4.2466549e-01f, -1.1478470e+00f, -6.1590102e-01f, -1.1961206e+00f, -1.1881687e+00f, 1.6450027e+00f }, + {-6.2744716e-01f, -1.3557347e+00f, -1.7148223e-01f, -1.0846679e+00f, -9.1427355e-01f, 1.7350885e+00f }, + {-8.0435204e-01f, -1.5002911e+00f, 2.7781002e-01f, -9.4145691e-01f, -6.0628556e-01f, 1.7079141e+00f }, + {-9.5108829e-01f, -1.5765262e+00f, 7.0173372e-01f, -7.7191607e-01f, -2.7847676e-01f, 1.5670382e+00f }, + {-1.0643760e+00f, -1.5825941e+00f, 1.0722055e+00f, -5.8186478e-01f, 5.4319431e-02f, 1.3236399e+00f }, + {-1.1419231e+00f, -1.5198029e+00f, 1.3651731e+00f, -3.7735860e-01f, 3.7738618e-01f, 9.9564770e-01f }, + {-1.1823884e+00f, -1.3924819e+00f, 1.5621854e+00f, -1.6456084e-01f, 6.7677957e-01f, 6.0642239e-01f }, + {-1.1853414e+00f, -1.2077152e+00f, 1.6515573e+00f, 5.0363107e-02f, 9.3993388e-01f, 1.8308900e-01f }, + {-1.1512256e+00f, -9.7495711e-01f, 1.6290553e+00f, 2.6133453e-01f, 1.1561896e+00f, -2.4536154e-01f }, + {-1.0813294e+00f, -7.0555117e-01f, 1.4980656e+00f, 4.6244065e-01f, 1.3172220e+00f, -6.5006818e-01f }, + {-9.7776486e-01f, -4.1217580e-01f, 1.2692393e+00f, 6.4801253e-01f, 1.4173528e+00f, -1.0042546e+00f }, + {-8.4345273e-01f, -1.0824467e-01f, 9.5964907e-01f, 8.1270879e-01f, 1.4537358e+00f, -1.2850104e+00f }, + {-6.8210713e-01f, 1.9270996e-01f, 5.9152259e-01f, 9.5161115e-01f, 1.4264082e+00f, -1.4747784e+00f }, + {-4.9821361e-01f, 4.7764253e-01f, 1.9064570e-01f, 1.0603350e+00f, 1.3382129e+00f, -1.5624532e+00f }, + {-2.9699139e-01f, 7.3456088e-01f, -2.1544888e-01f, 1.1351553e+00f, 1.1945952e+00f, -1.5440205e+00f }, + {-8.4331210e-02f, 9.5302983e-01f, -5.9938001e-01f, 1.1731450e+00f, 1.0032902e+00f, -1.4227019e+00f }, + { 1.3329893e-01f, 1.1245906e+00f, -9.3577247e-01f, 1.1723192e+00f, 7.7391490e-01f, -1.2086047e+00f }, + { 3.4898608e-01f, 1.2430799e+00f, -1.2029408e+00f, 1.1317772e+00f, 5.1748877e-01f, -9.1790852e-01f }, + { 5.5554553e-01f, 1.3048366e+00f, -1.3842904e+00f, 1.0518287e+00f, 2.4590556e-01f, -5.7165359e-01f }, + { 7.4573426e-01f, 1.3087911e+00f, -1.4693461e+00f, 9.3409459e-01f, -2.8618611e-02f, -1.9422008e-01f }, + { 9.1250017e-01f, 1.2564357e+00f, -1.4543430e+00f, 7.8156655e-01f, -2.9409473e-01f, 1.8839061e-01f }, + { 1.0492585e+00f, 1.1516825e+00f, -1.3423497e+00f, 5.9861591e-01f, -5.3928362e-01f, 5.5035187e-01f }, + { 1.1501834e+00f, 1.0006168e+00f, -1.1429226e+00f, 3.9094060e-01f, -7.5416920e-01f, 8.6776069e-01f }, + { 1.2104996e+00f, 8.1116278e-01f, -8.7132531e-01f, 1.6544448e-01f, -9.3036248e-01f, 1.1202203e+00f }, + { 1.2267563e+00f, 5.9267670e-01f, -5.4737496e-01f, -6.9953557e-02f, -1.0614206e+00f, 1.2921516e+00f }, + { 1.1970665e+00f, 3.5549054e-01f, -1.9400168e-01f, -3.0657838e-01f, -1.1430693e+00f, 1.3737496e+00f }, + { 1.1212920e+00f, 1.1042641e-01f, 1.6437392e-01f, -5.3531819e-01f, -1.1733219e+00f, 1.3615258e+00f }, + { 1.0011598e+00f, -1.3169469e-01f, 5.0353059e-01f, -7.4699270e-01f, -1.1524928e+00f, 1.2584088e+00f }, + { 8.4029598e-01f, -3.6052796e-01f, 8.0108627e-01f, -9.3275389e-01f, -1.0831095e+00f, 1.0734048e+00f }, + { 6.4416776e-01f, -5.6664303e-01f, 1.0379770e+00f, -1.0844993e+00f, -9.6972825e-01f, 8.2085191e-01f }, + { 4.1993089e-01f, -7.4190697e-01f, 1.1996768e+00f, -1.1952759e+00f, -8.1866758e-01f, 5.1932608e-01f }, + { 1.7618312e-01f, -8.7979709e-01f, 1.2770808e+00f, -1.2596514e+00f, -6.3767201e-01f, 1.9028363e-01f }, + {-7.7368064e-02f, -9.7563188e-01f, 1.2669988e+00f, -1.2740302e+00f, -4.3552484e-01f, -1.4346270e-01f }, + {-3.3031036e-01f, -1.0267129e+00f, 1.1722336e+00f, -1.2368933e+00f, -2.2162835e-01f, -4.5932511e-01f }, + {-5.7198590e-01f, -1.0323741e+00f, 1.0012490e+00f, -1.1489455e+00f, -5.5713597e-03f, -7.3646999e-01f }, + {-7.9198235e-01f, -9.9394013e-01f, 7.6745935e-01f, -1.0131562e+00f, 2.0329622e-01f, -9.5719159e-01f }, + {-9.8063034e-01f, -9.1459847e-01f, 4.8819769e-01f, -8.3468791e-01f, 3.9626326e-01f, -1.1080396e+00f }, + {-1.1294806e+00f, -7.9919398e-01f, 1.8344166e-01f, -6.2071170e-01f, 5.6561484e-01f, -1.1806290e+00f }, + {-1.2317342e+00f, -6.5395828e-01f, -1.2561031e-01f, -3.8011503e-01f, 7.0493310e-01f, -1.1720846e+00f }, + {-1.2826005e+00f, -4.8618790e-01f, -4.1801109e-01f, -1.2311506e-01f, 8.0933004e-01f, -1.0850982e+00f }, + {-1.2795631e+00f, -3.0388743e-01f, -6.7448301e-01f, 1.3920474e-01f, 8.7560477e-01f, -9.2760429e-01f }, + {-1.2225347e+00f, -1.1539486e-01f, -8.7868644e-01f, 3.9541135e-01f, 9.0232080e-01f, -7.1210573e-01f }, + {-1.1138928e+00f, 7.0993893e-02f, -1.0182551e+00f, 6.3426588e-01f, 8.8980311e-01f, -4.5470461e-01f }, + {-9.5839035e-01f, 2.4738445e-01f, -1.0855337e+00f, 8.4526531e-01f, 8.4005804e-01f, -1.7391199e-01f }, + {-7.6294513e-01f, 4.0661235e-01f, -1.0779734e+00f, 1.0191532e+00f, 7.5662254e-01f, 1.1067586e-01f }, + {-5.3631748e-01f, 5.4252691e-01f, -9.9816936e-01f, 1.1483718e+00f, 6.4435205e-01f, 3.7974078e-01f }, + {-2.8869270e-01f, 6.5021980e-01f, -8.5354390e-01f, 1.2274310e+00f, 5.0915870e-01f, 6.1555056e-01f }, + {-3.1189758e-02f, 7.2619043e-01f, -6.5570932e-01f, 1.2531733e+00f, 3.5771338e-01f, 8.0312342e-01f }, + { 2.2467775e-01f, 7.6844319e-01f, -4.1956074e-01f, 1.2249211e+00f, 1.9712608e-01f, 9.3117260e-01f }, + { 4.6755968e-01f, 7.7651504e-01f, -1.6216940e-01f, 1.1444985e+00f, 3.4619526e-02f, 9.9277230e-01f }, + { 6.8681677e-01f, 7.5143485e-01f, 9.8442346e-02f, 1.0161250e+00f, -1.2278928e-01f, 9.8570674e-01f }, + { 8.7302848e-01f, 6.9561901e-01f, 3.4455694e-01f, 8.4619062e-01f, -2.6858585e-01f, 9.1248705e-01f }, + { 1.0184344e+00f, 6.1271050e-01f, 5.5996116e-01f, 6.4292096e-01f, -3.9702119e-01f, 7.8004400e-01f }, + { 1.1172867e+00f, 5.0737059e-01f, 7.3100847e-01f, 4.1595516e-01f, -5.0333064e-01f, 5.9912679e-01f }, + { 1.1660958e+00f, 3.8503450e-01f, 8.4747495e-01f, 1.7585715e-01f, -5.8390073e-01f, 3.8345755e-01f }, + { 1.1637579e+00f, 2.5164294e-01f, 9.0315582e-01f, -6.6411461e-02f, -6.3637877e-01f, 1.4870667e-01f }, + { 1.1115598e+00f, 1.1336271e-01f, 8.9616895e-01f, -3.0002887e-01f, -6.5972272e-01f, -8.8635391e-02f }, + { 1.0130627e+00f, -2.3691242e-02f, 8.2895304e-01f, -5.1483222e-01f, -6.5419142e-01f, -3.1240913e-01f }, + { 8.7387435e-01f, -1.5371977e-01f, 7.0796941e-01f, -7.0179143e-01f, -6.2127829e-01f, -5.0787998e-01f }, + { 7.0132329e-01f, -2.7147861e-01f, 5.4313683e-01f, -8.5341381e-01f, -5.6359347e-01f, -6.6270150e-01f }, + { 5.0405606e-01f, -3.7248294e-01f, 3.4704628e-01f, -9.6405989e-01f, -4.8470203e-01f, -7.6768544e-01f }, + { 2.9157993e-01f, -4.5316989e-01f, 1.3401618e-01f, -1.0301565e+00f, -3.8892703e-01f, -8.1733133e-01f }, + { 7.3777427e-02f, -5.1101350e-01f, -8.0941600e-02f, -1.0502990e+00f, -2.8112773e-01f, -8.1008637e-01f }, + {-1.3958121e-01f, -5.4458907e-01f, -2.8317124e-01f, -1.0252407e+00f, -1.6646381e-01f, -7.4832606e-01f }, + {-3.3930161e-01f, -5.5358621e-01f, -4.5936486e-01f, -9.5777500e-01f, -5.0156602e-02f, -6.3806535e-01f }, + {-5.1718164e-01f, -5.3877224e-01f, -5.9843030e-01f, -8.5251915e-01f, 6.2741855e-02f, -4.8842886e-01f }, + {-6.6636049e-01f, -5.0190957e-01f, -6.9217868e-01f, -7.1561623e-01f, 1.6756209e-01f, -3.1092406e-01f }, + {-7.8158516e-01f, -4.4563289e-01f, -7.3578995e-01f, -5.5437396e-01f, 2.6020401e-01f, -1.1857408e-01f }, + {-8.5938392e-01f, -3.7329334e-01f, -7.2803149e-01f, -3.7686225e-01f, 3.3729019e-01f, 7.5025616e-02f }, + {-8.9814238e-01f, -2.8877799e-01f, -6.7122240e-01f, -1.9149271e-01f, 3.9628013e-01f, 2.5665900e-01f }, + {-8.9808289e-01f, -1.9631388e-01f, -5.7095435e-01f, -6.6031109e-03f, 4.3554219e-01f, 4.1438355e-01f }, + {-8.6115374e-01f, -1.0026607e-01f, -4.3559619e-01f, 1.6993172e-01f, 4.5438200e-01f, 5.3830672e-01f }, + {-7.9083887e-01f, -4.9389578e-03f, -2.7562379e-01f, 3.3104356e-01f, 4.5302770e-01f, 6.2119496e-01f }, + {-6.9190296e-01f, 8.5610385e-02f, -1.0282725e-01f, 4.7075370e-01f, 4.3257501e-01f, 6.5887863e-01f }, + {-5.7008912e-01f, 1.6773890e-01f, 7.0545457e-02f, 5.8438396e-01f, 3.9489618e-01f, 6.5043162e-01f }, + {-4.3178830e-01f, 2.3835780e-01f, 2.3264694e-01f, 6.6868946e-01f, 3.4251867e-01f, 5.9812089e-01f }, + {-2.8369962e-01f, 2.9504127e-01f, 3.7283129e-01f, 7.2191144e-01f, 2.7848043e-01f, 5.0713718e-01f }, + {-1.3250012e-01f, 3.3610014e-01f, 4.8234394e-01f, 7.4375316e-01f, 2.0616946e-01f, 3.8513309e-01f }, + { 1.5459315e-02f, 3.6061890e-01f, 5.5485643e-01f, 7.3528573e-01f, 1.2915555e-01f, 2.4160729e-01f }, + { 1.5441801e-01f, 3.6845609e-01f, 5.8681424e-01f, 6.9879452e-01f, 5.1022290e-02f, 8.7182945e-02f }, + { 2.7941886e-01f, 3.6020990e-01f, 5.7758022e-01f, 6.3757887e-01f, -2.4793054e-02f, -6.7165841e-02f }, + { 3.8646401e-01f, 3.3715209e-01f, 5.2937086e-01f, 5.5571992e-01f, -9.5144892e-02f, -2.1088389e-01f }, + { 4.7261003e-01f, 3.0113496e-01f, 4.4699709e-01f, 4.5783147e-01f, -1.5730400e-01f, -3.3454776e-01f }, + { 5.3600299e-01f, 2.5447687e-01f, 3.3743485e-01f, 3.4880871e-01f, -2.0905687e-01f, -4.3047397e-01f }, + { 5.7585774e-01f, 1.9983264e-01f, 2.0926129e-01f, 2.3358843e-01f, -2.4877636e-01f, -4.9318403e-01f }, + { 5.9238812e-01f, 1.4005556e-01f, 7.2000940e-02f, 1.1693212e-01f, -2.7546202e-01f, -5.1969911e-01f }, + { 5.8669729e-01f, 7.8057824e-02f, -6.4569397e-02f, 3.2410712e-03f, -2.8874958e-01f, -5.0965010e-01f }, + { 5.6063858e-01f, 1.6675894e-02f, -1.9110695e-01f, -1.0359034e-01f, -2.8889093e-01f, -4.6520221e-01f }, + { 5.1665774e-01f, -4.1453287e-02f, -2.9933297e-01f, -2.0027993e-01f, -2.7670694e-01f, -3.9080620e-01f }, + { 4.5762775e-01f, -9.3999951e-02f, -3.8256446e-01f, -2.8422122e-01f, -2.5351682e-01f, -2.9280025e-01f }, + { 3.8668585e-01f, -1.3902896e-01f, -4.3611435e-01f, -3.5350736e-01f, -2.2104852e-01f, -1.7889584e-01f }, + { 3.0708152e-01f, -1.7506403e-01f, -4.5753690e-01f, -4.0691984e-01f, -1.8133541e-01f, -5.7587999e-02f }, + { 2.2204203e-01f, -2.0112700e-01f, -4.4670742e-01f, -4.4388813e-01f, -1.3660473e-01f, 6.2465829e-02f }, + { 1.3466009e-01f, -2.1675165e-01f, -4.0573680e-01f, -4.6442701e-01f, -8.9163716e-02f, 1.7305369e-01f }, + { 4.7806162e-02f, -2.2197287e-01f, -3.3873356e-01f, -4.6905935e-01f, -4.1288587e-02f, 2.6696167e-01f }, + {-3.5934447e-02f, -2.1729307e-01f, -2.5143589e-01f, -4.5873123e-01f, 4.8781994e-03f, 3.3843457e-01f }, + {-1.1430100e-01f, -2.0362864e-01f, -1.5074469e-01f, -4.3472619e-01f, 4.7418242e-02f, 3.8351593e-01f }, + {-1.8537634e-01f, -1.8224037e-01f, -4.4194339e-02f, -3.9858374e-01f, 8.4711363e-02f, 4.0024841e-01f }, + {-2.4758948e-01f, -1.5465180e-01f, 6.0599068e-02f, -3.5202633e-01f, 1.1549107e-01f, 3.8872604e-01f }, + {-2.9970625e-01f, -1.2256035e-01f, 1.5647243e-01f, -2.9689707e-01f, 1.3887971e-01f, 3.5100054e-01f }, + {-3.4081273e-01f, -8.7745900e-02f, 2.3719626e-01f, -2.3510909e-01f, 1.5440295e-01f, 2.9085439e-01f }, + {-3.7029555e-01f, -5.1981238e-02f, 2.9786954e-01f, -1.6860614e-01f, 1.6198393e-01f, 2.1346198e-01f }, + {-3.8782273e-01f, -1.6948861e-02f, 3.3520470e-01f, -9.9332486e-02f, 1.6191879e-01f, 1.2496738e-01f }, + {-3.9332754e-01f, 1.5832428e-02f, 3.4768692e-01f, -2.9209838e-02f, 1.5483587e-01f, 3.2011982e-02f }, + {-3.8699651e-01f, 4.5068008e-02f, 3.3560196e-01f, 3.9881894e-02f, 1.4164146e-01f, -5.8752524e-02f }, + {-3.6926213e-01f, 6.9732906e-02f, 3.0093602e-01f, 1.0612297e-01f, 1.2345584e-01f, -1.4113077e-01f }, + {-3.4079883e-01f, 8.9100920e-02f, 2.4716016e-01f, 1.6777413e-01f, 1.0154314e-01f, -2.0979786e-01f }, + {-3.0252077e-01f, 1.0275701e-01f, 1.7891943e-01f, 2.2320090e-01f, 7.7239158e-02f, -2.6063384e-01f }, + {-2.5557859e-01f, 1.1059341e-01f, 1.0165296e-01f, 2.7090320e-01f, 5.1880610e-02f, -2.9095832e-01f }, + {-2.0135239e-01f, 1.1279074e-01f, 2.1174879e-02f, 3.0955044e-01f, 2.6739482e-02f, -2.9965288e-01f }, + {-1.4143811e-01f, 1.0978600e-01f, -5.6752467e-02f, 3.3802115e-01f, 2.9653524e-03f, -2.8716746e-01f }, + {-7.7624745e-02f, 1.0223004e-01f, -1.2682219e-01f, 3.5544543e-01f, -1.8461895e-02f, -2.5541538e-01f }, + {-1.1860633e-02f, 9.0937293e-02f, -1.8453587e-01f, 3.6124728e-01f, -3.6767233e-02f, -2.0756944e-01f }, + { 5.3792053e-02f, 7.6830863e-02f, -2.2648286e-01f, 3.5518354e-01f, -5.1402546e-02f, -1.4777803e-01f }, + { 1.1721447e-01f, 6.0886255e-02f, -2.5052939e-01f, 3.3737578e-01f, -6.2055339e-02f, -8.0825083e-02f }, + { 1.7629855e-01f, 4.4076604e-02f, -2.5590793e-01f, 3.0833145e-01f, -6.8644530e-02f, -1.1760729e-02f }, + { 2.2902230e-01f, 2.7322276e-02f, -2.4320506e-01f, 2.6895099e-01f, -7.1304466e-02f, 5.4469581e-02f }, + { 2.7352950e-01f, 1.1447158e-02f, -2.1425333e-01f, 2.2051846e-01f, -7.0358787e-02f, 1.1337085e-01f }, + { 3.0820967e-01f, -2.8564915e-03f, -1.7193935e-01f, 1.6467383e-01f, -6.6286252e-02f, 1.6119560e-01f }, + { 3.3177360e-01f, -1.5053347e-02f, -1.1994571e-01f, 1.0336674e-01f, -5.9680902e-02f, 1.9517308e-01f }, + { 3.4331967e-01f, -2.4779797e-02f, -6.2448534e-02f, 3.8792332e-02f, -5.1209108e-02f, 2.1365744e-01f }, + { 3.4238652e-01f, -3.1848117e-02f, -3.7944500e-03f, -2.6688604e-02f, -4.1566050e-02f, 2.1618793e-01f }, + { 3.2898794e-01f, -3.6240562e-02f, 5.1818701e-02f, -9.0641956e-02f, -3.1434057e-02f, 2.0346093e-01f }, + { 3.0362699e-01f, -3.8094386e-02f, 1.0063453e-01f, -1.5066073e-01f, -2.1444978e-02f, 1.7722029e-01f }, + { 2.6728747e-01f, -3.7679251e-02f, 1.3958421e-01f, -2.0446855e-01f, -1.2148400e-02f, 1.4007754e-01f }, + { 2.2140196e-01f, -3.5368825e-02f, 1.6647057e-01f, -2.5002073e-01f, -3.9871050e-03f, 9.5278693e-02f }, + { 1.6779740e-01f, -3.1608563e-02f, 1.8007959e-01f, -2.8559730e-01f, 2.7193532e-03f, 4.6437069e-02f }, + { 1.0862036e-01f, -2.6881764e-02f, 1.8021515e-01f, -3.0988272e-01f, 7.7825370e-03f, -2.7467631e-03f }, + { 4.6245277e-02f, -2.1675986e-02f, 1.6765788e-01f, -3.2202772e-01f, 1.1144609e-02f, -4.8756779e-02f }, + {-1.6829456e-02f, -1.6451730e-02f, 1.4405528e-01f, -3.2168937e-01f, 1.2869983e-02f, -8.8505660e-02f }, + {-7.8092557e-02f, -1.1615093e-02f, 1.1175440e-01f, -3.0904719e-01f, 1.3130130e-02f, -1.1953481e-01f }, + {-1.3513201e-01f, -7.4957381e-03f, 7.3592387e-02f, -2.8479395e-01f, 1.2182875e-02f, -1.4015781e-01f }, + {-1.8574251e-01f, -4.3311865e-03f, 3.2662320e-02f, -2.5010165e-01f, 1.0347736e-02f, -1.4953964e-01f }, + {-2.2802245e-01f, -2.2579719e-03f, -7.9269684e-03f, -2.0656439e-01f, 7.9790305e-03f, -1.4770916e-01f }, + {-2.6045550e-01f, -1.3098132e-03f, -4.5279188e-02f, -1.5612130e-01f, 5.4384899e-03f, -1.3550733e-01f }, + {-2.8197245e-01f, -1.4225191e-03f, -7.6910627e-02f, -1.0096366e-01f, 3.0690697e-03f, -1.1447846e-01f }, + {-2.9199054e-01f, -2.4449689e-03f, -1.0090860e-01f, -4.3431280e-02f, 1.1714885e-03f, -8.6715377e-02f }, + {-2.9042837e-01f, -4.1551886e-03f, -1.1603870e-01f, 1.4096174e-02f, -1.5206178e-05f, -5.4672683e-02f }, + {-2.7769640e-01f, -6.2802892e-03f, -1.2179554e-01f, 6.9307245e-02f, -3.2804647e-04f, -2.0963534e-02f }, + {-2.5466387e-01f, -8.5188585e-03f, -1.1839625e-01f, 1.2006048e-01f, 3.1113277e-04f, 1.1843824e-02f }, + {-2.2260469e-01f, -1.0564320e-02f, -1.0672026e-01f, 1.6447485e-01f, 1.8929513e-03f, 4.1414546e-02f }, + {-1.8312587e-01f, -1.2127774e-02f, -8.8202803e-02f, 2.0100453e-01f, 4.3236503e-03f, 6.5807272e-02f }, + {-1.3808262e-01f, -1.2958917e-02f, -6.4692714e-02f, 2.2849463e-01f, 7.4337515e-03f, 8.3595276e-02f }, + {-8.9485281e-02f, -1.2863828e-02f, -3.8287242e-02f, 2.4621597e-01f, 1.0991483e-02f, 9.3941596e-02f }, + {-3.9403093e-02f, -1.1718606e-02f, -1.1157713e-02f, 2.5387788e-01f, 1.4719987e-02f, 9.6624946e-02f }, + { 1.0129973e-02f, -9.4781428e-03f, 1.4620130e-02f, 2.5161951e-01f, 1.8317145e-02f, 9.2017153e-02f }, + { 5.7202687e-02f, -6.1796232e-03f, 3.7218369e-02f, 2.3998130e-01f, 2.1476722e-02f, 8.1016493e-02f }, + { 1.0010318e-01f, -1.9406641e-03f, 5.5180964e-02f, 2.1985907e-01f, 2.3909509e-02f, 6.4944525e-02f }, + { 1.3738147e-01f, 3.0476824e-03f, 6.7511597e-02f, 1.9244433e-01f, 2.5363176e-02f, 4.5416413e-02f }, + { 1.6789566e-01f, 8.5325349e-03f, 7.3720487e-02f, 1.5915467e-01f, 2.5639649e-02f, 2.4196273e-02f }, + { 1.9084055e-01f, 1.4214619e-02f, 7.3828813e-02f, 1.2155844e-01f, 2.4609014e-02f, 3.0496731e-03f }, + { 2.0575863e-01f, 1.9766555e-02f, 6.8332751e-02f, 8.1298167e-02f, 2.2219159e-02f, -1.6395007e-02f }, + { 2.1253423e-01f, 2.4852859e-02f, 5.8132205e-02f, 4.0016439e-02f, 1.8500653e-02f, -3.2765924e-02f }, + { 2.1137264e-01f, 2.9150476e-02f, 4.4431824e-02f, -7.1193554e-04f, 1.3566607e-02f, -4.5039457e-02f }, + { 2.0276657e-01f, 3.2368615e-02f, 2.8623722e-02f, -3.9438843e-02f, 7.6076005e-03f, -5.2598470e-02f }, + { 1.8745294e-01f, 3.4266753e-02f, 1.2162270e-02f, -7.4890658e-02f, 8.8200010e-04f, -5.5254330e-02f }, + { 1.6636314e-01f, 3.4669772e-02f, -3.5585155e-03f, -1.0600370e-01f, -6.2977307e-03f, -5.3232903e-02f }, + { 1.4056992e-01f, 3.3479404e-02f, -1.7315247e-02f, -1.3194691e-01f, -1.3581918e-02f, -4.7127619e-02f }, + { 1.1123404e-01f, 3.0681323e-02f, -2.8144779e-02f, -1.5213224e-01f, -2.0602780e-02f, -3.7825196e-02f }, + { 7.9553344e-02f, 2.6347551e-02f, -3.5406958e-02f, -1.6621355e-01f, -2.6994662e-02f, -2.6411570e-02f }, + { 4.6716336e-02f, 2.0634029e-02f, -3.8816756e-02f, -1.7407592e-01f, -3.2414261e-02f, -1.4066797e-02f }, + { 1.3862022e-02f, 1.3773535e-02f, -3.8444726e-02f, -1.7581701e-01f, -3.6559722e-02f, -1.9582018e-03f }, + {-1.7953087e-02f, 6.0643487e-03f, -3.4687369e-02f, -1.7172280e-01f, -3.9187559e-02f, 8.8592442e-03f }, + {-4.7780405e-02f, -2.1446942e-03f, -2.8211402e-02f, -1.6223969e-01f, -4.0126489e-02f, 1.7527342e-02f }, + {-7.4797284e-02f, -1.0471941e-02f, -1.9877898e-02f, -1.4794503e-01f, -3.9287432e-02f, 2.3447522e-02f }, + {-9.8318243e-02f, -1.8522480e-02f, -1.0653693e-02f, -1.2951770e-01f, -3.6669168e-02f, 2.6317853e-02f }, + {-1.1780036e-01f, -2.5908466e-02f, -1.5181916e-03f, -1.0771015e-01f, -3.2359347e-02f, 2.6142237e-02f }, + {-1.3284398e-01f, -3.2269134e-02f, 6.6262300e-03f, -8.3322753e-02f, -2.6530840e-02f, 2.3212284e-02f }, + {-1.4318991e-01f, -3.7289437e-02f, 1.3032673e-02f, -5.7180947e-02f, -1.9433621e-02f, 1.8064586e-02f }, + {-1.4871436e-01f, -4.0716342e-02f, 1.7170690e-02f, -3.0115293e-02f, -1.1382649e-02f, 1.1418136e-02f }, + {-1.4942241e-01f, -4.2371940e-02f, 1.8765169e-02f, -2.9441932e-03f, -2.7423774e-03f, 4.0981110e-03f }, + {-1.4544091e-01f, -4.2162707e-02f, 1.7810578e-02f, 2.3541226e-02f, 6.0912592e-03f, -3.0467925e-03f }, + {-1.3701113e-01f, -4.0084457e-02f, 1.4560189e-02f, 4.8590663e-02f, 1.4710465e-02f, -9.2260008e-03f }, + {-1.2448119e-01f, -3.6222757e-02f, 9.4920783e-03f, 7.1507263e-02f, 2.2715766e-02f, -1.3780516e-02f }, + {-1.0829835e-01f, -3.0748809e-02f, 3.2556207e-03f, 9.1659857e-02f, 2.9735739e-02f, -1.6241952e-02f }, + {-8.9000454e-02f, -2.3911041e-02f, -3.3962056e-03f, 1.0849519e-01f, 3.5445264e-02f, -1.6372336e-02f }, + {-6.7206163e-02f, -1.6022858e-02f, -9.6823286e-03f, 1.2155030e-01f, 3.9581398e-02f, -1.4181652e-02f }, + {-4.3603374e-02f, -7.4472113e-03f, -1.4869998e-02f, 1.3046481e-01f, 4.1956075e-02f, -9.9220897e-03f }, + {-1.8935201e-02f, 1.4212213e-03f, -1.8345285e-02f, 1.3499290e-01f, 4.2465021e-02f, -4.0600287e-03f }, + { 6.0168239e-03f, 1.0175321e-02f, -1.9671493e-02f, 1.3501405e-01f, 4.1092457e-02f, 2.7713450e-03f }, + { 3.0452502e-02f, 1.8415302e-02f, -1.8630487e-02f, 1.3054189e-01f, 3.7911403e-02f, 9.8342337e-03f }, + { 5.3575556e-02f, 2.5767975e-02f, -1.5243486e-02f, 1.2173004e-01f, 3.3079599e-02f, 1.6357497e-02f }, + { 7.4618583e-02f, 3.1904558e-02f, -9.7697259e-03f, 1.0887408e-01f, 2.6831287e-02f, 2.1610546e-02f }, + { 9.2869594e-02f, 3.6556131e-02f, -2.6833152e-03f, 9.2408669e-02f, 1.9465316e-02f, 2.4973292e-02f }, + { 1.0769905e-01f, 3.9526032e-02f, 5.3695180e-03f, 7.2899106e-02f, 1.1330187e-02f, 2.5995962e-02f }, + { 1.1858608e-01f, 4.0698572e-02f, 1.3628898e-02f, 5.1027063e-02f, 2.8068230e-03f, 2.4443578e-02f }, + { 1.2514239e-01f, 4.0043708e-02f, 2.1290308e-02f, 2.7570301e-02f, -5.7100602e-03f, 2.0321212e-02f }, + { 1.2713232e-01f, 3.7617473e-02f, 2.7578055e-02f, 3.3768264e-03f, -1.3831038e-02f, 1.3877839e-02f }, + { 1.2448772e-01f, 3.3558207e-02f, 3.1816793e-02f, -2.0665763e-02f, -2.1190572e-02f, 5.5884377e-03f }, + { 1.1731622e-01f, 2.8078822e-02f, 3.3494865e-02f, -4.3664547e-02f, -2.7464198e-02f, -3.8841485e-03f }, + { 1.0590204e-01f, 2.1455531e-02f, 3.2313958e-02f, -6.4757661e-02f, -3.2383481e-02f, -1.3744355e-02f }, + { 9.0698748e-02f, 1.4013667e-02f, 2.8220738e-02f, -8.3150988e-02f, -3.5748025e-02f, -2.3131378e-02f }, + { 7.2313890e-02f, 6.1113058e-03f, 2.1417619e-02f, -9.8153261e-02f, -3.7433989e-02f, -3.1193286e-02f }, + { 5.1485797e-02f, -1.8784386e-03f, 1.2351637e-02f, -1.0920761e-01f, -3.7398745e-02f, -3.7161476e-02f }, + { 2.9053511e-02f, -9.5855762e-03f, 1.6821688e-03f, -1.1591775e-01f, -3.5681498e-02f, -4.0419178e-02f }, + { 5.9211358e-03f, -1.6660939e-02f, -9.7699486e-03f, -1.1806713e-01f, -3.2399911e-02f, -4.0558153e-02f }, + {-1.6981683e-02f, -2.2792557e-02f, -2.1087807e-02f, -1.1562988e-01f, -2.7742957e-02f, -3.7418742e-02f }, + {-3.8741132e-02f, -2.7719924e-02f, -3.1333006e-02f, -1.0877276e-01f, -2.1960423e-02f, -3.1109725e-02f }, + {-5.8500301e-02f, -3.1245482e-02f, -3.9623336e-02f, -9.7847654e-02f, -1.5349636e-02f, -2.2006160e-02f }, + {-7.5497746e-02f, -3.3242807e-02f, -4.5207159e-02f, -8.3375096e-02f, -8.2401258e-03f, -1.0725124e-02f }, + {-8.9101463e-02f, -3.3661153e-02f, -4.7528374e-02f, -6.6019418e-02f, -9.7700370e-04f, 1.9188950e-03f }, + {-9.8836421e-02f, -3.2526188e-02f, -4.6276508e-02f, -4.6556896e-02f, 6.0960709e-03f, 1.4975520e-02f }, + {-1.0440417e-01f, -2.9936969e-02f, -4.1417729e-02f, -2.5838563e-02f, 1.2653503e-02f, 2.7432138e-02f }, + {-1.0569352e-01f, -2.6059373e-02f, -3.3204019e-02f, -4.7497006e-03f, 1.8403125e-02f, 3.8293835e-02f }, + {-1.0278171e-01f, -2.1116383e-02f, -2.2159548e-02f, 1.5831790e-02f, 2.3099578e-02f, 4.6663267e-02f }, + {-9.5926257e-02f, -1.5375780e-02f, -9.0450558e-03f, 3.5075880e-02f, 2.6555077e-02f, 5.1814053e-02f }, + {-8.5547894e-02f, -9.1359018e-03f, 5.1971460e-03f, 5.2237609e-02f, 2.8647085e-02f, 5.3251761e-02f }, + {-7.2205881e-02f, -2.7102314e-03f, 1.9513407e-02f, 6.6689049e-02f, 2.9322573e-02f, 5.0757518e-02f }, + {-5.6567062e-02f, 3.5883945e-03f, 3.2818812e-02f, 7.7944429e-02f, 2.8598731e-02f, 4.4410579e-02f }, + {-3.9370611e-02f, 9.4631545e-03f, 4.4080899e-02f, 8.5677264e-02f, 2.6560169e-02f, 3.4587889e-02f }, + {-2.1390488e-02f, 1.4647425e-02f, 5.2400491e-02f, 8.9728814e-02f, 2.3352830e-02f, 2.1940402e-02f }, + {-3.3977376e-03f, 1.8917093e-02f, 5.7083289e-02f, 9.0107732e-02f, 1.9174993e-02f, 7.3477890e-03f }, + { 1.3875307e-02f, 2.2100412e-02f, 5.7696583e-02f, 8.6981297e-02f, 1.4265897e-02f, -8.1451500e-03f }, + { 2.9767048e-02f, 2.4084977e-02f, 5.4106517e-02f, 8.0659072e-02f, 8.8926078e-03f, -2.3405616e-02f }, + { 4.3713297e-02f, 2.4821514e-02f, 4.6492883e-02f, 7.1570269e-02f, 3.3358411e-03f, -3.7297641e-02f }, + { 5.5267432e-02f, 2.4324391e-02f, 3.5340082e-02f, 6.0236417e-02f, -2.1245146e-03f, -4.8768158e-02f }, + { 6.4113295e-02f, 2.2668887e-02f, 2.1404773e-02f, 4.7241098e-02f, -7.2234293e-03f, -5.6927701e-02f }, + { 7.0070584e-02f, 1.9985448e-02f, 5.6624896e-03f, 3.3198633e-02f, -1.1723613e-02f, -6.1119538e-02f }, + { 7.3092937e-02f, 1.6451306e-02f, -1.0762858e-02f, 1.8723523e-02f, -1.5426616e-02f, -6.0971862e-02f }, + { 7.3259365e-02f, 1.2279947e-02f, -2.6681340e-02f, 4.4023131e-03f, -1.8181631e-02f, -5.6428958e-02f }, + { 7.0760028e-02f, 7.7090334e-03f, -4.0925077e-02f, -9.2307353e-03f, -1.9891589e-02f, -4.7758850e-02f }, + { 6.5877641e-02f, 2.9874423e-03f, -5.2435374e-02f, -2.1713091e-02f, -2.0516328e-02f, -3.5536705e-02f }, + { 5.8965968e-02f, -1.6378890e-03f, -6.0342354e-02f, -3.2667852e-02f, -2.0072724e-02f, -2.0605104e-02f }, + { 5.0426923e-02f, -5.9346207e-03f, -6.4031061e-02f, -4.1811826e-02f, -1.8631885e-02f, -4.0140592e-03f }, + { 4.0687761e-02f, -9.6965288e-03f, -6.3189001e-02f, -4.8957913e-02f, -1.6313602e-02f, 1.3054820e-02f }, + { 3.0179699e-02f, -1.2753315e-02f, -5.7831486e-02f, -5.4012291e-02f, -1.3278452e-02f, 2.9374401e-02f }, + { 1.9319077e-02f, -1.4978243e-02f, -4.8302810e-02f, -5.6967166e-02f, -9.7180091e-03f, 4.3761951e-02f }, + { 8.4918903e-03f, -1.6293258e-02f, -3.5253078e-02f, -5.7890111e-02f, -5.8437304e-03f, 5.5166214e-02f }, + {-1.9578038e-03f, -1.6671394e-02f, -1.9592350e-02f, -5.6911112e-02f, -1.8751458e-03f, 6.2745164e-02f }, + {-1.1735428e-02f, -1.6136414e-02f, -2.4254562e-03f, -5.4208485e-02f, 1.9720154e-03f, 6.5928630e-02f }, + {-2.0599529e-02f, -1.4759784e-02f, 1.5027743e-02f, -4.9994780e-02f, 5.4971311e-03f, 6.4461139e-02f }, + {-2.8361937e-02f, -1.2655204e-02f, 3.1520753e-02f, -4.4503629e-02f, 8.5248422e-03f, 5.8421760e-02f }, + {-3.4885090e-02f, -9.9710641e-03f, 4.5871004e-02f, -3.7978311e-02f, 1.0913552e-02f, 4.8219483e-02f }, + {-4.0077312e-02f, -6.8812850e-03f, 5.7045880e-02f, -3.0662555e-02f, 1.2561862e-02f, 3.4564444e-02f }, + {-4.3886891e-02f, -3.5750646e-03f, 6.4237912e-02f, -2.2793817e-02f, 1.3412660e-02f, 1.8417118e-02f }, + {-4.6295806e-02f, -2.4612033e-04f, 6.6923592e-02f, -1.4599033e-02f, 1.3454709e-02f, 9.1921813e-04f }, + {-4.7313857e-02f, 2.9179877e-03f, 6.4901536e-02f, -6.2925748e-03f, 1.2721707e-02f, -1.6688623e-02f }, + {-4.6973783e-02f, 5.7458819e-03f, 5.8307205e-02f, 1.9240421e-03f, 1.1288961e-02f, -3.3156339e-02f }, + {-4.5327793e-02f, 8.0912187e-03f, 4.7603164e-02f, 9.8612876e-03f, 9.2678984e-03f, -4.7314533e-02f }, + {-4.2445665e-02f, 9.8399200e-03f, 3.3545630e-02f, 1.7340254e-02f, 6.7987772e-03f, -5.8158628e-02f }, + {-3.8414379e-02f, 1.0915439e-02f, 1.7129818e-02f, 2.4191457e-02f, 4.0420405e-03f, -6.4920929e-02f }, + {-3.3339003e-02f, 1.1281827e-02f, -4.8188095e-04f, 3.0254388e-02f, 1.1688142e-03f, -6.7125412e-02f }, + {-2.7344413e-02f, 1.0944492e-02f, -1.8043607e-02f, 3.5378273e-02f, -1.6489120e-03f, -6.4621288e-02f }, + {-2.0577260e-02f, 9.9486688e-03f, -3.4315498e-02f, 3.9424324e-02f, -4.2478799e-03f, -5.7593010e-02f }, + {-1.3207559e-02f, 8.3757453e-03f, -4.8152414e-02f, 4.2269538e-02f, -6.4824178e-03f, -4.6546089e-02f }, + {-5.4292841e-03f, 6.3376910e-03f, -5.8585483e-02f, 4.3811905e-02f, -8.2320921e-03f, -3.2269853e-02f }, + { 2.5406027e-03f, 3.9699503e-03f, -6.4890616e-02f, 4.3976666e-02f, -9.4077684e-03f, -1.5779976e-02f }, + { 1.0465100e-02f, 1.4232171e-03f, -6.6639110e-02f, 4.2723101e-02f, -9.9557902e-03f, 1.7549777e-03f }, + { 1.8092339e-02f, -1.1454277e-03f, -6.3726795e-02f, 4.0051172e-02f, -9.8600929e-03f, 1.9097582e-02f }, + { 2.5163013e-02f, -3.5815184e-03f, -5.6379743e-02f, 3.6007312e-02f, -9.1421869e-03f, 3.5030033e-02f }, + { 3.1419858e-02f, -5.7418496e-03f, -4.5136315e-02f, 3.0688617e-02f, -7.8590594e-03f, 4.8440685e-02f }, + { 3.6618763e-02f, -7.5022999e-03f, -3.0806972e-02f, 2.4244789e-02f, -6.0991594e-03f, 5.8402423e-02f }, + { 4.0540895e-02f, -8.7644235e-03f, -1.4414935e-02f, 1.6877291e-02f, -3.9767273e-03f, 6.4237303e-02f }, + { 4.3005059e-02f, -9.4604770e-03f, 2.8779162e-03f, 8.8353686e-03f, -1.6248169e-03f, 6.5562920e-02f }, + { 4.3879424e-02f, -9.5566390e-03f, 1.9854451e-02f, 4.0882499e-04f, 8.1258005e-04f, 6.2317339e-02f }, + { 4.3091714e-02f, -9.0542855e-03f, 3.5328952e-02f, -8.0823218e-03f, 3.1888567e-03f, 5.4760974e-02f }, + { 4.0637004e-02f, -7.9892902e-03f, 4.8230794e-02f, -1.6300915e-02f, 5.3630965e-03f, 4.3455501e-02f }, + { 3.6582375e-02f, -6.4294294e-03f, 5.7679188e-02f, -2.3907844e-02f, 7.2079079e-03f, 2.9221524e-02f }, + { 3.1067869e-02f, -4.4700698e-03f, 6.3043712e-02f, -3.0578516e-02f, 8.6163682e-03f, 1.3078231e-02f }, + { 2.4303399e-02f, -2.2284076e-03f, 6.3986483e-02f, -3.6019648e-02f, 9.5077159e-03f, -3.8304716e-03f }, + { 1.6561538e-02f, 1.6339845e-04f, 6.0483118e-02f, -3.9985325e-02f, 9.8315041e-03f, -2.0317917e-02f }, + { 8.1664100e-03f, 2.5658064e-03f, 5.2821246e-02f, -4.2291270e-02f, 9.5700172e-03f, -3.5238813e-02f }, + {-5.2084329e-04f, 4.8397575e-03f, 4.1576920e-02f, -4.2826341e-02f, 8.7388498e-03f, -4.7569519e-02f }, + {-9.1192688e-03f, 6.8543972e-03f, 2.7570867e-02f, -4.1560418e-02f, 7.3856503e-03f, -5.6478801e-02f }, + {-1.7247044e-02f, 8.4942336e-03f, 1.1807936e-02f, -3.8548033e-02f, 5.5871275e-03f, -6.1384137e-02f }, + {-2.4541050e-02f, 9.6653575e-03f, -4.5957485e-03f, -3.3927382e-02f, 3.4445119e-03f, -6.1989761e-02f }, + {-3.0675911e-02f, 1.0300400e-02f, -2.0492592e-02f, -2.7914627e-02f, 1.0777424e-03f, -5.8303957e-02f }, + {-3.5381329e-02f, 1.0361982e-02f, -3.4784528e-02f, -2.0793715e-02f, -1.3812865e-03f, -5.0634664e-02f }, + {-3.8456627e-02f, 9.8444993e-03f, -4.6499461e-02f, -1.2902223e-02f, -3.7960412e-03f, -3.9563986e-02f }, + {-3.9781586e-02f, 8.7741568e-03f, -5.4857782e-02f, -4.6140154e-03f, -6.0328247e-03f, -2.5903706e-02f }, + {-3.9322855e-02f, 7.2072990e-03f, -5.9324391e-02f, 3.6802910e-03f, -7.9680096e-03f, -1.0635239e-02f }, + {-3.7135518e-02f, 5.2271332e-03f, -5.9642748e-02f, 1.1593905e-02f, -9.4946462e-03f, 5.1615173e-03f }, + {-3.3359691e-02f, 2.9390523e-03f, -5.5848822e-02f, 1.8764255e-02f, -1.0528101e-02f, 2.0385216e-02f }, + {-2.8212326e-02f, 4.6482402e-04f, -4.8264241e-02f, 2.4871974e-02f, -1.1010438e-02f, 3.3990446e-02f }, + {-2.1974720e-02f, -2.0640282e-03f, -3.7469465e-02f, 2.9657347e-02f, -1.0913336e-02f, 4.5059989e-02f }, + {-1.4976502e-02f, -4.5132915e-03f, -2.4259194e-02f, 3.2933235e-02f, -1.0239392e-02f, 5.2866941e-02f }, + {-7.5770537e-03f, -6.7531971e-03f, -9.5834473e-03f, 3.4593725e-02f, -9.0217869e-03f, 5.6922448e-02f }, + {-1.4553057e-04f, -8.6652456e-03f, 5.5212841e-03f, 3.4618033e-02f, -7.3223285e-03f, 5.7005960e-02f }, + { 6.9593159e-03f, -1.0148368e-02f, 2.0005794e-02f, 3.3069476e-02f, -5.2280187e-03f, 5.3176147e-02f }, + { 1.3408292e-02f, -1.1124109e-02f, 3.2881536e-02f, 3.0089655e-02f, -2.8463295e-03f, 4.5762048e-02f }, + { 1.8918755e-02f, -1.1540579e-02f, 4.3288453e-02f, 2.5888282e-02f, -2.9945970e-04f, 3.5335440e-02f }, + { 2.3268465e-02f, -1.1374975e-02f, 5.0552591e-02f, 2.0729358e-02f, 2.2821173e-03f, 2.2666691e-02f }, + { 2.6305520e-02f, -1.0634570e-02f, 5.4229637e-02f, 1.4914618e-02f, 4.7664700e-03f, 8.6675405e-03f }, + { 2.7953884e-02f, -9.3561371e-03f, 5.4131562e-02f, 8.7653361e-03f, 7.0270302e-03f, -5.6749567e-03f }, + { 2.8214287e-02f, -7.6038482e-03f, 5.0334852e-02f, 2.6036251e-03f, 8.9490683e-03f, -1.9368476e-02f }, + { 2.7160575e-02f, -5.4657925e-03f, 4.3170086e-02f, -3.2655872e-03f, 1.0435490e-02f, -3.1484483e-02f }, + { 2.4931910e-02f, -3.0493003e-03f, 3.3193976e-02f, -8.5708304e-03f, 1.1411672e-02f, -4.1221457e-02f }, + { 2.1721420e-02f, -4.7533220e-04f, 2.1146191e-02f, -1.3087663e-02f, 1.1829088e-02f, -4.7957984e-02f }, + { 1.7762161e-02f, 2.1277665e-03f, 7.8943016e-03f, -1.6648803e-02f, 1.1667575e-02f, -5.1292170e-02f }, + { 1.3311360e-02f, 4.6308199e-03f, -5.6290360e-03f, -1.9150322e-02f, 1.0936123e-02f, -5.1064937e-02f }, + { 8.6340161e-03f, 6.9103451e-03f, -1.8492086e-02f, -2.0553673e-02f, 9.6721818e-03f, -4.7365886e-02f }, + { 3.9869144e-03f, 8.8547145e-03f, -2.9828541e-02f, -2.0883623e-02f, 7.9395318e-03f, -4.0521712e-02f }, + {-3.9594232e-04f, 1.0369650e-02f, -3.8896041e-02f, -2.0222385e-02f, 5.8248516e-03f, -3.1068368e-02f }, + {-4.3156158e-03f, 1.1382777e-02f, -4.5124746e-02f, -1.8700539e-02f, 3.4331718e-03f, -1.9709297e-02f }, + {-7.6175500e-03f, 1.1847030e-02f, -4.8152796e-02f, -1.6485468e-02f, 8.8246035e-04f, -7.2629740e-03f }, + {-1.0197468e-02f, 1.1742740e-02f, -4.7846475e-02f, -1.3768202e-02f, -1.7023748e-03f, 5.3963291e-03f }, + {-1.2003645e-02f, 1.1078332e-02f, -4.4304055e-02f, -1.0749616e-02f, -4.1957570e-03f, 1.7400236e-02f }, + {-1.3035596e-02f, 9.8896134e-03f, -3.7843420e-02f, -7.6269485e-03f, -6.4776655e-03f, 2.7946063e-02f }, + {-1.3339488e-02f, 8.2376980e-03f, -2.8974763e-02f, -4.5815060e-03f, -8.4395046e-03f, 3.6350581e-02f }, + {-1.3000746e-02f, 6.2057113e-03f, -1.8360617e-02f, -1.7683407e-03f, -9.9893271e-03f, 4.2094142e-02f }, + {-1.2134562e-02f, 3.8944405e-03f, -6.7663403e-03f, 6.9151786e-04f, -1.1056162e-02f, 4.4852339e-02f }, + {-1.0875054e-02f, 1.4171715e-03f, 4.9952429e-03f, 2.7158854e-03f, -1.1593243e-02f, 4.4513313e-02f }, + {-9.3639400e-03f, -1.1060188e-03f, 1.6121029e-02f, 4.2631385e-03f, -1.1579999e-02f, 4.1179875e-02f }, + {-7.7395626e-03f, -3.5542241e-03f, 2.5872621e-02f, 5.3308888e-03f, -1.1022715e-02f, 3.5156710e-02f }, + {-6.1270163e-03f, -5.8116237e-03f, 3.3625337e-02f, 5.9518948e-03f, -9.9538734e-03f, 2.6923956e-02f }, + {-4.6300484e-03f, -7.7730585e-03f, 3.8907993e-02f, 6.1876762e-03f, -8.4301996e-03f, 1.7099376e-02f }, + {-3.3252185e-03f, -9.3489969e-03f, 4.1430956e-02f, 6.1204392e-03f, -6.5295608e-03f, 6.3920782e-03f }, + {-2.2586224e-03f, -1.0469657e-02f, 4.1100848e-02f, 5.8440162e-03f, -4.3468684e-03f, -4.4487520e-03f }, + {-1.4452820e-03f, -1.1088094e-02f, 3.8021260e-02f, 5.4545635e-03f, -1.9892134e-03f, -1.4686397e-02f }, + {-8.7109943e-04f, -1.1182117e-02f, 3.2479852e-02f, 5.0417442e-03f, 4.2951490e-04f, -2.3646740e-02f }, + {-4.9708837e-04f, -1.0754971e-02f, 2.4923135e-02f, 4.6810536e-03f, 2.7942521e-03f, -3.0762573e-02f }, + {-2.6543215e-04f, -9.8347510e-03f, 1.5921067e-02f, 4.4278329e-03f, 4.9943420e-03f, -3.5609171e-02f }, + {-1.0680342e-04f, -8.4726279e-03f, 6.1242357e-03f, 4.3133633e-03f, 6.9288072e-03f, -3.7928952e-02f }, + { 5.1697023e-05f, -6.7399725e-03f, -3.7831611e-03f, 4.3432608e-03f, 8.5110527e-03f, -3.7643833e-02f }, + { 2.7864618e-04f, -4.7245512e-03f, -1.3131147e-02f, 4.4982051e-03f, 9.6727815e-03f, -3.4854827e-02f }, + { 6.3108673e-04f, -2.5259950e-03f, -2.1309259e-02f, 4.7368594e-03f, 1.0366947e-02f, -2.9829336e-02f }, + { 1.1485601e-03f, -2.5077817e-04f, -2.7806249e-02f, 5.0006689e-03f, 1.0569612e-02f, -2.2977405e-02f }, + { 1.8488340e-03f, 1.9930364e-03f, -3.2241622e-02f, 5.2200945e-03f, 1.0280653e-02f, -1.4818971e-02f }, + { 2.7256310e-03f, 4.1010235e-03f, -3.4387120e-02f, 5.3217386e-03f, 9.5232842e-03f, -5.9446833e-03f }, + { 3.7484986e-03f, 5.9773375e-03f, -3.4176992e-02f, 5.2357663e-03f, 8.3424661e-03f, 3.0267819e-03f }, + { 4.8647987e-03f, 7.5391332e-03f, -3.1706755e-02f, 4.9030152e-03f, 6.8022875e-03f, 1.1491817e-02f }, + { 6.0036245e-03f, 8.7202605e-03f, -2.7220923e-02f, 4.2812280e-03f, 4.9824753e-03f, 1.8902402e-02f }, + { 7.0813156e-03f, 9.4740678e-03f, -2.1090975e-02f, 3.3499169e-03f, 2.9742242e-03f, 2.4801336e-02f }, + { 8.0081220e-03f, 9.7751957e-03f, -1.3785436e-02f, 2.1134871e-03f, 8.7556191e-04f, 2.8849933e-02f }, + { 8.6954901e-03f, 9.6202968e-03f, -5.8344266e-03f, 6.0237895e-04f, -1.2135086e-03f, 3.0846568e-02f }, + { 9.0634047e-03f, 9.0276706e-03f, 2.2086327e-03f, -1.1278516e-03f, -3.1958498e-03f, 3.0735117e-02f }, + { 9.0472238e-03f, 8.0358577e-03f, 9.8054354e-03f, -2.9994446e-03f, -4.9817736e-03f, 2.8603125e-02f }, + { 8.6034904e-03f, 6.7012861e-03f, 1.6468644e-02f, -4.9171199e-03f, -6.4931524e-03f, 2.4670217e-02f }, + { 7.7142852e-03f, 5.0951097e-03f, 2.1792826e-02f, -6.7741855e-03f, -7.6668649e-03f, 1.9267947e-02f }, + { 6.3897964e-03f, 3.2994127e-03f, 2.5478529e-02f, -8.4596250e-03f, -8.4574261e-03f, 1.2812833e-02f }, + { 4.6689187e-03f, 1.4029842e-03f, 2.7348130e-02f, -9.8656489e-03f, -8.8386926e-03f, 5.7747054e-03f }, + { 2.6178316e-03f, -5.0311948e-04f, 2.7352702e-02f, -1.0895171e-02f, -8.8045824e-03f, -1.3572454e-03f }, + { 3.2665896e-04f, -2.3300016e-03f, 2.5569814e-02f, -1.1468681e-02f, -8.3688024e-03f, -8.1082812e-03f }, + {-2.0955614e-03f, -3.9951217e-03f, 2.2192814e-02f, -1.1530031e-02f, -7.5636215e-03f, -1.4049473e-02f }, + {-4.5272483e-03f, -5.4260645e-03f, 1.7512706e-02f, -1.1050746e-02f, -6.4377775e-03f, -1.8824549e-02f }, + {-6.8415526e-03f, -6.5637057e-03f, 1.1894198e-02f, -1.0032551e-02f, -5.0536448e-03f, -2.2170592e-02f }, + {-8.9140477e-03f, -7.3646375e-03f, 5.7478442e-03f, -8.5079761e-03f, -3.4838236e-03f, -2.3931443e-02f }, + {-1.0630320e-02f, -7.8027550e-03f, -4.9963587e-04f, -6.5389849e-03f, -1.8073354e-03f, -2.4063229e-02f }, + {-1.1892964e-02f, -7.8699514e-03f, -6.4347217e-03f, -4.2137410e-03f, -1.0562534e-04f, -2.2632010e-02f }, + {-1.2627535e-02f, -7.5759142e-03f, -1.1684150e-02f, -1.6417391e-03f, 1.5414274e-03f, -1.9804087e-02f }, + {-1.2787083e-02f, -6.9470606e-03f, -1.5937918e-02f, 1.0523758e-03f, 3.0592921e-03f, -1.5829992e-02f }, + {-1.2355009e-02f, -6.0246924e-03f, -1.8966858e-02f, 3.7358884e-03f, 4.3821830e-03f, -1.1023571e-02f }, + {-1.1346069e-02f, -4.8624872e-03f, -2.0633849e-02f, 6.2755362e-03f, 5.4559137e-03f, -5.7378584e-03f }, + {-9.8055228e-03f, -3.5234711e-03f, -2.0898237e-02f, 8.5450004e-03f, 6.2400863e-03f, -3.3953334e-04f }, + {-7.8064877e-03f, -2.0766422e-03f, -1.9813509e-02f, 1.0431903e-02f, 6.7095280e-03f, 4.8161891e-03f }, + {-5.4457140e-03f, -5.9342363e-04f, -1.7518737e-02f, 1.1843895e-02f, 6.8549320e-03f, 9.4085587e-03f }, + {-2.8380700e-03f, 8.5587242e-04f, -1.4224729e-02f, 1.2713490e-02f, 6.6826961e-03f, 1.3170714e-02f }, + {-1.1010098e-04f, 2.2053917e-03f, -1.0196119e-02f, 1.3001384e-02f, 6.2139982e-03f, 1.5904404e-02f }, + { 2.6069288e-03f, 3.3967386e-03f, -5.7308501e-03f, 1.2698108e-02f, 5.4831814e-03f, 1.7489265e-02f }, + { 5.1840850e-03f, 4.3814913e-03f, -1.1385948e-03f, 1.1823976e-02f, 4.5355545e-03f, 1.7886339e-02f }, + { 7.5014882e-03f, 5.1231265e-03f, 3.2803379e-03f, 1.0427377e-02f, 3.4247418e-03f, 1.7135921e-02f }, + { 9.4543389e-03f, 5.5982783e-03f, 7.2542165e-03f, 8.5815728e-03f, 2.2097310e-03f, 1.5350235e-02f }, + { 1.0957921e-02f, 5.7972950e-03f, 1.0556019e-02f, 6.3802596e-03f, 9.5177932e-04f, 1.2701733e-02f }, + { 1.1951349e-02f, 5.7240942e-03f, 1.3015578e-02f, 3.9321712e-03f, -2.8866044e-04f, 9.4081102e-03f }, + { 1.2399887e-02f, 5.3953533e-03f, 1.4527170e-02f, 1.3550925e-03f, -1.4548407e-03f, 5.7152393e-03f }, + { 1.2295804e-02f, 4.8391012e-03f, 1.5052316e-02f, -1.2303640e-03f, -2.4963070e-03f, 1.8793336e-03f }, + { 1.1657761e-02f, 4.0928116e-03f, 1.4617941e-02f, -3.7068583e-03f, -3.3710567e-03f, -1.8504052e-03f }, + { 1.0528865e-02f, 3.2011125e-03f, 1.3310301e-02f, -5.9659730e-03f, -4.0471761e-03f, -5.2475094e-03f }, + { 8.9735579e-03f, 2.2132481e-03f, 1.1265408e-02f, -7.9131280e-03f, -4.5038978e-03f, -8.1213852e-03f }, + { 7.0735772e-03f, 1.1804311e-03f, 8.6568295e-03f, -9.4715399e-03f, -4.7320497e-03f, -1.0327161e-02f }, + { 4.9232702e-03f, 1.5322700e-04f, 5.6818849e-03f, -1.0585073e-02f, -4.7339000e-03f, -1.1771814e-02f }, + { 2.6245411e-03f, -8.2089822e-04f, 2.5472826e-03f, -1.1219901e-02f, -4.5224365e-03f, -1.2416440e-02f }, + { 2.8172512e-04f, -1.6997488e-03f, -5.4478315e-04f, -1.1364977e-02f, -4.1201413e-03f, -1.2274797e-02f }, + {-2.0033396e-03f, -2.4481904e-03f, -3.4091796e-03f, -1.1031368e-02f, -3.5573507e-03f, -1.1408506e-02f }, + {-4.1358071e-03f, -3.0394874e-03f, -5.8882880e-03f, -1.0250574e-02f, -2.8703040e-03f, -9.9195112e-03f }, + {-6.0316920e-03f, -3.4561418e-03f, -7.8598264e-03f, -9.0719946e-03f, -2.0989984e-03f, -7.9405025e-03f }, + {-7.6209687e-03f, -3.6902126e-03f, -9.2417382e-03f, -7.5597395e-03f, -1.2849713e-03f, -5.6241388e-03f }, + {-8.8498157e-03f, -3.7431291e-03f, -9.9940660e-03f, -5.7889881e-03f, -4.6912835e-04f, -3.1318773e-03f }, + {-9.6819704e-03f, -3.6250325e-03f, -1.0117950e-02f, -3.8421194e-03f, 3.1026921e-04f, -6.2320021e-04f }, + {-1.0099211e-02f, -3.3537062e-03f, -9.6520778e-03f, -1.8048112e-03f, 1.0193634e-03f, 1.7540799e-03f }, + {-1.0101024e-02f, -2.9531747e-03f, -8.6670531e-03f, 2.3770820e-04f, 1.6301237e-03f, 3.8718883e-03f }, + {-9.7035541e-03f, -2.4520624e-03f, -7.2582638e-03f, 2.2040995e-03f, 2.1213799e-03f, 5.6279490e-03f }, + {-8.9379454e-03f, -1.8818139e-03f, -5.5378635e-03f, 4.0199251e-03f, 2.4794315e-03f, 6.9496314e-03f }, + {-7.8482186e-03f, -1.2748796e-03f, -3.6264914e-03f, 5.6201474e-03f, 2.6982240e-03f, 7.7955536e-03f }, + {-6.4888085e-03f, -6.6296486e-04f, -1.6453046e-03f, 6.9510657e-03f, 2.7791088e-03f, 8.1550709e-03f }, + {-4.9219024e-03f, -7.5436239e-05f, 2.9118661e-04f, 7.9716716e-03f, 2.7302227e-03f, 8.0459127e-03f }, + {-3.2146989e-03f, 4.6204021e-04f, 2.0811000e-03f, 8.6544352e-03f, 2.5655459e-03f, 7.5103310e-03f }, + {-1.4366957e-03f, 9.2856592e-04f, 3.6397252e-03f, 8.9855532e-03f, 2.3037067e-03f, 6.6101869e-03f }, + { 3.4290320e-04f, 1.3087419e-03f, 4.9025094e-03f, 8.9647078e-03f, 1.9666170e-03f, 5.4214237e-03f }, + { 2.0575913e-03f, 1.5930456e-03f, 5.8264874e-03f, 8.6043946e-03f, 1.5780234e-03f, 4.0283644e-03f }, + { 3.6457182e-03f, 1.7778537e-03f, 6.3902711e-03f, 7.9288826e-03f, 1.1620616e-03f, 2.5182229e-03f }, + { 5.0523670e-03f, 1.8651313e-03f, 6.5927968e-03f, 6.9728695e-03f, 7.4189510e-04f, 9.7615383e-04f }, + { 6.2309247e-03f, 1.8618273e-03f, 6.4510928e-03f, 5.7798947e-03f, 3.3851023e-04f, -5.1892381e-04f }, + { 7.1443301e-03f, 1.7790284e-03f, 5.9973580e-03f, 4.4005648e-03f, -3.0271426e-05f, -1.8975827e-03f }, + { 7.7659918e-03f, 1.6309375e-03f, 5.2756462e-03f, 2.8906458e-03f, -3.5052133e-04f, -3.1021692e-03f }, + { 8.0803703e-03f, 1.4337467e-03f, 4.3384291e-03f, 1.3090698e-03f, -6.1264595e-04f, -4.0881383e-03f }, + { 8.0832244e-03f, 1.2044796e-03f, 3.2432702e-03f, -2.8409913e-04f, -8.1153450e-04f, -4.8245339e-03f }, + { 7.7815223e-03f, 9.5987404e-04f, 2.0497848e-03f, -1.8296927e-03f, -9.4642260e-04f, -5.2937544e-03f }, + { 7.1930194e-03f, 7.1536998e-04f, 8.1700486e-04f, -3.2714172e-03f, -1.0204980e-03f, -5.4907696e-03f }, + { 6.3455106e-03f, 4.8425924e-04f, -3.9879876e-04f, -4.5577335e-03f, -1.0402886e-03f, -5.4219587e-03f }, + { 5.2757676e-03f, 2.7703898e-04f, -1.5458331e-03f, -5.6435893e-03f, -1.0148851e-03f, -5.1037284e-03f }, + { 4.0281815e-03f, 1.0099767e-04f, -2.5780812e-03f, -6.4919524e-03f, -9.5505603e-04f, -4.5610403e-03f }, + { 2.6531387e-03f, -3.9954017e-05f, -3.4562510e-03f, -7.0750899e-03f, -8.7231883e-04f, -3.8259413e-03f }, + { 1.2051698e-03f, -1.4521059e-04f, -4.1484569e-03f, -7.3755443e-03f, -7.7802942e-04f, -2.9361517e-03f }, + {-2.5907559e-04f, -2.1717563e-04f, -4.6307133e-03f, -7.3867579e-03f, -6.8254797e-04f, -1.9337236e-03f }, + {-1.6829650e-03f, -2.6077357e-04f, -4.8873049e-03f, -7.1133072e-03f, -5.9453242e-04f, -8.6375395e-04f }, + {-3.0120540e-03f, -2.8281174e-04f, -4.9110693e-03f, -6.5707202e-03f, -5.2040014e-04f, 2.2688796e-04f }, + {-4.1962084e-03f, -2.9124261e-04f, -4.7036028e-03f, -5.7848638e-03f, -4.6398626e-04f, 1.2908677e-03f }, + {-5.1915888e-03f, -2.9438098e-04f, -4.2753626e-03f, -4.7909096e-03f, -4.2641307e-04f, 2.2817715e-03f }, + {-5.9624068e-03f, -3.0013151e-04f, -3.6456175e-03f, -3.6319022e-03f, -4.0617116e-04f, 3.1555991e-03f }, + {-6.4823693e-03f, -3.1527971e-04f, -2.8421769e-03f, -2.3569799e-03f, -3.9939888e-04f, 3.8723681e-03f }, + {-6.7357333e-03f, -3.4489351e-04f, -1.9008230e-03f, -1.0193140e-03f, -4.0033460e-04f, 4.3977957e-03f }, + {-6.7179131e-03f, -3.9187440e-04f, -8.6437653e-04f, 3.2614626e-04f, -4.0190534e-04f, 4.7049976e-03f }, + {-6.4355979e-03f, -4.5668590e-04f, 2.1865567e-04f, 1.6250238e-03f, -3.9640748e-04f, 4.7761024e-03f }, + {-5.9063643e-03f, -5.3727549e-04f, 1.2958689e-03f, 2.8258477e-03f, -3.7623043e-04f, 4.6036636e-03f }, + {-5.1577928e-03f, -6.2919263e-04f, 2.3131660e-03f, 3.8822596e-03f, -3.3457172e-04f, 4.1917306e-03f }, + {-4.2261244e-03f, -7.2589324e-04f, 3.2173124e-03f, 4.7549802e-03f, -2.6609395e-04f, 3.5564433e-03f }, + {-3.1545190e-03f, -8.1920835e-04f, 3.9587310e-03f, 5.4134386e-03f, -1.6747799e-04f, 2.7260292e-03f }, + {-1.9910016e-03f, -8.9994488e-04f, 4.4943820e-03f, 5.8369768e-03f, -3.7834237e-05f, 1.7401122e-03f }, + {-7.8619899e-04f, -9.5857756e-04f, 4.7905450e-03f, 6.0155707e-03f, 1.2105679e-04f, 6.4828337e-04f }, + { 4.0901549e-04f, -9.8598575e-04f, 4.8252977e-03f, 5.9500292e-03f, 3.0469228e-04f, -4.9205813e-04f }, + { 1.5458475e-03f, -9.7418602e-04f, 4.5904882e-03f, 5.6516646e-03f, 5.0598893e-04f, -1.6185307e-03f }, + { 2.5797556e-03f, -9.1701144e-04f, 4.0930084e-03f, 5.1414582e-03f, 7.1561183e-04f, -2.6671348e-03f }, + { 3.4723610e-03f, -8.1069215e-04f, 3.3552158e-03f, 4.4487697e-03f, 9.2247208e-04f, -3.5759763e-03f }, + { 4.1929966e-03f, -6.5429731e-04f, 2.4143962e-03f, 3.6096699e-03f, 1.1143635e-03f, -4.2891203e-03f }, + { 4.7198206e-03f, -4.5000732e-04f, 1.3212284e-03f, 2.6649927e-03f, 1.2787008e-03f, -4.7603176e-03f }, + { 5.0404454e-03f, -2.0319531e-04f, 1.3727926e-04f, 1.6582197e-03f, 1.4033141e-03f, -4.9563352e-03f }, + { 5.1520623e-03f, 7.7691916e-05f, -1.0683617e-03f, 6.3331796e-04f, 1.4772514e-03f, -4.8596276e-03f }, + { 5.0610736e-03f, 3.8145065e-04f, -2.2231312e-03f, -3.6734915e-04f, 1.4915403e-03f, -4.4701208e-03f }, + { 4.7822705e-03f, 6.9462065e-04f, -3.2554816e-03f, -1.3049246e-03f, 1.4398596e-03f, -3.8059270e-03f }, + { 4.3376236e-03f, 1.0021434e-03f, -4.0995225e-03f, -2.1456761e-03f, 1.3190800e-03f, -2.9028802e-03f }, + { 3.7547723e-03f, 1.2881432e-03f, -4.6994949e-03f, -2.8622514e-03f, 1.1296374e-03f, -1.8128598e-03f }, + { 3.0653148e-03f, 1.5367885e-03f, -5.0137560e-03f, -3.4345202e-03f, 8.7571146e-04f, -6.0096048e-04f }, + { 2.3030099e-03f, 1.7331847e-03f, -5.0179698e-03f, -3.8499749e-03f, 5.6519592e-04f, 6.5834823e-04f }, + { 1.5019998e-03f, 1.8642491e-03f, -4.7072446e-03f, -4.1036972e-03f, 2.0945583e-04f, 1.8858464e-03f }, + { 6.9515775e-04f, 1.9195162e-03f, -4.0970201e-03f, -4.1979195e-03f, -1.7711996e-04f, 3.0026790e-03f }, + {-8.7348532e-05f, 1.8918283e-03f, -3.2225948e-03f, -4.1412386e-03f, -5.7775052e-04f, 3.9356202e-03f }, + {-8.1920829e-04f, 1.7778676e-03f, -2.1372743e-03f, -3.9475551e-03f, -9.7404853e-04f, 4.6221189e-03f }, + {-1.4787856e-03f, 1.5784992e-03f, -9.0922512e-04f, -3.6348291e-03f, -1.3469200e-03f, 5.0147633e-03f }, + {-2.0495823e-03f, 1.2988994e-03f, 3.8278764e-04f, -3.2237464e-03f, -1.6775320e-03f, 5.0848252e-03f }, + {-2.5203501e-03f, 9.4845952e-04f, 1.6545091e-03f, -2.7363897e-03f, -1.9482969e-03f, 4.8246073e-03f }, + {-2.8848800e-03f, 5.4046401e-04f, 2.8218133e-03f, -2.1950050e-03f, -2.1438214e-03f, 4.2483905e-03f }, + {-3.1415201e-03f, 9.1555168e-05f, 3.8064466e-03f, -1.6209340e-03f, -2.2517688e-03f, 3.3918743e-03f }, + {-3.2924860e-03f, -3.7899089e-04f, 4.5414887e-03f, -1.0337725e-03f, -2.2635867e-03f, 2.3101124e-03f }, + {-3.3430416e-03f, -8.5014383e-04f, 4.9761381e-03f, -4.5078548e-04f, -2.1750598e-03f, 1.0740521e-03f }, + {-3.3006303e-03f, -1.3001111e-03f, 5.0794615e-03f, 1.1340632e-04f, -1.9866558e-03f, -2.3410710e-04f }, + {-3.1740342e-03f, -1.7073934e-03f, 4.8428202e-03f, 6.4688247e-04f, -1.7036418e-03f, -1.5264310e-03f }, + {-2.9726308e-03f, -2.0518503e-03f, 4.2807699e-03f, 1.1402525e-03f, -1.3359619e-03f, -2.7152673e-03f }, + {-2.7058010e-03f, -2.3157224e-03f, 3.4303415e-03f, 1.5863090e-03f, -8.9787673e-04f, -3.7193412e-03f }, + {-2.3825261e-03f, -2.4845570e-03f, 2.3487241e-03f, 1.9795659e-03f, -4.0738166e-04f, -4.4694944e-03f }, + {-2.0111896e-03f, -2.5479893e-03f, 1.1094883e-03f, 2.3157498e-03f, 1.1457374e-04f, -4.9136489e-03f }, + {-1.5995787e-03f, -2.5003373e-03f, -2.0240242e-04f, 2.5913114e-03f, 6.4502647e-04f, -5.0206285e-03f }, + {-1.1550609e-03f, -2.3409786e-03f, -1.4964519e-03f, 2.8030207e-03f, 1.1600578e-03f, -4.7825430e-03f }, + {-6.8489383e-04f, -2.0744875e-03f, -2.6829549e-03f, 2.9476947e-03f, 1.6359165e-03f, -4.2155455e-03f }, + {-1.9661330e-04f, -1.7105204e-03f, -3.6793337e-03f, 3.0220929e-03f, 2.0501536e-03f, -3.3588840e-03f }, + { 3.0156322e-04f, -1.2634552e-03f, -4.4160314e-03f, 3.0229968e-03f, 2.3827127e-03f, -2.2722941e-03f }, + { 8.0038103e-04f, -7.5179610e-04f, -4.8415307e-03f, 2.9474683e-03f, 2.6169214e-03f, -1.0319026e-03f }, + { 1.2893008e-03f, -1.9737190e-04f, -4.9261255e-03f, 2.7932624e-03f, 2.7403353e-03f, 2.7508035e-04f }, + { 1.7564093e-03f, 3.7563609e-04f, -4.6641589e-03f, 2.5593543e-03f, 2.7453920e-03f, 1.5565080e-03f }, + { 2.1885218e-03f, 9.4179128e-04f, -4.0745505e-03f, 2.2465228e-03f, 2.6298395e-03f, 2.7218463e-03f }, + { 2.5714952e-03f, 1.4755726e-03f, -3.1995585e-03f, 1.8579280e-03f, 2.3969190e-03f, 3.6886540e-03f }, + { 2.8907456e-03f, 1.9525631e-03f, -2.1018516e-03f, 1.3996128e-03f, 2.0552885e-03f, 4.3885223e-03f }, + { 3.1319469e-03f, 2.3506001e-03f, -8.6008992e-04f, 8.8086598e-04f, 1.6186902e-03f, 4.7720383e-03f }, + { 3.2818684e-03f, 2.6508302e-03f, 4.3667602e-04f, 3.1438789e-04f, 1.1053736e-03f, 4.8124031e-03f }, + { 3.3292901e-03f, 2.8386208e-03f, 1.6953864e-03f, -2.8378072e-04f, 5.3730232e-04f, 4.5074321e-03f }, + { 3.2659258e-03f, 2.9042803e-03f, 2.8256750e-03f, -8.9459237e-04f, -6.0822043e-05f, 3.8797810e-03f }, + { 3.0872787e-03f, 2.8435547e-03f, 3.7464063e-03f, -1.4965909e-03f, -6.6267179e-04f, 2.9753700e-03f }, + { 2.7933517e-03f, 2.6578732e-03f, 4.3915671e-03f, -2.0667546e-03f, -1.2414905e-03f, 1.8601117e-03f }, + { 2.3891455e-03f, 2.3543314e-03f, 4.7150811e-03f, -2.5815436e-03f, -1.7713193e-03f, 6.1517221e-04f }, + { 1.8848863e-03f, 1.9454103e-03f, 4.6941870e-03f, -3.0180919e-03f, -2.2281946e-03f, -6.6889289e-04f }, + { 1.2959455e-03f, 1.4484432e-03f, 4.3311273e-03f, -3.3554695e-03f, -2.5912608e-03f, -1.8987060e-03f }, + { 6.4243404e-04f, 8.8485466e-04f, 3.6530181e-03f, -3.5759298e-03f, -2.8437455e-03f, -2.9848575e-03f }, + {-5.1522699e-05f, 2.7920585e-04f, 2.7099022e-03f, -3.6660567e-03f, -2.9737507e-03f, -3.8484232e-03f }, + {-7.5879860e-04f, -3.4191023e-04f, 1.5711222e-03f, -3.6177249e-03f, -2.9748223e-03f, -4.4267290e-03f }, + {-1.4505177e-03f, -9.5107179e-04f, 3.2027583e-04f, -3.4288023e-03f, -2.8462710e-03f, -4.6779387e-03f }, + {-2.0974700e-03f, -1.5212744e-03f, -9.5087992e-04f, -3.1035332e-03f, -2.5932278e-03f, -4.5841242e-03f }, + {-2.6716079e-03f, -2.0271618e-03f, -2.1491315e-03f, -2.6525671e-03f, -2.2264316e-03f, -4.1525901e-03f }, + {-3.1475288e-03f, -2.4461849e-03f, -3.1866255e-03f, -2.0926161e-03f, -1.7617580e-03f, -3.4153512e-03f }, + {-3.5038492e-03f, -2.7596336e-03f, -3.9873000e-03f, -1.4457546e-03f, -1.2195105e-03f, -2.4267990e-03f }, + {-3.7243815e-03f, -2.9534944e-03f, -4.4924559e-03f, -7.3839512e-04f, -6.2350629e-04f, -1.2597263e-03f }, + {-3.7990349e-03f, -3.0190934e-03f, -4.6650592e-03f, 0.0000000e+00f, 0.0000000e+00f, 0.0000000e+00f }, +}; + CCL_NAMESPACE_END diff --git a/intern/cycles/util/math_float3.h b/intern/cycles/util/math_float3.h index c6355b9b186..8faa217f716 100644 --- a/intern/cycles/util/math_float3.h +++ b/intern/cycles/util/math_float3.h @@ -399,6 +399,16 @@ ccl_device_inline float3 cos(const float3 v) return make_float3(cosf(v.x), cosf(v.y), cosf(v.z)); } +ccl_device_inline float3 atan2(const float3 y, const float3 x) +{ + return make_float3(atan2f(y.x, x.x), atan2f(y.y, x.y), atan2f(y.z, x.z)); +} + +ccl_device_inline float3 round(const float3 a) +{ + return make_float3(roundf(a.x), roundf(a.y), roundf(a.z)); +} + ccl_device_inline float3 reflect(const float3 incident, const float3 unit_normal) { return incident - 2.0f * unit_normal * dot(incident, unit_normal); diff --git a/tests/files/render/principled_bsdf/cycles_renders/principled_bsdf_thinfilm_reflection.png b/tests/files/render/principled_bsdf/cycles_renders/principled_bsdf_thinfilm_reflection.png index 04140dd7237..4027eec21fd 100644 --- a/tests/files/render/principled_bsdf/cycles_renders/principled_bsdf_thinfilm_reflection.png +++ b/tests/files/render/principled_bsdf/cycles_renders/principled_bsdf_thinfilm_reflection.png @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:f8229f20625373319d82b684e5e4d9fefd50d6812bce4177a979d76b67297d5f -size 28539 +oid sha256:5a8d9b7bd4b5191ce399311d55f8fbcae72daf4df91b2ff721240683187f60c1 +size 28511 diff --git a/tests/files/render/principled_bsdf/cycles_renders/principled_bsdf_thinfilm_transmission.png b/tests/files/render/principled_bsdf/cycles_renders/principled_bsdf_thinfilm_transmission.png index dec14bb7609..823dff0ed75 100644 --- a/tests/files/render/principled_bsdf/cycles_renders/principled_bsdf_thinfilm_transmission.png +++ b/tests/files/render/principled_bsdf/cycles_renders/principled_bsdf_thinfilm_transmission.png @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:173f0626fd3a1b7a9df57a1de45a29b453358b99a5f8b4a6f00ea6772f56973e -size 31436 +oid sha256:946489634005eb0d7ea68a77845e19006249843786ee5c03f2bc4c09401390b1 +size 31312 diff --git a/tests/files/render/render_layer/cycles_renders/render_passes_thinfilm_color.png b/tests/files/render/render_layer/cycles_renders/render_passes_thinfilm_color.png index 71725a0b6b2..fdcc127e2e8 100644 --- a/tests/files/render/render_layer/cycles_renders/render_passes_thinfilm_color.png +++ b/tests/files/render/render_layer/cycles_renders/render_passes_thinfilm_color.png @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:d90599a683c8dc1802cc3d2cbc8e5b85e7924fff3c6b2cc1ee8f9dfce0ac6d94 -size 13748 +oid sha256:529cbe7f7c69a8095d6c0323dfba61f62a9ce379d5cc4ab37f96f3b86ee6e0f8 +size 13838