summaryrefslogtreecommitdiff
path: root/pbr/2.1.2.ibl_irradiance
diff options
context:
space:
mode:
authorpryazha <pryadeiniv@mail.ru>2025-08-02 13:21:42 +0500
committerpryazha <pryadeiniv@mail.ru>2025-08-02 13:21:42 +0500
commit2e64d3c5d6eb1eb04168d39d5eb5f2d89af1a8b0 (patch)
tree85c8a586a1343469cdcdab5dccad023053571ecd /pbr/2.1.2.ibl_irradiance
parent33d5f67044d104d69cb2d11e78e6a79bc20d4c4e (diff)
debug chapterHEADmaster
Diffstat (limited to 'pbr/2.1.2.ibl_irradiance')
-rw-r--r--pbr/2.1.2.ibl_irradiance/background.frag17
-rw-r--r--pbr/2.1.2.ibl_irradiance/background.vert19
-rwxr-xr-xpbr/2.1.2.ibl_irradiance/build.sh5
-rw-r--r--pbr/2.1.2.ibl_irradiance/convolution.frag33
-rw-r--r--pbr/2.1.2.ibl_irradiance/convolution.vert17
-rw-r--r--pbr/2.1.2.ibl_irradiance/cubemap.frag25
-rw-r--r--pbr/2.1.2.ibl_irradiance/cubemap.vert17
-rw-r--r--pbr/2.1.2.ibl_irradiance/hdr.frag18
-rw-r--r--pbr/2.1.2.ibl_irradiance/hdr.vert17
-rwxr-xr-xpbr/2.1.2.ibl_irradiance/ibl_irradiancebin402768 -> 0 bytes
-rw-r--r--pbr/2.1.2.ibl_irradiance/ibl_irradiance.c230
-rw-r--r--pbr/2.1.2.ibl_irradiance/pbr.frag114
-rw-r--r--pbr/2.1.2.ibl_irradiance/pbr.vert21
13 files changed, 0 insertions, 533 deletions
diff --git a/pbr/2.1.2.ibl_irradiance/background.frag b/pbr/2.1.2.ibl_irradiance/background.frag
deleted file mode 100644
index e3891eb..0000000
--- a/pbr/2.1.2.ibl_irradiance/background.frag
+++ /dev/null
@@ -1,17 +0,0 @@
-#version 330 core
-
-in vert_t {
- vec3 position;
-} vert;
-
-out vec4 frag_color;
-
-uniform samplerCube cubemap;
-
-void main(void)
-{
- vec3 color = texture(cubemap, vert.position).rgb;
- color /= color + vec3(1.0);
- color = pow(color, vec3(1.0 / 2.2));
- frag_color = vec4(color, 1.0);
-}
diff --git a/pbr/2.1.2.ibl_irradiance/background.vert b/pbr/2.1.2.ibl_irradiance/background.vert
deleted file mode 100644
index 25b9778..0000000
--- a/pbr/2.1.2.ibl_irradiance/background.vert
+++ /dev/null
@@ -1,19 +0,0 @@
-#version 330 core
-
-layout(location = 0) in vec3 position;
-
-out vert_t {
- vec3 position;
-} vert;
-
-uniform mat4 projection;
-uniform mat4 view;
-
-void main(void)
-{
- vert.position = position;
-
- mat4 rotate_view = mat4(mat3(view));
- vec4 clip_position = projection * rotate_view * vec4(position, 1.0);
- gl_Position = clip_position.xyww;
-}
diff --git a/pbr/2.1.2.ibl_irradiance/build.sh b/pbr/2.1.2.ibl_irradiance/build.sh
deleted file mode 100755
index fdecd76..0000000
--- a/pbr/2.1.2.ibl_irradiance/build.sh
+++ /dev/null
@@ -1,5 +0,0 @@
-#!/bin/sh
-. ../../config
-TARGET='ibl_irradiance'
-set -x
-gcc -o $TARGET $CFLAGS $INCLUDE $LFLAGS $TARGET.c $LIBS
diff --git a/pbr/2.1.2.ibl_irradiance/convolution.frag b/pbr/2.1.2.ibl_irradiance/convolution.frag
deleted file mode 100644
index 69ce8af..0000000
--- a/pbr/2.1.2.ibl_irradiance/convolution.frag
+++ /dev/null
@@ -1,33 +0,0 @@
-#version 330 core
-
-in vert_t {
- vec3 position;
-} vert;
-
-out vec4 frag_color;
-
-uniform samplerCube cubemap;
-
-const float PI = 3.14159265359;
-
-void main(void)
-{
- vec3 normal = normalize(vert.position);
- vec3 up = vec3(0.0, 1.0, 0.0);
- vec3 right = cross(up, normal);
- up = cross(normal, right);
-
- vec3 irradiance = vec3(0.0);
- float delta = 0.025;
- int nsamples = 0;
- for (float phi = 0.0; phi < 2.0 * PI; phi += delta) {
- for (float theta = 0.0; theta < 0.5 * PI; theta += delta) {
- vec3 tangent = vec3(sin(theta) * cos(phi), sin(theta) * sin(phi), cos(theta));
- vec3 v = tangent.x * right + tangent.y * up + tangent.z * normal;
- irradiance += texture(cubemap, v).rgb * cos(theta) * sin(theta);
- nsamples++;
- }
- }
- irradiance *= PI / nsamples;
- frag_color = vec4(irradiance, 1.0);
-}
diff --git a/pbr/2.1.2.ibl_irradiance/convolution.vert b/pbr/2.1.2.ibl_irradiance/convolution.vert
deleted file mode 100644
index 8f8862e..0000000
--- a/pbr/2.1.2.ibl_irradiance/convolution.vert
+++ /dev/null
@@ -1,17 +0,0 @@
-#version 330 core
-
-layout(location = 0) in vec3 position;
-
-out vert_t {
- vec3 position;
-} vert;
-
-uniform mat4 projection;
-uniform mat4 view;
-
-void main(void)
-{
- gl_Position = projection * view * vec4(position, 1.0);
-
- vert.position = position;
-}
diff --git a/pbr/2.1.2.ibl_irradiance/cubemap.frag b/pbr/2.1.2.ibl_irradiance/cubemap.frag
deleted file mode 100644
index 349347a..0000000
--- a/pbr/2.1.2.ibl_irradiance/cubemap.frag
+++ /dev/null
@@ -1,25 +0,0 @@
-#version 330 core
-
-in vert_t {
- vec3 position;
-} vert;
-
-out vec4 frag_color;
-
-uniform sampler2D map;
-
-const vec2 inv_atan = vec2(0.1591, 0.3183);
-vec2 sample_spherical_map(vec3 v)
-{
- vec2 uv = vec2(atan(v.z, v.x), asin(v.y));
- uv *= inv_atan;
- uv += 0.5;
- return uv;
-}
-
-void main(void)
-{
- vec2 uv = sample_spherical_map(normalize(vert.position));
- vec3 color = texture(map, uv).rgb;
- frag_color = vec4(color, 1.0);
-}
diff --git a/pbr/2.1.2.ibl_irradiance/cubemap.vert b/pbr/2.1.2.ibl_irradiance/cubemap.vert
deleted file mode 100644
index 8f8862e..0000000
--- a/pbr/2.1.2.ibl_irradiance/cubemap.vert
+++ /dev/null
@@ -1,17 +0,0 @@
-#version 330 core
-
-layout(location = 0) in vec3 position;
-
-out vert_t {
- vec3 position;
-} vert;
-
-uniform mat4 projection;
-uniform mat4 view;
-
-void main(void)
-{
- gl_Position = projection * view * vec4(position, 1.0);
-
- vert.position = position;
-}
diff --git a/pbr/2.1.2.ibl_irradiance/hdr.frag b/pbr/2.1.2.ibl_irradiance/hdr.frag
deleted file mode 100644
index 01650ae..0000000
--- a/pbr/2.1.2.ibl_irradiance/hdr.frag
+++ /dev/null
@@ -1,18 +0,0 @@
-#version 330 core
-
-in vert_t {
- vec2 tex_coords;
-} vert;
-
-out vec4 frag_color;
-
-uniform sampler2D colorbuffer;
-
-void main(void)
-{
- const float gamma = 2.2;
- vec3 color = vec3(texture(colorbuffer, vert.tex_coords));
- color /= color + vec3(1.0);
- color = pow(color, vec3(1.0 / gamma));
- frag_color = vec4(color, 1.0);
-}
diff --git a/pbr/2.1.2.ibl_irradiance/hdr.vert b/pbr/2.1.2.ibl_irradiance/hdr.vert
deleted file mode 100644
index 1b953d7..0000000
--- a/pbr/2.1.2.ibl_irradiance/hdr.vert
+++ /dev/null
@@ -1,17 +0,0 @@
-#version 330 core
-
-layout(location = 0) in vec3 position;
-layout(location = 2) in vec2 tex_coords;
-
-out vert_t {
- vec2 tex_coords;
-} vert;
-
-uniform mat4 model;
-
-void main(void)
-{
- gl_Position = model * vec4(position, 1.0);
-
- vert.tex_coords = tex_coords;
-}
diff --git a/pbr/2.1.2.ibl_irradiance/ibl_irradiance b/pbr/2.1.2.ibl_irradiance/ibl_irradiance
deleted file mode 100755
index 4561ae2..0000000
--- a/pbr/2.1.2.ibl_irradiance/ibl_irradiance
+++ /dev/null
Binary files differ
diff --git a/pbr/2.1.2.ibl_irradiance/ibl_irradiance.c b/pbr/2.1.2.ibl_irradiance/ibl_irradiance.c
deleted file mode 100644
index e6f1390..0000000
--- a/pbr/2.1.2.ibl_irradiance/ibl_irradiance.c
+++ /dev/null
@@ -1,230 +0,0 @@
-#include "GL/glew.h"
-#include "GLFW/glfw3.h"
-#include "common.h"
-
-int main(void)
-{
- state_t state = init_state(1600, 800);
-
- init_glfw(&state);
- init_gl();
- glDepthFunc(GL_LEQUAL);
-
- /* meshes */
- Mesh *cube = mesh_load_obj(state.arena, "../../data/models/cube.obj");
- Mesh *sphere = mesh_load_obj(state.arena, "../../data/models/sphere.obj");
- Mesh *quad = mesh_gen_quad(state.arena);
-
- /* shaders */
- add_shader("pbr.vert", "pbr.frag", 0);
- add_shader("hdr.vert", "hdr.frag", 0);
- add_shader("cubemap.vert", "cubemap.frag", 0);
- add_shader("background.vert", "background.frag", 0);
- add_shader("convolution.vert", "convolution.frag", 0);
-
- light_t lights[4] = {
- {{-10.0f, 0.0f, 20.0f}, {300.0f, 300.0f, 300.0f}},
- {{-5.0f, 0.0f, 20.0f}, {300.0f, 300.0f, 300.0f}},
- {{ 5.0f, 0.0f, 20.0f}, {300.0f, 300.0f, 300.0f}},
- {{ 10.0f, 0.0f, 20.0f}, {300.0f, 300.0f, 300.0f}},
- };
-
- /* textures */
- U32 hdr_texture = load_hdr_texture("../../data/textures/loigerwiesen.hdr");;
-
- /* framebuffers */
- U32 hdr_fbo, hdr_colorbuffer, hdr_rbo;
- glGenFramebuffers(1, &hdr_fbo);
- glGenTextures(1, &hdr_colorbuffer);
- glBindTexture(GL_TEXTURE_2D, hdr_colorbuffer);
- glTexImage2D(GL_TEXTURE_2D, 0, GL_RGBA16F, state.width, state.height, 0, GL_RGBA, GL_FLOAT, 0);
- glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MIN_FILTER, GL_LINEAR);
- glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MAG_FILTER, GL_LINEAR);
- glGenRenderbuffers(1, &hdr_rbo);
- glBindRenderbuffer(GL_RENDERBUFFER, hdr_rbo);
- glRenderbufferStorage(GL_RENDERBUFFER, GL_DEPTH_COMPONENT, state.width, state.height);
- glBindFramebuffer(GL_FRAMEBUFFER, hdr_fbo);
- glFramebufferTexture2D(GL_FRAMEBUFFER, GL_COLOR_ATTACHMENT0, GL_TEXTURE_2D, hdr_colorbuffer, 0);
- glFramebufferRenderbuffer(GL_FRAMEBUFFER, GL_DEPTH_ATTACHMENT, GL_RENDERBUFFER, hdr_rbo);
- if (glCheckFramebufferStatus(GL_FRAMEBUFFER) != GL_FRAMEBUFFER_COMPLETE)
- die("failed to create framebuffer");
- glBindRenderbuffer(GL_RENDERBUFFER, 0);
- glBindTexture(GL_TEXTURE_2D, 0);
- glBindFramebuffer(GL_FRAMEBUFFER, 0);
-
- U32 capture_fbo, capture_rbo;
- glGenFramebuffers(1, &capture_fbo);
- glGenRenderbuffers(1, &capture_rbo);
- glBindFramebuffer(GL_FRAMEBUFFER, capture_fbo);
- glBindRenderbuffer(GL_RENDERBUFFER, capture_rbo);
- glRenderbufferStorage(GL_RENDERBUFFER, GL_DEPTH_COMPONENT24, 512, 512);
- glFramebufferRenderbuffer(GL_FRAMEBUFFER, GL_DEPTH_ATTACHMENT, GL_RENDERBUFFER, capture_rbo);
- if (glCheckFramebufferStatus(GL_FRAMEBUFFER) != GL_FRAMEBUFFER_COMPLETE)
- die("failed to create framebuffer");
- glBindRenderbuffer(GL_RENDERBUFFER, 0);
- glBindFramebuffer(GL_FRAMEBUFFER, 0);
-
- U32 cubemap;
- glGenTextures(1, &cubemap);
- glBindTexture(GL_TEXTURE_CUBE_MAP, cubemap);
- for (U32 i = 0; i < 6; i++)
- glTexImage2D(GL_TEXTURE_CUBE_MAP_POSITIVE_X + i, 0, GL_RGB16F, 512, 512, 0, GL_RGB, GL_FLOAT, 0);
- glTexParameteri(GL_TEXTURE_CUBE_MAP, GL_TEXTURE_WRAP_S, GL_CLAMP_TO_EDGE);
- glTexParameteri(GL_TEXTURE_CUBE_MAP, GL_TEXTURE_WRAP_T, GL_CLAMP_TO_EDGE);
- glTexParameteri(GL_TEXTURE_CUBE_MAP, GL_TEXTURE_WRAP_R, GL_CLAMP_TO_EDGE);
- glTexParameteri(GL_TEXTURE_CUBE_MAP, GL_TEXTURE_MIN_FILTER, GL_NEAREST);
- glTexParameteri(GL_TEXTURE_CUBE_MAP, GL_TEXTURE_MAG_FILTER, GL_NEAREST);
-
- MAT4 capture_projection = perspective(90.0f, 1.0f, 0.1f, 10.0f);
- V3F capture_origin = {0};
- MAT4 capture_views[6] = {
- look_at(capture_origin, v3f( 1.0f, 0.0f, 0.0f), v3f(0.0f, -1.0f, 0.0f)),
- look_at(capture_origin, v3f(-1.0f, 0.0f, 0.0f), v3f(0.0f, -1.0f, 0.0f)),
- look_at(capture_origin, v3f( 0.0f, 1.0f, 0.0f), v3f(0.0f, 0.0f, 1.0f)),
- look_at(capture_origin, v3f( 0.0f, -1.0f, 0.0f), v3f(0.0f, 0.0f, -1.0f)),
- look_at(capture_origin, v3f( 0.0f, 0.0f, 1.0f), v3f(0.0f, -1.0f, 0.0f)),
- look_at(capture_origin, v3f( 0.0f, 0.0f, -1.0f), v3f(0.0f, -1.0f, 0.0f)),
- };
-
- glBindFramebuffer(GL_FRAMEBUFFER, capture_fbo);
- U32 shader = find_shader("cubemap");
- if (!shader) die("waht");
- glUseProgram(shader);
- shader_set_mat4fv(shader, "projection", capture_projection);
- glActiveTexture(GL_TEXTURE0);
- glBindTexture(GL_TEXTURE_2D, hdr_texture);
-
- glViewport(0, 0, 512, 512);
- for (U32 i = 0; i < 6; i++) {
- shader_set_mat4fv(shader, "view", capture_views[i]);
- glFramebufferTexture2D(GL_FRAMEBUFFER, GL_COLOR_ATTACHMENT0, GL_TEXTURE_CUBE_MAP_POSITIVE_X + i, cubemap, 0);
- glClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT);
- mesh_draw(cube);
- }
- glUseProgram(0);
- glBindFramebuffer(GL_FRAMEBUFFER, 0);
-
- U32 irradiance_map;
- glGenTextures(1, &irradiance_map);
- glBindTexture(GL_TEXTURE_CUBE_MAP, irradiance_map);
- for (U32 i = 0; i < 6; i++)
- glTexImage2D(GL_TEXTURE_CUBE_MAP_POSITIVE_X + i, 0, GL_RGB16F, 32, 32, 0, GL_RGB, GL_FLOAT, 0);
- glTexParameteri(GL_TEXTURE_CUBE_MAP, GL_TEXTURE_WRAP_S, GL_CLAMP_TO_EDGE);
- glTexParameteri(GL_TEXTURE_CUBE_MAP, GL_TEXTURE_WRAP_T, GL_CLAMP_TO_EDGE);
- glTexParameteri(GL_TEXTURE_CUBE_MAP, GL_TEXTURE_WRAP_R, GL_CLAMP_TO_EDGE);
- glTexParameteri(GL_TEXTURE_CUBE_MAP, GL_TEXTURE_MIN_FILTER, GL_LINEAR);
- glTexParameteri(GL_TEXTURE_CUBE_MAP, GL_TEXTURE_MAG_FILTER, GL_LINEAR);
- glBindTexture(GL_TEXTURE_CUBE_MAP, 0);
-
- glBindFramebuffer(GL_FRAMEBUFFER, capture_fbo);
- glBindRenderbuffer(GL_RENDERBUFFER, capture_rbo);
- glRenderbufferStorage(GL_RENDERBUFFER, GL_DEPTH_COMPONENT24, 32, 32);
- glBindRenderbuffer(GL_RENDERBUFFER, 0);
- glBindFramebuffer(GL_FRAMEBUFFER, 0);
-
- glBindFramebuffer(GL_FRAMEBUFFER, capture_fbo);
- shader = find_shader("convolution");
- glUseProgram(shader);
- shader_set_mat4fv(shader, "projection", capture_projection);
- glActiveTexture(GL_TEXTURE0);
- glBindTexture(GL_TEXTURE_CUBE_MAP, cubemap);
- glViewport(0, 0, 32, 32);
- for (U32 i = 0; i < 6; i++) {
- shader_set_mat4fv(shader, "view", capture_views[i]);
- glFramebufferTexture2D(GL_FRAMEBUFFER, GL_COLOR_ATTACHMENT0, GL_TEXTURE_CUBE_MAP_POSITIVE_X + i, irradiance_map, 0);
- glClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT);
- mesh_draw(cube);
- }
- glUseProgram(0);
- glBindFramebuffer(GL_FRAMEBUFFER, 0);
-
- glViewport(0, 0, state.width, state.height);
-
- F32 time = 0;
-
- while (!glfwWindowShouldClose(state.window)) {
- handle_glfw_events(state.window, &state.input);
- F32 dt = lock_framerate(60);
- fps_info(dt, 10);
-
- /* update */
- update_camera_first_person(&state.camera, &state.input, dt, 2.0f);
- F32 limit = 4.0f;
- for (U32 i = 0; i < (sizeof(lights) / sizeof(lights[0])); i++)
- lights[i].position.y = sinf(time + i) * limit;
- time += dt;
-
- /* render */
- F32 ar = (F32)state.width / (F32)state.height;
- MAT4 projection = camera_persp(state.camera, ar);
- MAT4 view = get_view_matrix(&state.camera);
-
- glClearColor(0.16f, 0.16f, 0.16f, 1.0f);
-
- glBindFramebuffer(GL_FRAMEBUFFER, hdr_fbo);
- glClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT);
-
- shader = find_shader("pbr");
- glUseProgram(shader);
- glActiveTexture(GL_TEXTURE0);
- glBindTexture(GL_TEXTURE_CUBE_MAP, irradiance_map);
- shader_set_mat4fv(shader, "projection", projection);
- shader_set_mat4fv(shader, "view", view);
- shader_set_3fv(shader, "camera", state.camera.pos);
- shader_set_3fv(shader, "color", v3f(0.04, 0.04, 0.04));
- shader_set_1f(shader, "ao", 1.0f);
- for (U32 i = 0; i < (sizeof(lights) / sizeof(lights[0])); i++) {
- char str[512];
- snprintf(str, 512, "lights[%d].position", i);
- shader_set_3fv(shader, str, lights[i].position);
- snprintf(str, 512, "lights[%d].color", i);
- shader_set_3fv(shader, str, lights[i].color);
- }
- S32 rows = 7;
- S32 cols = 7;
- F32 offset = 3.0f;
- for (S32 row = 0; row < rows; row++) {
- shader_set_1f(shader, "metallic", (F32)row / (F32)rows);
- for (S32 col = 0; col < cols; col++) {
- shader_set_1f(shader, "roughness", clamp(0.05f, (F32)col / (F32)cols, 1.0f));
- V3F pos = {(col - cols / 2.0f) * offset, (row - rows / 2.0f) * offset, 0.0f};
- MAT4 model = mat4_make_translate(pos);
- shader_set_mat4fv(shader, "model", model);
- mesh_draw(sphere);
- }
- }
-
- for (U32 i = 0; i < (sizeof(lights) / sizeof(lights[0])); i++) {
- MAT4 model = mat4_make_scale(v3f(0.5f, 0.5f, 0.5f));
- model = mat4_translate(model, lights[i].position);
- shader_set_mat4fv(shader, "model", model);
- mesh_draw(sphere);
- }
-
- glUseProgram(0);
-
- shader = find_shader("background");
- glUseProgram(shader);
- shader_set_mat4fv(shader, "projection", projection);
- shader_set_mat4fv(shader, "view", view);
- glActiveTexture(GL_TEXTURE0);
- glBindTexture(GL_TEXTURE_CUBE_MAP, irradiance_map);
- mesh_draw(cube);
- glUseProgram(0);
-
- glBindFramebuffer(GL_FRAMEBUFFER, 0);
- glClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT);
-
- shader = find_shader("hdr");
- if (!shader) die("failed to find hdr shader!");
- glUseProgram(shader);
- glBindTexture(GL_TEXTURE_2D, hdr_colorbuffer);
- shader_set_mat4fv(shader, "model", mat4_identity());
- mesh_draw(quad);
- glUseProgram(0);
-
- glfwSwapBuffers(state.window);
- }
-
- return 0;
-}
diff --git a/pbr/2.1.2.ibl_irradiance/pbr.frag b/pbr/2.1.2.ibl_irradiance/pbr.frag
deleted file mode 100644
index 88cf01d..0000000
--- a/pbr/2.1.2.ibl_irradiance/pbr.frag
+++ /dev/null
@@ -1,114 +0,0 @@
-#version 330 core
-
-in vert_t {
- vec3 position;
- vec3 normal;
-} vert;
-
-out vec4 frag_color;
-
-uniform vec3 camera;
-
-uniform vec3 color;
-uniform float metallic;
-uniform float roughness;
-uniform float ao;
-
-uniform samplerCube irradiance_map;
-
-struct light_t {
- vec3 position;
- vec3 color;
-};
-
-const int light_count = 4;
-uniform light_t lights[light_count];
-
-const float PI = 3.14159265358;
-
-vec3 fresnel_shlick(float costheta, vec3 f0)
-{
- return f0 + (1.0 - f0) * pow(1.0 - costheta, 5.0);
-}
-
-float distribution_ggx(vec3 n, vec3 h, float roughness)
-{
- float a = roughness * roughness;
- float a2 = a * a;
- float ndoth = max(dot(n, h), 0.0);
- float ndoth2 = ndoth * ndoth;
-
- float num = a2;
- float denom = (ndoth2 * (a2 - 1.0) + 1.0);
- denom = PI * denom * denom;
-
- return num / denom;
-}
-
-float geometry_shlick_ggx(float ndotv, float roughness)
-{
- float r = roughness + 1.0;
- float k = r * r / 8.0;
-
- float num = ndotv;
- float denom = ndotv * (1.0 - k) + k;
-
- return num / denom;
-}
-
-float geometry_smith(vec3 n, vec3 v, vec3 l, float roughness)
-{
- float ndotv = max(dot(n, v), 0.0);
- float ndotl = max(dot(n, l), 0.0);
- float ggx2 = geometry_shlick_ggx(ndotv, roughness);
- float ggx1 = geometry_shlick_ggx(ndotl, roughness);
-
- return ggx1 * ggx2;
-}
-
-void main(void)
-{
- vec3 n = vert.normal;
- vec3 v = normalize(camera - vert.position);
-
- vec3 f0 = vec3(0.04);
- f0 = mix(f0, color, metallic);
-
- vec3 lo = vec3(0.0);
- for (int i = 0; i < light_count; i++) {
- vec3 l = normalize(lights[i].position - vert.position);
- vec3 h = normalize(v + l);
- float ndotv = max(dot(n, v), 0.0);
- float ndotl = max(dot(n, l), 0.0);
-
- float distance = length(lights[i].position - vert.position);
- float attenuation = 1.0 / (distance * distance);
-
- vec3 radiance = lights[i].color * attenuation;
-
- vec3 f = fresnel_shlick(max(dot(h, v), 0.0), f0);
-
- float ndf = distribution_ggx(n, h, roughness);
- float g = geometry_smith(n, v, l, roughness);
-
- vec3 numerator = ndf * g * f;
- float denominator = 4.0 * ndotv * ndotl;
- vec3 specular = numerator / max(denominator, 0.001);
-
- vec3 ks = f;
- vec3 kd = vec3(1.0) - ks;
-
- kd *= 1.0 - metallic;
-
- lo += (kd * color / PI + specular) * radiance * ndotl;
- }
-
- vec3 ks = fresnel_shlick(max(dot(n, v), 0.0), f0);
- vec3 kd = 1.0 - ks;
- kd *= 1.0 - metallic;
- vec3 irradiance = texture(irradiance_map, n).rgb;
- vec3 diffuse = irradiance * color;
- vec3 ambient = kd * diffuse * ao;
-
- frag_color = vec4(ambient + lo, 1.0);
-}
diff --git a/pbr/2.1.2.ibl_irradiance/pbr.vert b/pbr/2.1.2.ibl_irradiance/pbr.vert
deleted file mode 100644
index e6e3800..0000000
--- a/pbr/2.1.2.ibl_irradiance/pbr.vert
+++ /dev/null
@@ -1,21 +0,0 @@
-#version 330 core
-
-layout(location = 0) in vec3 position;
-layout(location = 1) in vec3 normal;
-
-out vert_t {
- vec3 position;
- vec3 normal;
-} vert;
-
-uniform mat4 projection;
-uniform mat4 view;
-uniform mat4 model;
-
-void main(void)
-{
- gl_Position = projection * view * model * vec4(position, 1.0);
-
- vert.position = vec3(model * vec4(position, 1.0));
- vert.normal = normalize(mat3(transpose(inverse(model))) * normal);
-}