Files

235 lines
6.5 KiB
GLSL

#ifndef VOGEL_DISK_GLSL
#define VOGEL_DISK_GLSL
vec2 vogelDiskSample(uint sampleIndex, uint sampleCount, float angle)
{
const float goldenAngle = 2.399963f;
float r = sqrt(sampleIndex + 0.5f) / sqrt(sampleCount);
float theta = sampleIndex * goldenAngle + angle;
float sine = sin(theta);
float cosine = cos(theta);
return vec2(cosine, sine) * r;
}
// Some precompute vogel disk array.
// 80 tap disk sample array split to 64 and 16.
// 64 tap.
const vec2 kVeogelDisk_80_64[64] = vec2[]
(
vec2(-0.100968,0.0924954),
vec2(0.0154547,-0.1761),
vec2(0.127264,0.165993),
vec2(-0.233545,-0.0413106),
vec2(-0.0739981,0.275271),
vec2(-0.141124,-0.271724),
vec2(0.306182,0.111816),
vec2(-0.31853,0.131486),
vec2(0.113473,0.361765),
vec2(-0.342006,-0.198197),
vec2(0.40121,-0.0882065),
vec2(-0.244851,0.348279),
vec2(0.347265,0.292672),
vec2(-0.467308,0.019327),
vec2(0.340863,-0.339208),
vec2(-0.0228028,0.493184),
vec2(0.513782,0.0691243),
vec2(-0.435323,0.302892),
vec2(0.118952,-0.528773),
vec2(0.275143,0.480152),
vec2(0.522471,-0.2414),
vec2(-0.226342,0.54085),
vec2(-0.202017,-0.56164),
vec2(0.537533,0.282505),
vec2(0.339367,-0.527807),
vec2(0.107963,0.628167),
vec2(-0.511623,-0.396221),
vec2(0.654454,-0.0542268),
vec2(0.00328842,-0.675455),
vec2(0.460013,0.507088),
vec2(-0.690762,-0.064013),
vec2(0.559717,-0.424814),
vec2(-0.383616,-0.609581),
vec2(0.702951,0.192637),
vec2(-0.656044,0.336685),
vec2(0.259249,-0.699314),
vec2(-0.68895,-0.326493),
vec2(0.736345,-0.227036),
vec2(-0.393677,0.671765),
vec2(-0.165162,-0.769072),
vec2(-0.796179,0.0992387),
vec2(0.525068,-0.61689),
vec2(0.0298145,0.817228),
vec2(-0.579358,-0.587873),
vec2(-0.647842,0.535304),
vec2(0.117129,-0.839661),
vec2(0.484978,0.704305),
vec2(-0.840452,-0.193367),
vec2(-0.270539,0.834002),
vec2(-0.366819,-0.804173),
vec2(0.820175,0.34794),
vec2(-0.846389,0.299793),
vec2(0.228106,0.882733),
vec2(-0.770202,-0.500539),
vec2(0.912719,-0.152298),
vec2(-0.574281,0.734133),
vec2(0.690846,0.645354),
vec2(-0.951927,-0.00926903),
vec2(0.71305,-0.640555),
vec2(-0.0937233,0.960451),
vec2(0.961228,0.179697),
vec2(-0.835572,0.520163),
vec2(0.266462,-0.954069),
vec2(0.450828,0.889103)
);
// 16 tap.
const vec2 kVeogelDisk_80_16[16] = vec2[]
(
vec2(0.0790569,0),
vec2(0.221234,-0.140732),
vec2(0.153552,-0.328134),
vec2(-0.056569,-0.43652),
vec2(-0.324336,-0.388659),
vec2(-0.537872,-0.171591),
vec2(-0.597058,0.15739),
vec2(-0.452361,0.488999),
vec2(-0.127343,0.700024),
vec2(0.28436,0.698491),
vec2(0.647731,0.460103),
vec2(0.831831,0.0425135),
vec2(0.75662,-0.428692),
vec2(0.424849,-0.798908),
vec2(-0.0729619,-0.93591),
vec2(-0.583544,-0.776677)
);
const vec2 kVeogelDisk_43[43] = vec2[]
(
vec2(0,0),
vec2(0.36363637,0),
vec2(0.22672357,0.28430238),
vec2(-0.08091671,0.35451925),
vec2(-0.32762504,0.15777594),
vec2(-0.32762504,-0.15777591),
vec2(-0.08091656,-0.35451928),
vec2(0.22672352,-0.2843024),
vec2(0.6818182,0),
vec2(0.614297,0.29582983),
vec2(0.42510667,0.5330669),
vec2(0.15171885,0.6647236),
vec2(-0.15171883,0.6647236),
vec2(-0.4251068,0.53306687),
vec2(-0.614297,0.29582986),
vec2(-0.6818182,0),
vec2(-0.614297,-0.29582983),
vec2(-0.42510656,-0.53306705),
vec2(-0.15171856,-0.66472363),
vec2(0.1517192,-0.6647235),
vec2(0.4251066,-0.53306705),
vec2(0.614297,-0.29582983),
vec2(1,0),
vec2(0.9555728,0.2947552),
vec2(0.82623875,0.5633201),
vec2(0.6234898,0.7818315),
vec2(0.36534098,0.93087375),
vec2(0.07473,0.9972038),
vec2(-0.22252095,0.9749279),
vec2(-0.50000006,0.8660254),
vec2(-0.73305196,0.6801727),
vec2(-0.90096885,0.43388382),
vec2(-0.98883086,0.14904208),
vec2(-0.9888308,-0.14904249),
vec2(-0.90096885,-0.43388376),
vec2(-0.73305184,-0.6801728),
vec2(-0.4999999,-0.86602545),
vec2(-0.222521,-0.9749279),
vec2(0.07473029,-0.99720377),
vec2(0.36534148,-0.9308736),
vec2(0.6234897,-0.7818316),
vec2(0.8262388,-0.56332),
vec2(0.9555729,-0.29475483)
);
const vec2 kVeogelDisk_71[71] = vec2[]
(
vec2(0,0),
vec2(0.2758621,0),
vec2(0.1719972,0.21567768),
vec2(-0.061385095,0.26894566),
vec2(-0.24854316,0.1196921),
vec2(-0.24854316,-0.11969208),
vec2(-0.061384983,-0.2689457),
vec2(0.17199717,-0.21567771),
vec2(0.51724136,0),
vec2(0.46601835,0.22442262),
vec2(0.32249472,0.40439558),
vec2(0.11509705,0.50427306),
vec2(-0.11509704,0.50427306),
vec2(-0.3224948,0.40439552),
vec2(-0.46601835,0.22442265),
vec2(-0.51724136,0),
vec2(-0.46601835,-0.22442262),
vec2(-0.32249463,-0.40439564),
vec2(-0.11509683,-0.5042731),
vec2(0.11509732,-0.504273),
vec2(0.32249466,-0.40439564),
vec2(0.46601835,-0.22442262),
vec2(0.7586207,0),
vec2(0.7249173,0.22360738),
vec2(0.6268018,0.4273463),
vec2(0.47299224,0.59311354),
vec2(0.27715522,0.7061801),
vec2(0.056691725,0.75649947),
vec2(-0.168809,0.7396005),
vec2(-0.3793104,0.65698475),
vec2(-0.55610836,0.51599306),
vec2(-0.6834936,0.32915324),
vec2(-0.7501475,0.113066405),
vec2(-0.7501475,-0.11306671),
vec2(-0.6834936,-0.32915318),
vec2(-0.5561083,-0.5159932),
vec2(-0.37931028,-0.6569848),
vec2(-0.16880904,-0.7396005),
vec2(0.056691945,-0.7564994),
vec2(0.2771556,-0.7061799),
vec2(0.47299215,-0.59311366),
vec2(0.62680185,-0.4273462),
vec2(0.72491735,-0.22360711),
vec2(1,0),
vec2(0.9749279,0.22252093),
vec2(0.90096885,0.43388376),
vec2(0.7818315,0.6234898),
vec2(0.6234898,0.7818315),
vec2(0.43388364,0.9009689),
vec2(0.22252098,0.9749279),
vec2(0,1),
vec2(-0.22252095,0.9749279),
vec2(-0.43388385,0.90096885),
vec2(-0.62349,0.7818314),
vec2(-0.7818317,0.62348956),
vec2(-0.90096885,0.43388382),
vec2(-0.9749279,0.22252093),
vec2(-1,0),
vec2(-0.9749279,-0.22252087),
vec2(-0.90096885,-0.43388376),
vec2(-0.7818314,-0.6234899),
vec2(-0.6234896,-0.7818316),
vec2(-0.43388346,-0.900969),
vec2(-0.22252055,-0.974928),
vec2(0,-1),
vec2(0.2225215,-0.9749278),
vec2(0.4338835,-0.90096897),
vec2(0.6234897,-0.7818316),
vec2(0.78183144,-0.62348986),
vec2(0.90096885,-0.43388376),
vec2(0.9749279,-0.22252086)
);
#endif