diff options
author | pryazha <pryadeiniv@mail.ru> | 2025-08-02 13:21:42 +0500 |
---|---|---|
committer | pryazha <pryadeiniv@mail.ru> | 2025-08-02 13:21:42 +0500 |
commit | 2e64d3c5d6eb1eb04168d39d5eb5f2d89af1a8b0 (patch) | |
tree | 85c8a586a1343469cdcdab5dccad023053571ecd /pbr/2.1.2.ibl_irradiance | |
parent | 33d5f67044d104d69cb2d11e78e6a79bc20d4c4e (diff) |
Diffstat (limited to 'pbr/2.1.2.ibl_irradiance')
-rw-r--r-- | pbr/2.1.2.ibl_irradiance/background.frag | 17 | ||||
-rw-r--r-- | pbr/2.1.2.ibl_irradiance/background.vert | 19 | ||||
-rwxr-xr-x | pbr/2.1.2.ibl_irradiance/build.sh | 5 | ||||
-rw-r--r-- | pbr/2.1.2.ibl_irradiance/convolution.frag | 33 | ||||
-rw-r--r-- | pbr/2.1.2.ibl_irradiance/convolution.vert | 17 | ||||
-rw-r--r-- | pbr/2.1.2.ibl_irradiance/cubemap.frag | 25 | ||||
-rw-r--r-- | pbr/2.1.2.ibl_irradiance/cubemap.vert | 17 | ||||
-rw-r--r-- | pbr/2.1.2.ibl_irradiance/hdr.frag | 18 | ||||
-rw-r--r-- | pbr/2.1.2.ibl_irradiance/hdr.vert | 17 | ||||
-rwxr-xr-x | pbr/2.1.2.ibl_irradiance/ibl_irradiance | bin | 402768 -> 0 bytes | |||
-rw-r--r-- | pbr/2.1.2.ibl_irradiance/ibl_irradiance.c | 230 | ||||
-rw-r--r-- | pbr/2.1.2.ibl_irradiance/pbr.frag | 114 | ||||
-rw-r--r-- | pbr/2.1.2.ibl_irradiance/pbr.vert | 21 |
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 Binary files differdeleted file mode 100755 index 4561ae2..0000000 --- a/pbr/2.1.2.ibl_irradiance/ibl_irradiance +++ /dev/null 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); -} |