]> git.tdb.fi Git - libs/gl.git/blob - builtin_data/_pbr_prefilter.glsl
Implement image-based lighting in PbrMaterial
[libs/gl.git] / builtin_data / _pbr_prefilter.glsl
1 uniform PrecalcParams
2 {
3         int n_samples;
4         float roughness;
5 };
6
7 uniform samplerCube environment_map;
8
9 const float PI = 3.1415926535;
10
11 vec2 hammersley(int i, int count)
12 {
13         float y = bitfieldReverse(uint(i))*2.3283064e-10;
14         return vec2(float(i)/count, y);
15 }
16
17 vec3 uv_to_hemisphere(float u, float v)
18 {
19         float phi = u*2.0*PI;
20         float r = sqrt(1.0-v*v);
21         return vec3(cos(phi)*r, sin(phi)*r, v);
22 }
23
24 vec3 ndist_ggxtr_importance_sample(vec2 uv, float roughness)
25 {
26         float rough_q = roughness*roughness;
27         rough_q *= rough_q;
28         float v = sqrt((1.0-uv.y)/(1.0+(rough_q-1.0)*uv.y));
29         return uv_to_hemisphere(uv.x, v);
30 }