From 985b4de0d2d714ebf7c1acc78f5bb61e89a1804b Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Dominik=20Madar=C3=A1sz?= Date: Fri, 1 Dec 2023 16:05:38 +0100 Subject: [PATCH] lightmapping support --- bind/v4k.lua | 16 +- demos/99-lmap.c | 426 ++---------------- engine/art/shaders/fs_32_4_model.glsl | 75 ++- ...l.glsl => vs_323444143_16_3322_model.glsl} | 5 +- engine/joint/v4k.h | 275 +++++------ engine/split/v4k_render.c | 260 +++++------ engine/split/v4k_render.h | 15 +- engine/v4k.c | 260 +++++------ engine/v4k.h | 15 +- result.tga | Bin 0 -> 1638418 bytes 10 files changed, 533 insertions(+), 814 deletions(-) rename engine/art/shaders/{vs_3223444143_16_332_model.glsl => vs_323444143_16_3322_model.glsl} (98%) create mode 100644 result.tga diff --git a/bind/v4k.lua b/bind/v4k.lua index 4556c1b..5f7377b 100644 --- a/bind/v4k.lua +++ b/bind/v4k.lua @@ -2957,7 +2957,8 @@ unsigned num_textures; handle *textures; char **texture_names; material_t* materials; -texture_t *lightmap; +texture_t lightmap; +float *lmdata; unsigned num_meshes; unsigned num_triangles; unsigned num_joints; @@ -2969,6 +2970,8 @@ mat44 pivot; int stride; void *verts; int num_verts; +void *tris; +int num_tris; handle vao, ibo, vbo, vao_instanced; unsigned flags; unsigned billboard; @@ -3004,14 +3007,15 @@ anim_t* anims; typedef struct lightmap_t { struct lm_context *ctx; bool ready; -texture_t lightmap; +int w, h; +int atlas_w, atlas_h; +texture_t atlas; model_t** models; +unsigned shader; } lightmap_t; lightmap_t lightmap(int hmsize , float near, float far, vec3 color , int passes , float threshold , float distmod ); void lightmap_setup(lightmap_t *lm, int w, int h); - void lightmap_addmodel(lightmap_t *lm, model_t *m); - void lightmap_bake(lightmap_t *lm, int bounces, void (*drawscene)(lightmap_t *lm, float *view, float *proj, void *userdata), void *userdata); - void lightmap_clear(lightmap_t *lm); + void lightmap_bake(lightmap_t *lm, int bounces, void (*drawscene)(lightmap_t *lm, model_t *m, float *view, float *proj, void *userdata), void *userdata); void lightmap_destroy(lightmap_t *lm); typedef struct skybox_t { handle program; @@ -3337,7 +3341,7 @@ unsigned play; bool paused; struct atlas_t *a; } sprite_t; -enum { OBJTYPE_sprite_t = 10 }; typedef struct { unsigned static_assert_on_L__LINE__ : !!(10 <= 255); } static_assert_on_Lconcat(_L,3954)___COUNTER__; typedef struct { unsigned static_assert_on_L__LINE__ : !!(sizeof(sprite_t)); } static_assert_on_Lconcat(_L,3954)___COUNTER__;; +enum { OBJTYPE_sprite_t = 10 }; typedef struct { unsigned static_assert_on_L__LINE__ : !!(10 <= 255); } static_assert_on_Lconcat(_L,3959)___COUNTER__; typedef struct { unsigned static_assert_on_L__LINE__ : !!(sizeof(sprite_t)); } static_assert_on_Lconcat(_L,3959)___COUNTER__;; void sprite_ctor(sprite_t *s); void sprite_dtor(sprite_t *s); void sprite_tick(sprite_t *s); diff --git a/demos/99-lmap.c b/demos/99-lmap.c index 631c27a..9b5c05c 100644 --- a/demos/99-lmap.c +++ b/demos/99-lmap.c @@ -1,407 +1,63 @@ #include "v4k.h" -#define LIGHTMAPPER_IMPLEMENTATION -//#define LM_DEBUG_INTERPOLATION -#include "3rd_lightmapper.h" +skybox_t sky; +model_t litm; -#define scene_t scene_t2 - -typedef struct { - float p[3]; - float t[2]; -} vertex_t; - -typedef struct -{ - GLuint program; - GLint u_lightmap; - GLint u_projection; - GLint u_view; - - GLuint lightmap; - int w, h; - - GLuint vao, vbo, ibo; - vertex_t *vertices; - unsigned short *indices; - unsigned int vertexCount, indexCount; -} scene_t; - -static int initScene(scene_t *scene); -static void drawScene(scene_t *scene, float *view, float *projection); -static void destroyScene(scene_t *scene); - -static int bake(scene_t *scene) -{ - lm_context *ctx = lmCreate( - 64, // hemisphere resolution (power of two, max=512) - 0.001f, 100.0f, // zNear, zFar of hemisphere cameras - 1.0f, 1.0f, 1.0f, // background color (white for ambient occlusion) - 2, 0.01f, // lightmap interpolation threshold (small differences are interpolated rather than sampled) - // check debug_interpolation.tga for an overview of sampled (red) vs interpolated (green) pixels. - 0.0f); // modifier for camera-to-surface distance for hemisphere rendering. - // tweak this to trade-off between interpolated normals quality and other artifacts (see declaration). - - if (!ctx) - { - fprintf(stderr, "Error: Could not initialize lightmapper.\n"); - return 0; - } - - int w = scene->w, h = scene->h; - float *data = CALLOC(w * h * 4, sizeof(float)); - for (int b = 0; b < 1; b++) { - memset(data, 0, w*h*4); - lmSetTargetLightmap(ctx, data, w, h, 4); - - lmSetGeometry(ctx, NULL, // no transformation in this example - LM_FLOAT, (unsigned char*)scene->vertices + offsetof(vertex_t, p), sizeof(vertex_t), - LM_NONE , NULL , 0 , // no interpolated normals in this example - LM_FLOAT, (unsigned char*)scene->vertices + offsetof(vertex_t, t), sizeof(vertex_t), - scene->indexCount, LM_UNSIGNED_SHORT, scene->indices); - - glDisable(GL_BLEND); - - int vp[4]; - float view[16], projection[16]; - double lastUpdateTime = 0.0; - while (lmBegin(ctx, vp, view, projection)) - { - // render to lightmapper framebuffer - glViewport(vp[0], vp[1], vp[2], vp[3]); - drawScene(scene, view, projection); - - // display progress every second (printf is expensive) - double time = time_ms() / 1000.0; - if (time - lastUpdateTime > 1.0) - { - lastUpdateTime = time; - printf("\r%6.2f%%", lmProgress(ctx) * 100.0f); - fflush(stdout); - } - - lmEnd(ctx); - // window_swap(); - } - printf("\rFinished baking %d triangles.\n", scene->indexCount / 3); - } - - lmDestroy(ctx); - - // postprocess texture - float *temp = CALLOC(w * h * 4, sizeof(float)); - for (int i = 0; i < 16; i++) - { - lmImageDilate(data, temp, w, h, 4); - lmImageDilate(temp, data, w, h, 4); - } - lmImageSmooth(data, temp, w, h, 4); - lmImageDilate(temp, data, w, h, 4); - lmImagePower(data, w, h, 4, 1.0f / 2.2f, 0x7); // gamma correct color channels - FREE(temp); - - // save result to a file - if (lmImageSaveTGAf("result.tga", data, w, h, 4, 1.0f)) - printf("Saved result.tga\n"); - - // upload result - glBindTexture(GL_TEXTURE_2D, scene->lightmap); - glTexImage2D(GL_TEXTURE_2D, 0, GL_RGBA, w, h, 0, GL_RGBA, GL_FLOAT, data); - FREE(data); - - return 1; -} - -static void fpsCameraViewMatrix(float *view); - -static void mainLoop(scene_t *scene) -{ - glViewport(0, 0, window_width(), window_height()); - - // camera for glfw window - float view[16], projection[16]; - fpsCameraViewMatrix(view); - perspective44(projection, 45.0f, window_aspect(), 0.01f, 100.0f); - - // draw to screen with a blueish sky - glClearColor(0.6f, 0.8f, 1.0f, 1.0f); - glClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT); - drawScene(scene, view, projection); +void bakedrawmodel(lightmap_t *lm, model_t *m, float *view, float *proj, void *userdata) { + shader_bind(lm->shader); + model_render(*m, proj, view, m->pivot, lm->shader); + shader_float("u_litboost", 4.0); + model_render(litm, proj, view, litm.pivot, lm->shader); } int main() { window_create(0.5, WINDOW_VSYNC_DISABLED); - - scene_t scene = {0}; - if (!initScene(&scene)) + camera_t cam = camera(); + sky = skybox(0, 0); skybox_mie_calc_sh(&sky, 2.0f); + model_t mdl = model("gazebo.obj", 0); + litm = model("cube.obj", MODEL_MATCAPS); { - fprintf(stderr, "Could not initialize scene.\n"); - return EXIT_FAILURE; + mat44 lp; scaling44(lp, 0.3, 0.3, 0.3); translate44(lp, 8,4,0); + copy44(litm.pivot, lp); } + rotate44(mdl.pivot, -90, 1, 0, 0); + scale44(mdl.pivot, 4,4,4); + shader_bind(mdl.program); + shader_vec3v("u_coefficients_sh", 9, sky.cubemap.sh); + // shader_bool("u_texmod", 0); + + unsigned char emissive[] = { 255, 180, 0, 255 }; + texture_t emission = texture_create(1,1,4,emissive,TEXTURE_LINEAR); + model_set_texture(litm, emission); + + lightmap_t baker = lightmap(64, 0.001, 1000, vec3(0,0,0), 2, 0.01, 0.0); + lightmap_setup(&baker, 640, 640); + array_push(baker.models, &mdl); window_title("AO Baking demo"); - while (window_swap()) - { - mainLoop(&scene); + while (window_swap() && !input(KEY_ESC)) { + bool active = ui_active() || ui_hover() || gizmo_active() ? false : input(MOUSE_L) || input(MOUSE_M) || input(MOUSE_R); + if( active ) cam.speed = clampf(cam.speed + input_diff(MOUSE_W) / 10, 0.05f, 5.0f); + vec2 mouse = scale2(vec2(input_diff(MOUSE_X), -input_diff(MOUSE_Y)), 0.2f * active); + vec3 wasdecq = scale3(vec3(input(KEY_D)-input(KEY_A),input(KEY_E)-(input(KEY_C)||input(KEY_Q)),input(KEY_W)-input(KEY_S)), cam.speed); + camera_moveby(&cam, wasdecq); + camera_fps(&cam, mouse.x,mouse.y); + window_cursor( !active ); + + skybox_render(&sky, cam.proj, cam.view); + model_render(mdl, cam.proj, cam.view, mdl.pivot, 0); + model_render(litm, cam.proj, cam.view, litm.pivot, 0); if( ui_panel("Lightmapper", PANEL_OPEN) ) { ui_label2("Freecam", "Mouse + W/A/S/D/E/Q keys"); ui_label("Warning " ICON_MD_WARNING "@This will take a few seconds and bake a lightmap illuminated by: The mesh itself (initially black) + A white sky (1.0f, 1.0f, 1.0f)"); - if( ui_button("Bake 1 light bounce") ) { - bake(&scene); + int b=2; + if( ui_button(va("Bake %d light bounce", b)) ) { + lightmap_bake(&baker, b, bakedrawmodel, 0); } ui_panel_end(); } } - - destroyScene(&scene); } - -// helpers //////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////// -static int loadSimpleObjFile(const char *filename, vertex_t **vertices, unsigned int *vertexCount, unsigned short **indices, unsigned int *indexCount); - -static int initScene(scene_t *scene) -{ - // load mesh - if (!loadSimpleObjFile("demos/art/meshes/gazebo.obj", &scene->vertices, &scene->vertexCount, &scene->indices, &scene->indexCount)) - { - fprintf(stderr, "Error loading obj file\n"); - return 0; - } - - glGenVertexArrays(1, &scene->vao); - glBindVertexArray(scene->vao); - - glGenBuffers(1, &scene->vbo); - glBindBuffer(GL_ARRAY_BUFFER, scene->vbo); - glBufferData(GL_ARRAY_BUFFER, scene->vertexCount * sizeof(vertex_t), scene->vertices, GL_STATIC_DRAW); - - glGenBuffers(1, &scene->ibo); - glBindBuffer(GL_ELEMENT_ARRAY_BUFFER, scene->ibo); - glBufferData(GL_ELEMENT_ARRAY_BUFFER, scene->indexCount * sizeof(unsigned short), scene->indices, GL_STATIC_DRAW); - - glEnableVertexAttribArray(0); - glVertexAttribPointer(0, 3, GL_FLOAT, GL_FALSE, sizeof(vertex_t), (void*)offsetof(vertex_t, p)); - glEnableVertexAttribArray(1); - glVertexAttribPointer(1, 2, GL_FLOAT, GL_FALSE, sizeof(vertex_t), (void*)offsetof(vertex_t, t)); - - // create lightmap texture - scene->w = 654; - scene->h = 654; - glGenTextures(1, &scene->lightmap); - glBindTexture(GL_TEXTURE_2D, scene->lightmap); - glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MIN_FILTER, GL_LINEAR); - glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MAG_FILTER, GL_LINEAR); - glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_WRAP_S, GL_CLAMP_TO_EDGE); - glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_WRAP_T, GL_CLAMP_TO_EDGE); - unsigned char emissive[] = { 0, 0, 0, 255 }; - glTexImage2D(GL_TEXTURE_2D, 0, GL_RGBA, 1, 1, 0, GL_RGBA, GL_UNSIGNED_BYTE, emissive); - - // load shader - const char *vp = - "in vec3 a_position;\n" - "in vec2 a_texcoord;\n" - "uniform mat4 u_view;\n" - "uniform mat4 u_projection;\n" - "out vec2 v_texcoord;\n" - - "void main()\n" - "{\n" - "gl_Position = u_projection * (u_view * vec4(a_position, 1.0));\n" - "v_texcoord = a_texcoord;\n" - "}\n"; - - const char *fp = - "in vec2 v_texcoord;\n" - "uniform sampler2D u_lightmap;\n" - "out vec4 o_color;\n" - - "void main()\n" - "{\n" - "o_color = vec4(texture(u_lightmap, v_texcoord).rgb, gl_FrontFacing ? 1.0 : 0.0);\n" - "}\n"; - - scene->program = shader(vp, fp, "a_position,a_texcoord", "o_color", NULL); - if (!scene->program) - { - fprintf(stderr, "Error loading shader\n"); - return 0; - } - scene->u_view = glGetUniformLocation(scene->program, "u_view"); - scene->u_projection = glGetUniformLocation(scene->program, "u_projection"); - scene->u_lightmap = glGetUniformLocation(scene->program, "u_lightmap"); - - return 1; -} - -static void drawScene(scene_t *scene, float *view, float *projection) -{ - glEnable(GL_DEPTH_TEST); - - glUseProgram(scene->program); - glUniform1i(scene->u_lightmap, 0); - glUniformMatrix4fv(scene->u_projection, 1, GL_FALSE, projection); - glUniformMatrix4fv(scene->u_view, 1, GL_FALSE, view); - - glBindTexture(GL_TEXTURE_2D, scene->lightmap); - - glBindVertexArray(scene->vao); - glDrawElements(GL_TRIANGLES, scene->indexCount, GL_UNSIGNED_SHORT, 0); -} - -static void destroyScene(scene_t *scene) -{ - FREE(scene->vertices); - FREE(scene->indices); - glDeleteVertexArrays(1, &scene->vao); - glDeleteBuffers(1, &scene->vbo); - glDeleteBuffers(1, &scene->ibo); - glDeleteTextures(1, &scene->lightmap); - glDeleteProgram(scene->program); -} - -static int loadSimpleObjFile(const char *filename, vertex_t **vertices, unsigned int *vertexCount, unsigned short **indices, unsigned int *indexCount) -{ - FILE *file = fopen(filename, "rt"); - if (!file) - return 0; - char line[1024]; - - // first pass - unsigned int np = 0, nn = 0, nt = 0, nf = 0; - while (!feof(file)) - { - fgets(line, 1024, file); - if (line[0] == '#') continue; - if (line[0] == 'v') - { - if (line[1] == ' ') { np++; continue; } - if (line[1] == 'n') { nn++; continue; } - if (line[1] == 't') { nt++; continue; } - assert(!"unknown vertex attribute"); - } - if (line[0] == 'f') { nf++; continue; } - assert(!"unknown identifier"); - } - assert(np && np == nn && np == nt && nf); // only supports obj files without separately indexed vertex attributes - - // allocate memory - *vertexCount = np; - *vertices = CALLOC(np, sizeof(vertex_t)); - *indexCount = nf * 3; - *indices = CALLOC(nf * 3, sizeof(unsigned short)); - - // second pass - fseek(file, 0, SEEK_SET); - unsigned int cp = 0, cn = 0, ct = 0, cf = 0; - while (!feof(file)) - { - fgets(line, 1024, file); - if (line[0] == '#') continue; - if (line[0] == 'v') - { - if (line[1] == ' ') { float *p = (*vertices)[cp++].p; char *e1, *e2; p[0] = (float)strtod(line + 2, &e1); p[1] = (float)strtod(e1, &e2); p[2] = (float)strtod(e2, 0); continue; } - if (line[1] == 'n') { /*float *n = (*vertices)[cn++].n; char *e1, *e2; n[0] = (float)strtod(line + 3, &e1); n[1] = (float)strtod(e1, &e2); n[2] = (float)strtod(e2, 0);*/ continue; } // no normals needed - if (line[1] == 't') { float *t = (*vertices)[ct++].t; char *e1; t[0] = (float)strtod(line + 3, &e1); t[1] = (float)strtod(e1, 0); continue; } - assert(!"unknown vertex attribute"); - } - if (line[0] == 'f') - { - unsigned short *tri = (*indices) + cf; - cf += 3; - char *e1, *e2, *e3 = line + 1; - for (int i = 0; i < 3; i++) - { - unsigned long pi = strtoul(e3 + 1, &e1, 10); - assert(e1[0] == '/'); - unsigned long ti = strtoul(e1 + 1, &e2, 10); - assert(e2[0] == '/'); - unsigned long ni = strtoul(e2 + 1, &e3, 10); - assert(pi == ti && pi == ni); - tri[i] = (unsigned short)(pi - 1); - } - continue; - } - assert(!"unknown identifier"); - } - - fclose(file); - return 1; -} - - - -static void fpsCameraViewMatrix(float *view) -{ - // initial camera config - static float position[] = { 0.0f, 0.3f, 1.5f }; - static float rotation[] = { 0.0f, 0.0f }; - - // mouse look - static double lastMouse[] = { 0.0, 0.0 }; - double mouse_coord[2]; - mouse_coord[0] = input(MOUSE_X); - mouse_coord[1] = input(MOUSE_Y); - if (input(MOUSE_L)) - { - rotation[0] += (float)(mouse_coord[1] - lastMouse[1]) * -0.2f; - rotation[1] += (float)(mouse_coord[0] - lastMouse[0]) * -0.2f; - } - lastMouse[0] = mouse_coord[0]; - lastMouse[1] = mouse_coord[1]; - - float rotationY[16], rotationX[16], rotationYX[16]; - rotation44(rotationX, rotation[0], 1.0f, 0.0f, 0.0f); - rotation44(rotationY, rotation[1], 0.0f, 1.0f, 0.0f); - multiply44x2(rotationYX, rotationY, rotationX); - - // keyboard movement (WSADEQ) - float speed = input(KEY_SHIFT) ? 0.1f : 0.01f; - vec3 movement = {0}; - if (input(KEY_W)) movement.z -= speed; - if (input(KEY_S)) movement.z += speed; - if (input(KEY_A)) movement.x -= speed; - if (input(KEY_D)) movement.x += speed; - if (input(KEY_E)) movement.y -= speed; - if (input(KEY_Q)) movement.y += speed; - - vec3 worldMovement = transform344(rotationYX, movement); - position[0] += worldMovement.x; - position[1] += worldMovement.y; - position[2] += worldMovement.z; - - // construct view matrix - float inverseRotation[16], inverseTranslation[16]; - transpose44(inverseRotation, rotationYX); - translation44(inverseTranslation, -position[0], -position[1], -position[2]); - multiply44x2(view, inverseRotation, inverseTranslation); // = inverse(translation(position) * rotationYX); -} - -#if 0 - -####################################################################### - 76702 17.93% rendered hemicubes integrated to lightmap texels. - 179388 41.94% interpolated lightmap texels. - 171626 40.13% wasted lightmap texels. - - 29.95% of used texels were rendered. -####################################################################### -Finished baking 731 triangles. -Saved result.tga - -vs - -####################################################################### - 124 0.05% rendered hemicubes integrated to lightmap texels. - 201 0.08% interpolated lightmap texels. - 261947 99.88% wasted lightmap texels. - - 38.15% of used texels were rendered. -####################################################################### -Finished baking 731 triangles. -Saved result.tga - -#endif - diff --git a/engine/art/shaders/fs_32_4_model.glsl b/engine/art/shaders/fs_32_4_model.glsl index c439a3b..4d2b0f3 100644 --- a/engine/art/shaders/fs_32_4_model.glsl +++ b/engine/art/shaders/fs_32_4_model.glsl @@ -6,6 +6,12 @@ uniform bool u_lit = false; uniform bool u_matcaps = false; uniform vec4 u_diffuse = vec4(1.0,1.0,1.0,1.0); +// lightmapping +uniform sampler2D u_lightmap; +uniform bool u_texlit; +uniform bool u_texmod = true; +uniform float u_litboost = 1.0; + in vec3 v_position; in vec3 v_position_ws; #ifdef RIM @@ -16,7 +22,7 @@ uniform vec3 u_rimpivot = vec3(0,0,0); uniform bool u_rimambient = true; #endif in vec3 v_normal, v_normal_ws; -in vec2 v_texcoord; +in vec2 v_texcoord, v_texcoord2; in vec4 v_color; out vec4 fragcolor; @@ -110,25 +116,49 @@ vec3 lighting() { return lit; } +vec3 sh_lighting(vec3 n) { + vec3 SHLightResult[9]; + SHLightResult[0] = 0.282095f * u_coefficients_sh[0]; + SHLightResult[1] = -0.488603f * u_coefficients_sh[1] * n.y; + SHLightResult[2] = 0.488603f * u_coefficients_sh[2] * n.z; + SHLightResult[3] = -0.488603f * u_coefficients_sh[3] * n.x; + SHLightResult[4] = 1.092548f * u_coefficients_sh[4] * n.x * n.y; + SHLightResult[5] = -1.092548f * u_coefficients_sh[5] * n.y * n.z; + SHLightResult[6] = 0.315392f * u_coefficients_sh[6] * (3.0f * n.z * n.z - 1.0f); + SHLightResult[7] = -1.092548f * u_coefficients_sh[7] * n.x * n.z; + SHLightResult[8] = 0.546274f * u_coefficients_sh[8] * (n.x * n.x - n.y * n.y); + vec3 result = vec3(0.0); + for (int i = 0; i < 9; ++i) + result += SHLightResult[i]; + return result; +} + +#ifdef LIGHTMAP_BAKING +void main() { + vec3 n = normalize(v_normal_ws); + vec4 diffuse; + + if(u_textured) { + diffuse = texture(u_texture2d, v_texcoord); + } else { + diffuse = u_diffuse; // * v_color; + } + + if (u_texlit) { + vec4 litsample = texture(u_lightmap, v_texcoord); + diffuse *= litsample; + } + + fragcolor = vec4(diffuse.rgb*u_litboost, 1.0); +} +#else void main() { vec3 n = normalize(v_normal_ws); vec4 lit = vec4(1.0, 1.0, 1.0, 1.0); // SH lighting - { - vec3 SHLightResult[9]; - SHLightResult[0] = 0.282095f * u_coefficients_sh[0]; - SHLightResult[1] = -0.488603f * u_coefficients_sh[1] * n.y; - SHLightResult[2] = 0.488603f * u_coefficients_sh[2] * n.z; - SHLightResult[3] = -0.488603f * u_coefficients_sh[3] * n.x; - SHLightResult[4] = 1.092548f * u_coefficients_sh[4] * n.x * n.y; - SHLightResult[5] = -1.092548f * u_coefficients_sh[5] * n.y * n.z; - SHLightResult[6] = 0.315392f * u_coefficients_sh[6] * (3.0f * n.z * n.z - 1.0f); - SHLightResult[7] = -1.092548f * u_coefficients_sh[7] * n.x * n.z; - SHLightResult[8] = 0.546274f * u_coefficients_sh[8] * (n.x * n.x - n.y * n.y); - vec3 result = vec3(0.0); - for (int i = 0; i < 9; ++i) - result += SHLightResult[i]; + if (!u_texlit) { + vec3 result = sh_lighting(n); if( (result.x*result.x+result.y*result.y+result.z*result.z) > 0.0 ) lit = vec4(result, 1.0); } @@ -146,6 +176,18 @@ void main() { } else { diffuse = u_diffuse; // * v_color; } + + if (u_texlit) { + vec4 litsample = texture(u_lightmap, v_texcoord); + + if (u_texmod) { + diffuse *= litsample; + } else { + diffuse += litsample; + } + + diffuse.rgb += sh_lighting(n); + } // lighting mix fragcolor = diffuse * lit * shadowing(); @@ -163,4 +205,5 @@ void main() { vec3 col = u_rimcolor*(pow(smoothstep(1.0-u_rimrange.x,u_rimrange.y,rim), u_rimrange.z)); fragcolor += vec4(col, 1.0);} #endif -} \ No newline at end of file +} +#endif diff --git a/engine/art/shaders/vs_3223444143_16_332_model.glsl b/engine/art/shaders/vs_323444143_16_3322_model.glsl similarity index 98% rename from engine/art/shaders/vs_3223444143_16_332_model.glsl rename to engine/art/shaders/vs_323444143_16_3322_model.glsl index ca83128..b9e94c2 100644 --- a/engine/art/shaders/vs_3223444143_16_332_model.glsl +++ b/engine/art/shaders/vs_323444143_16_3322_model.glsl @@ -49,7 +49,6 @@ uniform sampler2DArray blend_shapes; // @todo: implement me in vec3 att_position; // @todo: reorder ass2iqe to emit p3 n3 u2 t3 b3 c4B i4 w4 instead in vec2 att_texcoord; -in vec2 att_texcoord2; in vec3 att_normal; in vec4 att_tangent; // vec3 + bi sign in mat4 att_instanced_matrix; // for instanced rendering @@ -58,10 +57,11 @@ in vec4 att_weights; // @todo: downgrade from float to byte in float att_vertexindex; // for blendshapes in vec4 att_color; in vec3 att_bitangent; // @todo: remove? also, ass2iqe might output this +in vec2 att_texcoord2; out vec4 v_color; out vec3 v_position, v_position_ws; out vec3 v_normal, v_normal_ws; -out vec2 v_texcoord; +out vec2 v_texcoord, v_texcoord2; @@ -118,6 +118,7 @@ void main() { v_normal = normalize(v_normal); v_position = att_position; v_texcoord = att_texcoord; + v_texcoord2 = att_texcoord2; v_color = att_color; mat4 modelView = view * att_instanced_matrix; mat4 l_model = att_instanced_matrix; diff --git a/engine/joint/v4k.h b/engine/joint/v4k.h index 4b73396..d1381e6 100644 --- a/engine/joint/v4k.h +++ b/engine/joint/v4k.h @@ -17511,7 +17511,9 @@ typedef struct model_t { handle *textures; char **texture_names; array(material_t) materials; - texture_t *lightmap; + + texture_t lightmap; + float *lmdata; unsigned num_meshes; unsigned num_triangles; @@ -17525,6 +17527,8 @@ typedef struct model_t { int stride; // usually 68 bytes for a p3 u2 u2 n3 t4 i4B w4B c4B vertex stream void *verts; int num_verts; + void *tris; + int num_tris; handle vao, ibo, vbo, vao_instanced; unsigned flags; @@ -17576,15 +17580,16 @@ API anims_t animations(const char *pathfile, int flags); typedef struct lightmap_t { struct lm_context *ctx; // private bool ready; - texture_t lightmap; //@fixme: do we need it per-model? + int w, h; + int atlas_w, atlas_h; //@fixme: implement + texture_t atlas; //@fixme: implement this array(model_t*) models; + unsigned shader; } lightmap_t; API lightmap_t lightmap(int hmsize /*64*/, float near, float far, vec3 color /*1,1,1 for AO*/, int passes /*2*/, float threshold /*0.01f*/, float distmod /*0.0f*/); API void lightmap_setup(lightmap_t *lm, int w, int h); -API void lightmap_addmodel(lightmap_t *lm, model_t *m); -API void lightmap_bake(lightmap_t *lm, int bounces, void (*drawscene)(lightmap_t *lm, float *view, float *proj, void *userdata), void *userdata); -API void lightmap_clear(lightmap_t *lm); +API void lightmap_bake(lightmap_t *lm, int bounces, void (*drawscene)(lightmap_t *lm, model_t *m, float *view, float *proj, void *userdata), void *userdata); API void lightmap_destroy(lightmap_t *lm); // ----------------------------------------------------------------------------- @@ -369322,13 +369327,13 @@ struct iqmbounds { typedef struct iqm_vertex { GLfloat position[3]; GLfloat texcoord[2]; - GLfloat texcoord2[2]; GLfloat normal[3]; GLfloat tangent[4]; GLubyte blendindexes[4]; GLubyte blendweights[4]; GLfloat blendvertexindex; GLubyte color[4]; + GLfloat texcoord2[2]; } iqm_vertex; typedef struct iqm_t { @@ -369438,6 +369443,13 @@ void model_set_uniforms(model_t m, int shader, mat44 mv, mat44 proj, mat44 view, if( (loc = glGetUniformLocation(shader, "u_billboard")) >= 0 ) { glUniform1i( loc, m.billboard ); } + if( (loc = glGetUniformLocation(shader, "texlit")) >= 0 ) { + glUniform1i( loc, (m.lightmap.w != 0) ); + } + else + if( (loc = glGetUniformLocation(shader, "u_texlit")) >= 0 ) { + glUniform1i( loc, (m.lightmap.w != 0) ); + } #if 0 // @todo: mat44 projview (useful?) #endif @@ -369482,28 +369494,26 @@ void model_set_state(model_t m) { glVertexAttribPointer(0, 3, GL_FLOAT, GL_FALSE, sizeof(iqm_vertex), (GLvoid*)offsetof(iqm_vertex, position) ); glVertexAttribPointer(1, 2, GL_FLOAT, GL_FALSE, sizeof(iqm_vertex), (GLvoid*)offsetof(iqm_vertex, texcoord) ); - glVertexAttribPointer(2, 2, GL_FLOAT, GL_FALSE, sizeof(iqm_vertex), (GLvoid*)offsetof(iqm_vertex, texcoord2) ); - glVertexAttribPointer(3, 3, GL_FLOAT, GL_FALSE, sizeof(iqm_vertex), (GLvoid*)offsetof(iqm_vertex, normal) ); - glVertexAttribPointer(4, 4, GL_FLOAT, GL_FALSE, sizeof(iqm_vertex), (GLvoid*)offsetof(iqm_vertex, tangent) ); + glVertexAttribPointer(2, 3, GL_FLOAT, GL_FALSE, sizeof(iqm_vertex), (GLvoid*)offsetof(iqm_vertex, normal) ); + glVertexAttribPointer(3, 4, GL_FLOAT, GL_FALSE, sizeof(iqm_vertex), (GLvoid*)offsetof(iqm_vertex, tangent) ); glEnableVertexAttribArray(0); glEnableVertexAttribArray(1); glEnableVertexAttribArray(2); glEnableVertexAttribArray(3); - glEnableVertexAttribArray(4); // vertex color - glVertexAttribPointer(12, 4, GL_UNSIGNED_BYTE, GL_FALSE, sizeof(iqm_vertex), (GLvoid*)offsetof(iqm_vertex,color) ); - glEnableVertexAttribArray(12); + glVertexAttribPointer(11, 4, GL_UNSIGNED_BYTE, GL_FALSE, sizeof(iqm_vertex), (GLvoid*)offsetof(iqm_vertex,color) ); + glEnableVertexAttribArray(11); // animation if(numframes > 0) { - glVertexAttribPointer( 9, 4, GL_UNSIGNED_BYTE, GL_FALSE, sizeof(iqm_vertex), (GLvoid*)offsetof(iqm_vertex,blendindexes) ); - glVertexAttribPointer( 10, 4, GL_UNSIGNED_BYTE, GL_TRUE, sizeof(iqm_vertex), (GLvoid*)offsetof(iqm_vertex,blendweights) ); - glVertexAttribPointer(11, 1, GL_FLOAT, GL_FALSE, sizeof(iqm_vertex), (GLvoid*)offsetof(iqm_vertex, blendvertexindex) ); + glVertexAttribPointer( 8, 4, GL_UNSIGNED_BYTE, GL_FALSE, sizeof(iqm_vertex), (GLvoid*)offsetof(iqm_vertex,blendindexes) ); + glVertexAttribPointer( 9, 4, GL_UNSIGNED_BYTE, GL_TRUE, sizeof(iqm_vertex), (GLvoid*)offsetof(iqm_vertex,blendweights) ); + glVertexAttribPointer(10, 1, GL_FLOAT, GL_FALSE, sizeof(iqm_vertex), (GLvoid*)offsetof(iqm_vertex, blendvertexindex) ); + glEnableVertexAttribArray(8); glEnableVertexAttribArray(9); glEnableVertexAttribArray(10); - glEnableVertexAttribArray(11); } // mat4 attribute; for instanced rendering @@ -369515,22 +369525,26 @@ void model_set_state(model_t m) { glBindBuffer(GL_ARRAY_BUFFER, m.vao_instanced); glBufferData(GL_ARRAY_BUFFER, m.num_instances * mat4_size, m.instanced_matrices, GL_STATIC_DRAW); - glVertexAttribPointer(5, 4, GL_FLOAT, GL_FALSE, 4 * vec4_size, (GLvoid*)(((char*)NULL)+(0 * vec4_size))); - glVertexAttribPointer(6, 4, GL_FLOAT, GL_FALSE, 4 * vec4_size, (GLvoid*)(((char*)NULL)+(1 * vec4_size))); - glVertexAttribPointer(7, 4, GL_FLOAT, GL_FALSE, 4 * vec4_size, (GLvoid*)(((char*)NULL)+(2 * vec4_size))); - glVertexAttribPointer(8, 4, GL_FLOAT, GL_FALSE, 4 * vec4_size, (GLvoid*)(((char*)NULL)+(3 * vec4_size))); + glVertexAttribPointer(4, 4, GL_FLOAT, GL_FALSE, 4 * vec4_size, (GLvoid*)(((char*)NULL)+(0 * vec4_size))); + glVertexAttribPointer(5, 4, GL_FLOAT, GL_FALSE, 4 * vec4_size, (GLvoid*)(((char*)NULL)+(1 * vec4_size))); + glVertexAttribPointer(6, 4, GL_FLOAT, GL_FALSE, 4 * vec4_size, (GLvoid*)(((char*)NULL)+(2 * vec4_size))); + glVertexAttribPointer(7, 4, GL_FLOAT, GL_FALSE, 4 * vec4_size, (GLvoid*)(((char*)NULL)+(3 * vec4_size))); + glEnableVertexAttribArray(4); glEnableVertexAttribArray(5); glEnableVertexAttribArray(6); glEnableVertexAttribArray(7); - glEnableVertexAttribArray(8); + glVertexAttribDivisor(4, 1); glVertexAttribDivisor(5, 1); glVertexAttribDivisor(6, 1); glVertexAttribDivisor(7, 1); - glVertexAttribDivisor(8, 1); } + // lmap data + glVertexAttribPointer(12, 2, GL_FLOAT, GL_FALSE, sizeof(iqm_vertex), (GLvoid*)offsetof(iqm_vertex, texcoord2) ); + glEnableVertexAttribArray(12); + // 7 bitangent? into texcoord.z? glBindVertexArray( 0 ); @@ -369595,6 +369609,8 @@ bool model_load_meshes(iqm_t *q, const struct iqmheader *hdr, model_t *m) { } struct iqmtriangle *tris = (struct iqmtriangle *)&buf[hdr->ofs_triangles]; + m->num_tris = hdr->num_triangles; + m->tris = (void*)tris; glGenVertexArrays(1, &vao); glBindVertexArray(vao); @@ -369636,22 +369652,22 @@ bool model_load_meshes(iqm_t *q, const struct iqmheader *hdr, model_t *m) { glBufferData(GL_ARRAY_BUFFER, hdr->num_vertexes*sizeof(iqm_vertex), verts, GL_STATIC_DRAW); glBindBuffer(GL_ARRAY_BUFFER, 0); -m->stride = sizeof(iqm_vertex); -#if 0 -m->stride = 0; -if(inposition) m->stride += sizeof(verts[0].position); -if(innormal) m->stride += sizeof(verts[0].normal); -if(intangent) m->stride += sizeof(verts[0].tangent); -if(intexcoord) m->stride += sizeof(verts[0].texcoord); -if(inblendindex8) m->stride += sizeof(verts[0].blendindexes); // no index8? bug? -if(inblendweight8) m->stride += sizeof(verts[0].blendweights); // no weight8? bug? -if(inblendindexi) m->stride += sizeof(verts[0].blendindexes); -if(inblendweightf) m->stride += sizeof(verts[0].blendweights); -if(invertexcolor8) m->stride += sizeof(verts[0].color); -#endif -//for( int i = 0; i < 16; ++i ) printf("%.9g%s", ((float*)verts)[i], (i % 3) == 2 ? "\n" : ","); -//m->verts = verts; //FREE(verts); -m->verts = 0; FREE(verts); + m->stride = sizeof(iqm_vertex); + #if 0 + m->stride = 0; + if(inposition) m->stride += sizeof(verts[0].position); + if(innormal) m->stride += sizeof(verts[0].normal); + if(intangent) m->stride += sizeof(verts[0].tangent); + if(intexcoord) m->stride += sizeof(verts[0].texcoord); + if(inblendindex8) m->stride += sizeof(verts[0].blendindexes); // no index8? bug? + if(inblendweight8) m->stride += sizeof(verts[0].blendweights); // no weight8? bug? + if(inblendindexi) m->stride += sizeof(verts[0].blendindexes); + if(inblendweightf) m->stride += sizeof(verts[0].blendweights); + if(invertexcolor8) m->stride += sizeof(verts[0].color); + #endif + //for( int i = 0; i < 16; ++i ) printf("%.9g%s", ((float*)verts)[i], (i % 3) == 2 ? "\n" : ","); + m->verts = verts; + /*m->verts = 0; FREE(verts);*/ textures = CALLOC(hdr->num_meshes * 8, sizeof(GLuint)); colormaps = CALLOC(hdr->num_meshes * 8, sizeof(vec4)); @@ -369883,8 +369899,8 @@ model_t model_from_mem(const void *mem, int len, int flags) { // static int shaderprog = -1; // if( shaderprog < 0 ) { const char *symbols[] = { "{{include-shadowmap}}", vfs_read("shaders/fs_0_0_shadowmap_lit.glsl") }; // #define RIM - int shaderprog = shader(strlerp(1,symbols,vfs_read("shaders/vs_3223444143_16_332_model.glsl")), strlerp(1,symbols,vfs_read("shaders/fs_32_4_model.glsl")), //fs, - "att_position,att_texcoord,att_texcoord2,att_normal,att_tangent,att_instanced_matrix,,,,att_indexes,att_weights,att_vertexindex,att_color,att_bitangent","fragColor", + int shaderprog = shader(strlerp(1,symbols,vfs_read("shaders/vs_323444143_16_3322_model.glsl")), strlerp(1,symbols,vfs_read("shaders/fs_32_4_model.glsl")), //fs, + "att_position,att_texcoord,att_normal,att_tangent,att_instanced_matrix,,,,att_indexes,att_weights,att_vertexindex,att_color,att_bitangent,att_texcoord2","fragColor", va("SHADING_PHONG,%s", (flags&MODEL_RIMLIGHT)?"RIM":"")); // } // ASSERT(shaderprog > 0); @@ -370126,7 +370142,7 @@ float model_animate(model_t m, float curframe) { } static -void model_draw_call(model_t m) { +void model_draw_call(model_t m, int shader) { if(!m.iqm) return; iqm_t *q = m.iqm; @@ -370138,17 +370154,21 @@ void model_draw_call(model_t m) { glActiveTexture(GL_TEXTURE0); glBindTexture(GL_TEXTURE_2D, textures[i] ); - glUniform1i(glGetUniformLocation(m.program, "fsDiffTex"), 0 /*<-- unit!*/ ); + glUniform1i(glGetUniformLocation(shader, "u_texture2d"), 0 ); int loc; - if ((loc = glGetUniformLocation(m.program, "u_textured")) >= 0) { + if ((loc = glGetUniformLocation(shader, "u_textured")) >= 0) { bool textured = !!textures[i] && textures[i] != texture_checker().id; // m.materials[i].layer[0].texture != texture_checker().id; glUniform1i(loc, textured ? GL_TRUE : GL_FALSE); - if ((loc = glGetUniformLocation(m.program, "u_diffuse")) >= 0) { + if ((loc = glGetUniformLocation(shader, "u_diffuse")) >= 0) { glUniform4f(loc, m.materials[i].layer[0].color.r, m.materials[i].layer[0].color.g, m.materials[i].layer[0].color.b, m.materials[i].layer[0].color.a); } } + glActiveTexture(GL_TEXTURE1); + glBindTexture(GL_TEXTURE_2D, m.lightmap.id); + glUniform1i(glGetUniformLocation(shader, "u_lightmap"), 1 ); + glDrawElementsInstanced(GL_TRIANGLES, 3*im->num_triangles, GL_UNSIGNED_INT, &tris[im->first_triangle], m.num_instances); profile_incstat("Render.num_drawcalls", +1); profile_incstat("Render.num_triangles", +im->num_triangles); @@ -370170,7 +370190,7 @@ void model_render_instanced(model_t m, mat44 proj, mat44 view, mat44* models, in } model_set_uniforms(m, shader > 0 ? shader : m.program, mv, proj, view, models[0]); - model_draw_call(m); + model_draw_call(m, shader > 0 ? shader : m.program); } void model_render(model_t m, mat44 proj, mat44 view, mat44 model, int shader) { @@ -370287,114 +370307,99 @@ lightmap_t lightmap(int hmsize, float cnear, float cfar, vec3 color, int passes, return lm; } - return lm; -} + const char *symbols[] = { "{{include-shadowmap}}", vfs_read("shaders/fs_0_0_shadowmap_lit.glsl") }; // #define RIM + lm.shader = shader(strlerp(1,symbols,vfs_read("shaders/vs_323444143_16_3322_model.glsl")), strlerp(1,symbols,vfs_read("shaders/fs_32_4_model.glsl")), //fs, + "att_position,att_texcoord,att_normal,att_tangent,att_instanced_matrix,,,,att_indexes,att_weights,att_vertexindex,att_color,att_bitangent,att_texcoord2","fragColor", + va("%s", "LIGHTMAP_BAKING")); -static -void lightmap_destroytexture(lightmap_t *lm) { - texture_destroy(&lm->lightmap); - for (int i = 0; i < array_count(lm->models); i++) { - lm->models[i]->lightmap = NULL; - } + return lm; } void lightmap_destroy(lightmap_t *lm) { lmDestroy(lm->ctx); - lightmap_destroytexture(lm); + shader_destroy(lm->shader); // } void lightmap_setup(lightmap_t *lm, int w, int h) { - if (lm->ready) { - lightmap_destroytexture(lm); - } lm->ready=1; - - lm->lightmap = texture_create(w, h, 4, 0, TEXTURE_LINEAR); - glBindTexture(GL_TEXTURE_2D, lm->lightmap.id); - unsigned char emissive[] = { 0, 0, 0, 255 }; - glTexImage2D(GL_TEXTURE_2D, 0, GL_RGBA, 1, 1, 0, GL_RGBA, GL_UNSIGNED_BYTE, emissive); - glBindTexture(GL_TEXTURE_2D, 0); + //@fixme: prep atlas for lightmaps + lm->w = w; + lm->h = h; } -void lightmap_addmodel(lightmap_t *lm, model_t *m) { - array_push(lm->models, m); -} - -void lightmap_bake(lightmap_t *lm, int bounces, void (*drawscene)(lightmap_t *lm, float *view, float *proj, void *userdata), void *userdata) { +void lightmap_bake(lightmap_t *lm, int bounces, void (*drawscene)(lightmap_t *lm, model_t *m, float *view, float *proj, void *userdata), void *userdata) { ASSERT(lm->ready); // @fixme: use xatlas to UV pack all models, update their UV1 and upload them to GPU. - // @fixme: combine all verts data together and push to lmSetGeometry - // int w = lm->lightmap->w, h = lm->lightmap->h; - // float *data = CALLOC(w * h * 4, sizeof(float)); - // memset(data, 0, w*h*4); - // for (int b = 0; b < bounces; b++) { - // lmSetTargetLightmap(lm->ctx, data, w, h, 4); + GLint cullface=0; + glGetIntegerv(GL_CULL_FACE, &cullface); + glDisable(GL_CULL_FACE); - // lmSetGeometry(lm->ctx, NULL, - // LM_FLOAT, (unsigned char*)scene->vertices + offsetof(vertex_t, p), sizeof(vertex_t), - // LM_NONE , NULL , 0 , // no interpolated normals in this example - // LM_FLOAT, (unsigned char*)scene->vertices + offsetof(vertex_t, t), sizeof(vertex_t), - // scene->indexCount, LM_UNSIGNED_SHORT, scene->indices); + int w = lm->w, h = lm->h; + for (int i = 0; i < array_count(lm->models); i++) { + model_t *m = lm->models[i]; + if (m->lightmap.w != 0) { + texture_destroy(&m->lightmap); + } + m->lightmap = texture_create(w, h, 4, 0, TEXTURE_LINEAR|TEXTURE_FLOAT); + glBindTexture(GL_TEXTURE_2D, m->lightmap.id); + unsigned char emissive[] = { 0, 0, 0, 255 }; + glTexImage2D(GL_TEXTURE_2D, 0, GL_RGBA, 1, 1, 0, GL_RGBA, GL_UNSIGNED_BYTE, emissive); + glBindTexture(GL_TEXTURE_2D, 0); + } + for (int b = 0; b < bounces; b++) { + for (int i = 0; i < array_count(lm->models); i++) { + model_t *m = lm->models[i]; + if (!m->lmdata) { + m->lmdata = CALLOC(w*h*4, sizeof(float)); + } + memset(m->lmdata, 0, w*h*4); + lmSetTargetLightmap(lm->ctx, m->lmdata, w, h, 4); + lmSetGeometry(lm->ctx, m->pivot, + LM_FLOAT, (uint8_t*)m->verts + offsetof(iqm_vertex, position), sizeof(iqm_vertex), + LM_FLOAT, (uint8_t*)m->verts + offsetof(iqm_vertex, normal), sizeof(iqm_vertex), + LM_FLOAT, (uint8_t*)m->verts + offsetof(iqm_vertex, texcoord), sizeof(iqm_vertex), + m->num_tris*3, LM_UNSIGNED_INT, m->tris); + + glDisable(GL_BLEND); + int vp[4]; + float view[16], projection[16]; + while (lmBegin(lm->ctx, vp, view, projection)) + { + // render to lightmapper framebuffer + glViewport(vp[0], vp[1], vp[2], vp[3]); + drawscene(lm, m, view, projection, userdata); + lmEnd(lm->ctx); + } + } + + // postprocess texture + for (int i = 0; i < array_count(lm->models); i++) { + model_t *m = lm->models[i]; + float *temp = CALLOC(w * h * 4, sizeof(float)); + for (int i = 0; i < 16; i++) + { + lmImageDilate(m->lmdata, temp, w, h, 4); + lmImageDilate(temp, m->lmdata, w, h, 4); + } + lmImageSmooth(m->lmdata, temp, w, h, 4); + lmImageDilate(temp, m->lmdata, w, h, 4); + lmImagePower(m->lmdata, w, h, 4, 1.0f / 2.2f, 0x7); // gamma correct color channels + FREE(temp); + + // save result to a file + // if (lmImageSaveTGAf("result.tga", m->lmdata, w, h, 4, 1.0f)) + // printf("Saved result.tga\n"); + // upload result + glBindTexture(GL_TEXTURE_2D, m->lightmap.id); + glTexImage2D(GL_TEXTURE_2D, 0, GL_RGBA, w, h, 0, GL_RGBA, GL_FLOAT, m->lmdata); + FREE(m->lmdata); m->lmdata = NULL; + } + } - // glDisable(GL_BLEND); - - // int vp[4]; - // float view[16], projection[16]; - // double lastUpdateTime = 0.0; - // while (lmBegin(ctx, vp, view, projection)) - // { - // // render to lightmapper framebuffer - // glViewport(vp[0], vp[1], vp[2], vp[3]); - // drawScene(scene, view, projection); - - // // display progress every second (printf is expensive) - // double time = time_ms() / 1000.0; - // if (time - lastUpdateTime > 1.0) - // { - // lastUpdateTime = time; - // printf("\r%6.2f%%", lmProgress(ctx) * 100.0f); - // fflush(stdout); - // } - - // lmEnd(ctx); - // // window_swap(); - // } - // printf("\rFinished baking %d triangles.\n", scene->indexCount / 3); - // } - - // lmDestroy(ctx); - - // // postprocess texture - // float *temp = CALLOC(w * h * 4, sizeof(float)); - // for (int i = 0; i < 16; i++) - // { - // lmImageDilate(data, temp, w, h, 4); - // lmImageDilate(temp, data, w, h, 4); - // } - // lmImageSmooth(data, temp, w, h, 4); - // lmImageDilate(temp, data, w, h, 4); - // lmImagePower(data, w, h, 4, 1.0f / 2.2f, 0x7); // gamma correct color channels - // FREE(temp); - - // // save result to a file - // if (lmImageSaveTGAf("result.tga", data, w, h, 4, 1.0f)) - // printf("Saved result.tga\n"); - - // // upload result - // glBindTexture(GL_TEXTURE_2D, scene->lightmap); - // glTexImage2D(GL_TEXTURE_2D, 0, GL_RGBA, w, h, 0, GL_RGBA, GL_FLOAT, data); - // FREE(data); -} - -void lightmap_clear(lightmap_t *lm) { - ASSERT(lm->ready); - glBindTexture(GL_TEXTURE_2D, lm->lightmap.id); - unsigned char emissive[] = { 0, 0, 0, 255 }; - glTexImage2D(GL_TEXTURE_2D, 0, GL_RGBA, 1, 1, 0, GL_RGBA, GL_UNSIGNED_BYTE, emissive); - glBindTexture(GL_TEXTURE_2D, 0); + if (cullface) glEnable(GL_CULL_FACE); } #line 0 diff --git a/engine/split/v4k_render.c b/engine/split/v4k_render.c index 2471c9b..c27d397 100644 --- a/engine/split/v4k_render.c +++ b/engine/split/v4k_render.c @@ -2766,13 +2766,13 @@ struct iqmbounds { typedef struct iqm_vertex { GLfloat position[3]; GLfloat texcoord[2]; - GLfloat texcoord2[2]; GLfloat normal[3]; GLfloat tangent[4]; GLubyte blendindexes[4]; GLubyte blendweights[4]; GLfloat blendvertexindex; GLubyte color[4]; + GLfloat texcoord2[2]; } iqm_vertex; typedef struct iqm_t { @@ -2882,6 +2882,13 @@ void model_set_uniforms(model_t m, int shader, mat44 mv, mat44 proj, mat44 view, if( (loc = glGetUniformLocation(shader, "u_billboard")) >= 0 ) { glUniform1i( loc, m.billboard ); } + if( (loc = glGetUniformLocation(shader, "texlit")) >= 0 ) { + glUniform1i( loc, (m.lightmap.w != 0) ); + } + else + if( (loc = glGetUniformLocation(shader, "u_texlit")) >= 0 ) { + glUniform1i( loc, (m.lightmap.w != 0) ); + } #if 0 // @todo: mat44 projview (useful?) #endif @@ -2926,28 +2933,26 @@ void model_set_state(model_t m) { glVertexAttribPointer(0, 3, GL_FLOAT, GL_FALSE, sizeof(iqm_vertex), (GLvoid*)offsetof(iqm_vertex, position) ); glVertexAttribPointer(1, 2, GL_FLOAT, GL_FALSE, sizeof(iqm_vertex), (GLvoid*)offsetof(iqm_vertex, texcoord) ); - glVertexAttribPointer(2, 2, GL_FLOAT, GL_FALSE, sizeof(iqm_vertex), (GLvoid*)offsetof(iqm_vertex, texcoord2) ); - glVertexAttribPointer(3, 3, GL_FLOAT, GL_FALSE, sizeof(iqm_vertex), (GLvoid*)offsetof(iqm_vertex, normal) ); - glVertexAttribPointer(4, 4, GL_FLOAT, GL_FALSE, sizeof(iqm_vertex), (GLvoid*)offsetof(iqm_vertex, tangent) ); + glVertexAttribPointer(2, 3, GL_FLOAT, GL_FALSE, sizeof(iqm_vertex), (GLvoid*)offsetof(iqm_vertex, normal) ); + glVertexAttribPointer(3, 4, GL_FLOAT, GL_FALSE, sizeof(iqm_vertex), (GLvoid*)offsetof(iqm_vertex, tangent) ); glEnableVertexAttribArray(0); glEnableVertexAttribArray(1); glEnableVertexAttribArray(2); glEnableVertexAttribArray(3); - glEnableVertexAttribArray(4); // vertex color - glVertexAttribPointer(12, 4, GL_UNSIGNED_BYTE, GL_FALSE, sizeof(iqm_vertex), (GLvoid*)offsetof(iqm_vertex,color) ); - glEnableVertexAttribArray(12); + glVertexAttribPointer(11, 4, GL_UNSIGNED_BYTE, GL_FALSE, sizeof(iqm_vertex), (GLvoid*)offsetof(iqm_vertex,color) ); + glEnableVertexAttribArray(11); // animation if(numframes > 0) { - glVertexAttribPointer( 9, 4, GL_UNSIGNED_BYTE, GL_FALSE, sizeof(iqm_vertex), (GLvoid*)offsetof(iqm_vertex,blendindexes) ); - glVertexAttribPointer( 10, 4, GL_UNSIGNED_BYTE, GL_TRUE, sizeof(iqm_vertex), (GLvoid*)offsetof(iqm_vertex,blendweights) ); - glVertexAttribPointer(11, 1, GL_FLOAT, GL_FALSE, sizeof(iqm_vertex), (GLvoid*)offsetof(iqm_vertex, blendvertexindex) ); + glVertexAttribPointer( 8, 4, GL_UNSIGNED_BYTE, GL_FALSE, sizeof(iqm_vertex), (GLvoid*)offsetof(iqm_vertex,blendindexes) ); + glVertexAttribPointer( 9, 4, GL_UNSIGNED_BYTE, GL_TRUE, sizeof(iqm_vertex), (GLvoid*)offsetof(iqm_vertex,blendweights) ); + glVertexAttribPointer(10, 1, GL_FLOAT, GL_FALSE, sizeof(iqm_vertex), (GLvoid*)offsetof(iqm_vertex, blendvertexindex) ); + glEnableVertexAttribArray(8); glEnableVertexAttribArray(9); glEnableVertexAttribArray(10); - glEnableVertexAttribArray(11); } // mat4 attribute; for instanced rendering @@ -2959,22 +2964,26 @@ void model_set_state(model_t m) { glBindBuffer(GL_ARRAY_BUFFER, m.vao_instanced); glBufferData(GL_ARRAY_BUFFER, m.num_instances * mat4_size, m.instanced_matrices, GL_STATIC_DRAW); - glVertexAttribPointer(5, 4, GL_FLOAT, GL_FALSE, 4 * vec4_size, (GLvoid*)(((char*)NULL)+(0 * vec4_size))); - glVertexAttribPointer(6, 4, GL_FLOAT, GL_FALSE, 4 * vec4_size, (GLvoid*)(((char*)NULL)+(1 * vec4_size))); - glVertexAttribPointer(7, 4, GL_FLOAT, GL_FALSE, 4 * vec4_size, (GLvoid*)(((char*)NULL)+(2 * vec4_size))); - glVertexAttribPointer(8, 4, GL_FLOAT, GL_FALSE, 4 * vec4_size, (GLvoid*)(((char*)NULL)+(3 * vec4_size))); + glVertexAttribPointer(4, 4, GL_FLOAT, GL_FALSE, 4 * vec4_size, (GLvoid*)(((char*)NULL)+(0 * vec4_size))); + glVertexAttribPointer(5, 4, GL_FLOAT, GL_FALSE, 4 * vec4_size, (GLvoid*)(((char*)NULL)+(1 * vec4_size))); + glVertexAttribPointer(6, 4, GL_FLOAT, GL_FALSE, 4 * vec4_size, (GLvoid*)(((char*)NULL)+(2 * vec4_size))); + glVertexAttribPointer(7, 4, GL_FLOAT, GL_FALSE, 4 * vec4_size, (GLvoid*)(((char*)NULL)+(3 * vec4_size))); + glEnableVertexAttribArray(4); glEnableVertexAttribArray(5); glEnableVertexAttribArray(6); glEnableVertexAttribArray(7); - glEnableVertexAttribArray(8); + glVertexAttribDivisor(4, 1); glVertexAttribDivisor(5, 1); glVertexAttribDivisor(6, 1); glVertexAttribDivisor(7, 1); - glVertexAttribDivisor(8, 1); } + // lmap data + glVertexAttribPointer(12, 2, GL_FLOAT, GL_FALSE, sizeof(iqm_vertex), (GLvoid*)offsetof(iqm_vertex, texcoord2) ); + glEnableVertexAttribArray(12); + // 7 bitangent? into texcoord.z? glBindVertexArray( 0 ); @@ -3039,6 +3048,8 @@ bool model_load_meshes(iqm_t *q, const struct iqmheader *hdr, model_t *m) { } struct iqmtriangle *tris = (struct iqmtriangle *)&buf[hdr->ofs_triangles]; + m->num_tris = hdr->num_triangles; + m->tris = (void*)tris; glGenVertexArrays(1, &vao); glBindVertexArray(vao); @@ -3080,22 +3091,22 @@ bool model_load_meshes(iqm_t *q, const struct iqmheader *hdr, model_t *m) { glBufferData(GL_ARRAY_BUFFER, hdr->num_vertexes*sizeof(iqm_vertex), verts, GL_STATIC_DRAW); glBindBuffer(GL_ARRAY_BUFFER, 0); -m->stride = sizeof(iqm_vertex); -#if 0 -m->stride = 0; -if(inposition) m->stride += sizeof(verts[0].position); -if(innormal) m->stride += sizeof(verts[0].normal); -if(intangent) m->stride += sizeof(verts[0].tangent); -if(intexcoord) m->stride += sizeof(verts[0].texcoord); -if(inblendindex8) m->stride += sizeof(verts[0].blendindexes); // no index8? bug? -if(inblendweight8) m->stride += sizeof(verts[0].blendweights); // no weight8? bug? -if(inblendindexi) m->stride += sizeof(verts[0].blendindexes); -if(inblendweightf) m->stride += sizeof(verts[0].blendweights); -if(invertexcolor8) m->stride += sizeof(verts[0].color); -#endif -//for( int i = 0; i < 16; ++i ) printf("%.9g%s", ((float*)verts)[i], (i % 3) == 2 ? "\n" : ","); -//m->verts = verts; //FREE(verts); -m->verts = 0; FREE(verts); + m->stride = sizeof(iqm_vertex); + #if 0 + m->stride = 0; + if(inposition) m->stride += sizeof(verts[0].position); + if(innormal) m->stride += sizeof(verts[0].normal); + if(intangent) m->stride += sizeof(verts[0].tangent); + if(intexcoord) m->stride += sizeof(verts[0].texcoord); + if(inblendindex8) m->stride += sizeof(verts[0].blendindexes); // no index8? bug? + if(inblendweight8) m->stride += sizeof(verts[0].blendweights); // no weight8? bug? + if(inblendindexi) m->stride += sizeof(verts[0].blendindexes); + if(inblendweightf) m->stride += sizeof(verts[0].blendweights); + if(invertexcolor8) m->stride += sizeof(verts[0].color); + #endif + //for( int i = 0; i < 16; ++i ) printf("%.9g%s", ((float*)verts)[i], (i % 3) == 2 ? "\n" : ","); + m->verts = verts; + /*m->verts = 0; FREE(verts);*/ textures = CALLOC(hdr->num_meshes * 8, sizeof(GLuint)); colormaps = CALLOC(hdr->num_meshes * 8, sizeof(vec4)); @@ -3327,8 +3338,8 @@ model_t model_from_mem(const void *mem, int len, int flags) { // static int shaderprog = -1; // if( shaderprog < 0 ) { const char *symbols[] = { "{{include-shadowmap}}", vfs_read("shaders/fs_0_0_shadowmap_lit.glsl") }; // #define RIM - int shaderprog = shader(strlerp(1,symbols,vfs_read("shaders/vs_3223444143_16_332_model.glsl")), strlerp(1,symbols,vfs_read("shaders/fs_32_4_model.glsl")), //fs, - "att_position,att_texcoord,att_texcoord2,att_normal,att_tangent,att_instanced_matrix,,,,att_indexes,att_weights,att_vertexindex,att_color,att_bitangent","fragColor", + int shaderprog = shader(strlerp(1,symbols,vfs_read("shaders/vs_323444143_16_3322_model.glsl")), strlerp(1,symbols,vfs_read("shaders/fs_32_4_model.glsl")), //fs, + "att_position,att_texcoord,att_normal,att_tangent,att_instanced_matrix,,,,att_indexes,att_weights,att_vertexindex,att_color,att_bitangent,att_texcoord2","fragColor", va("SHADING_PHONG,%s", (flags&MODEL_RIMLIGHT)?"RIM":"")); // } // ASSERT(shaderprog > 0); @@ -3570,7 +3581,7 @@ float model_animate(model_t m, float curframe) { } static -void model_draw_call(model_t m) { +void model_draw_call(model_t m, int shader) { if(!m.iqm) return; iqm_t *q = m.iqm; @@ -3582,17 +3593,21 @@ void model_draw_call(model_t m) { glActiveTexture(GL_TEXTURE0); glBindTexture(GL_TEXTURE_2D, textures[i] ); - glUniform1i(glGetUniformLocation(m.program, "fsDiffTex"), 0 /*<-- unit!*/ ); + glUniform1i(glGetUniformLocation(shader, "u_texture2d"), 0 ); int loc; - if ((loc = glGetUniformLocation(m.program, "u_textured")) >= 0) { + if ((loc = glGetUniformLocation(shader, "u_textured")) >= 0) { bool textured = !!textures[i] && textures[i] != texture_checker().id; // m.materials[i].layer[0].texture != texture_checker().id; glUniform1i(loc, textured ? GL_TRUE : GL_FALSE); - if ((loc = glGetUniformLocation(m.program, "u_diffuse")) >= 0) { + if ((loc = glGetUniformLocation(shader, "u_diffuse")) >= 0) { glUniform4f(loc, m.materials[i].layer[0].color.r, m.materials[i].layer[0].color.g, m.materials[i].layer[0].color.b, m.materials[i].layer[0].color.a); } } + glActiveTexture(GL_TEXTURE1); + glBindTexture(GL_TEXTURE_2D, m.lightmap.id); + glUniform1i(glGetUniformLocation(shader, "u_lightmap"), 1 ); + glDrawElementsInstanced(GL_TRIANGLES, 3*im->num_triangles, GL_UNSIGNED_INT, &tris[im->first_triangle], m.num_instances); profile_incstat("Render.num_drawcalls", +1); profile_incstat("Render.num_triangles", +im->num_triangles); @@ -3614,7 +3629,7 @@ void model_render_instanced(model_t m, mat44 proj, mat44 view, mat44* models, in } model_set_uniforms(m, shader > 0 ? shader : m.program, mv, proj, view, models[0]); - model_draw_call(m); + model_draw_call(m, shader > 0 ? shader : m.program); } void model_render(model_t m, mat44 proj, mat44 view, mat44 model, int shader) { @@ -3731,113 +3746,98 @@ lightmap_t lightmap(int hmsize, float cnear, float cfar, vec3 color, int passes, return lm; } - return lm; -} + const char *symbols[] = { "{{include-shadowmap}}", vfs_read("shaders/fs_0_0_shadowmap_lit.glsl") }; // #define RIM + lm.shader = shader(strlerp(1,symbols,vfs_read("shaders/vs_323444143_16_3322_model.glsl")), strlerp(1,symbols,vfs_read("shaders/fs_32_4_model.glsl")), //fs, + "att_position,att_texcoord,att_normal,att_tangent,att_instanced_matrix,,,,att_indexes,att_weights,att_vertexindex,att_color,att_bitangent,att_texcoord2","fragColor", + va("%s", "LIGHTMAP_BAKING")); -static -void lightmap_destroytexture(lightmap_t *lm) { - texture_destroy(&lm->lightmap); - for (int i = 0; i < array_count(lm->models); i++) { - lm->models[i]->lightmap = NULL; - } + return lm; } void lightmap_destroy(lightmap_t *lm) { lmDestroy(lm->ctx); - lightmap_destroytexture(lm); + shader_destroy(lm->shader); // } void lightmap_setup(lightmap_t *lm, int w, int h) { - if (lm->ready) { - lightmap_destroytexture(lm); - } lm->ready=1; - - lm->lightmap = texture_create(w, h, 4, 0, TEXTURE_LINEAR); - glBindTexture(GL_TEXTURE_2D, lm->lightmap.id); - unsigned char emissive[] = { 0, 0, 0, 255 }; - glTexImage2D(GL_TEXTURE_2D, 0, GL_RGBA, 1, 1, 0, GL_RGBA, GL_UNSIGNED_BYTE, emissive); - glBindTexture(GL_TEXTURE_2D, 0); + //@fixme: prep atlas for lightmaps + lm->w = w; + lm->h = h; } -void lightmap_addmodel(lightmap_t *lm, model_t *m) { - array_push(lm->models, m); -} - -void lightmap_bake(lightmap_t *lm, int bounces, void (*drawscene)(lightmap_t *lm, float *view, float *proj, void *userdata), void *userdata) { +void lightmap_bake(lightmap_t *lm, int bounces, void (*drawscene)(lightmap_t *lm, model_t *m, float *view, float *proj, void *userdata), void *userdata) { ASSERT(lm->ready); // @fixme: use xatlas to UV pack all models, update their UV1 and upload them to GPU. - // @fixme: combine all verts data together and push to lmSetGeometry - // int w = lm->lightmap->w, h = lm->lightmap->h; - // float *data = CALLOC(w * h * 4, sizeof(float)); - // memset(data, 0, w*h*4); - // for (int b = 0; b < bounces; b++) { - // lmSetTargetLightmap(lm->ctx, data, w, h, 4); + GLint cullface=0; + glGetIntegerv(GL_CULL_FACE, &cullface); + glDisable(GL_CULL_FACE); - // lmSetGeometry(lm->ctx, NULL, - // LM_FLOAT, (unsigned char*)scene->vertices + offsetof(vertex_t, p), sizeof(vertex_t), - // LM_NONE , NULL , 0 , // no interpolated normals in this example - // LM_FLOAT, (unsigned char*)scene->vertices + offsetof(vertex_t, t), sizeof(vertex_t), - // scene->indexCount, LM_UNSIGNED_SHORT, scene->indices); + int w = lm->w, h = lm->h; + for (int i = 0; i < array_count(lm->models); i++) { + model_t *m = lm->models[i]; + if (m->lightmap.w != 0) { + texture_destroy(&m->lightmap); + } + m->lightmap = texture_create(w, h, 4, 0, TEXTURE_LINEAR|TEXTURE_FLOAT); + glBindTexture(GL_TEXTURE_2D, m->lightmap.id); + unsigned char emissive[] = { 0, 0, 0, 255 }; + glTexImage2D(GL_TEXTURE_2D, 0, GL_RGBA, 1, 1, 0, GL_RGBA, GL_UNSIGNED_BYTE, emissive); + glBindTexture(GL_TEXTURE_2D, 0); + } + for (int b = 0; b < bounces; b++) { + for (int i = 0; i < array_count(lm->models); i++) { + model_t *m = lm->models[i]; + if (!m->lmdata) { + m->lmdata = CALLOC(w*h*4, sizeof(float)); + } + memset(m->lmdata, 0, w*h*4); + lmSetTargetLightmap(lm->ctx, m->lmdata, w, h, 4); + lmSetGeometry(lm->ctx, m->pivot, + LM_FLOAT, (uint8_t*)m->verts + offsetof(iqm_vertex, position), sizeof(iqm_vertex), + LM_FLOAT, (uint8_t*)m->verts + offsetof(iqm_vertex, normal), sizeof(iqm_vertex), + LM_FLOAT, (uint8_t*)m->verts + offsetof(iqm_vertex, texcoord), sizeof(iqm_vertex), + m->num_tris*3, LM_UNSIGNED_INT, m->tris); + + glDisable(GL_BLEND); + int vp[4]; + float view[16], projection[16]; + while (lmBegin(lm->ctx, vp, view, projection)) + { + // render to lightmapper framebuffer + glViewport(vp[0], vp[1], vp[2], vp[3]); + drawscene(lm, m, view, projection, userdata); + lmEnd(lm->ctx); + } + } + + // postprocess texture + for (int i = 0; i < array_count(lm->models); i++) { + model_t *m = lm->models[i]; + float *temp = CALLOC(w * h * 4, sizeof(float)); + for (int i = 0; i < 16; i++) + { + lmImageDilate(m->lmdata, temp, w, h, 4); + lmImageDilate(temp, m->lmdata, w, h, 4); + } + lmImageSmooth(m->lmdata, temp, w, h, 4); + lmImageDilate(temp, m->lmdata, w, h, 4); + lmImagePower(m->lmdata, w, h, 4, 1.0f / 2.2f, 0x7); // gamma correct color channels + FREE(temp); + + // save result to a file + // if (lmImageSaveTGAf("result.tga", m->lmdata, w, h, 4, 1.0f)) + // printf("Saved result.tga\n"); + // upload result + glBindTexture(GL_TEXTURE_2D, m->lightmap.id); + glTexImage2D(GL_TEXTURE_2D, 0, GL_RGBA, w, h, 0, GL_RGBA, GL_FLOAT, m->lmdata); + FREE(m->lmdata); m->lmdata = NULL; + } + } - // glDisable(GL_BLEND); - - // int vp[4]; - // float view[16], projection[16]; - // double lastUpdateTime = 0.0; - // while (lmBegin(ctx, vp, view, projection)) - // { - // // render to lightmapper framebuffer - // glViewport(vp[0], vp[1], vp[2], vp[3]); - // drawScene(scene, view, projection); - - // // display progress every second (printf is expensive) - // double time = time_ms() / 1000.0; - // if (time - lastUpdateTime > 1.0) - // { - // lastUpdateTime = time; - // printf("\r%6.2f%%", lmProgress(ctx) * 100.0f); - // fflush(stdout); - // } - - // lmEnd(ctx); - // // window_swap(); - // } - // printf("\rFinished baking %d triangles.\n", scene->indexCount / 3); - // } - - // lmDestroy(ctx); - - // // postprocess texture - // float *temp = CALLOC(w * h * 4, sizeof(float)); - // for (int i = 0; i < 16; i++) - // { - // lmImageDilate(data, temp, w, h, 4); - // lmImageDilate(temp, data, w, h, 4); - // } - // lmImageSmooth(data, temp, w, h, 4); - // lmImageDilate(temp, data, w, h, 4); - // lmImagePower(data, w, h, 4, 1.0f / 2.2f, 0x7); // gamma correct color channels - // FREE(temp); - - // // save result to a file - // if (lmImageSaveTGAf("result.tga", data, w, h, 4, 1.0f)) - // printf("Saved result.tga\n"); - - // // upload result - // glBindTexture(GL_TEXTURE_2D, scene->lightmap); - // glTexImage2D(GL_TEXTURE_2D, 0, GL_RGBA, w, h, 0, GL_RGBA, GL_FLOAT, data); - // FREE(data); -} - -void lightmap_clear(lightmap_t *lm) { - ASSERT(lm->ready); - glBindTexture(GL_TEXTURE_2D, lm->lightmap.id); - unsigned char emissive[] = { 0, 0, 0, 255 }; - glTexImage2D(GL_TEXTURE_2D, 0, GL_RGBA, 1, 1, 0, GL_RGBA, GL_UNSIGNED_BYTE, emissive); - glBindTexture(GL_TEXTURE_2D, 0); + if (cullface) glEnable(GL_CULL_FACE); } diff --git a/engine/split/v4k_render.h b/engine/split/v4k_render.h index c374521..a4b6518 100644 --- a/engine/split/v4k_render.h +++ b/engine/split/v4k_render.h @@ -520,7 +520,9 @@ typedef struct model_t { handle *textures; char **texture_names; array(material_t) materials; - texture_t *lightmap; + + texture_t lightmap; + float *lmdata; unsigned num_meshes; unsigned num_triangles; @@ -534,6 +536,8 @@ typedef struct model_t { int stride; // usually 68 bytes for a p3 u2 u2 n3 t4 i4B w4B c4B vertex stream void *verts; int num_verts; + void *tris; + int num_tris; handle vao, ibo, vbo, vao_instanced; unsigned flags; @@ -585,15 +589,16 @@ API anims_t animations(const char *pathfile, int flags); typedef struct lightmap_t { struct lm_context *ctx; // private bool ready; - texture_t lightmap; //@fixme: do we need it per-model? + int w, h; + int atlas_w, atlas_h; //@fixme: implement + texture_t atlas; //@fixme: implement this array(model_t*) models; + unsigned shader; } lightmap_t; API lightmap_t lightmap(int hmsize /*64*/, float near, float far, vec3 color /*1,1,1 for AO*/, int passes /*2*/, float threshold /*0.01f*/, float distmod /*0.0f*/); API void lightmap_setup(lightmap_t *lm, int w, int h); -API void lightmap_addmodel(lightmap_t *lm, model_t *m); -API void lightmap_bake(lightmap_t *lm, int bounces, void (*drawscene)(lightmap_t *lm, float *view, float *proj, void *userdata), void *userdata); -API void lightmap_clear(lightmap_t *lm); +API void lightmap_bake(lightmap_t *lm, int bounces, void (*drawscene)(lightmap_t *lm, model_t *m, float *view, float *proj, void *userdata), void *userdata); API void lightmap_destroy(lightmap_t *lm); // ----------------------------------------------------------------------------- diff --git a/engine/v4k.c b/engine/v4k.c index 8aac7d3..a34e597 100644 --- a/engine/v4k.c +++ b/engine/v4k.c @@ -19682,13 +19682,13 @@ struct iqmbounds { typedef struct iqm_vertex { GLfloat position[3]; GLfloat texcoord[2]; - GLfloat texcoord2[2]; GLfloat normal[3]; GLfloat tangent[4]; GLubyte blendindexes[4]; GLubyte blendweights[4]; GLfloat blendvertexindex; GLubyte color[4]; + GLfloat texcoord2[2]; } iqm_vertex; typedef struct iqm_t { @@ -19798,6 +19798,13 @@ void model_set_uniforms(model_t m, int shader, mat44 mv, mat44 proj, mat44 view, if( (loc = glGetUniformLocation(shader, "u_billboard")) >= 0 ) { glUniform1i( loc, m.billboard ); } + if( (loc = glGetUniformLocation(shader, "texlit")) >= 0 ) { + glUniform1i( loc, (m.lightmap.w != 0) ); + } + else + if( (loc = glGetUniformLocation(shader, "u_texlit")) >= 0 ) { + glUniform1i( loc, (m.lightmap.w != 0) ); + } #if 0 // @todo: mat44 projview (useful?) #endif @@ -19842,28 +19849,26 @@ void model_set_state(model_t m) { glVertexAttribPointer(0, 3, GL_FLOAT, GL_FALSE, sizeof(iqm_vertex), (GLvoid*)offsetof(iqm_vertex, position) ); glVertexAttribPointer(1, 2, GL_FLOAT, GL_FALSE, sizeof(iqm_vertex), (GLvoid*)offsetof(iqm_vertex, texcoord) ); - glVertexAttribPointer(2, 2, GL_FLOAT, GL_FALSE, sizeof(iqm_vertex), (GLvoid*)offsetof(iqm_vertex, texcoord2) ); - glVertexAttribPointer(3, 3, GL_FLOAT, GL_FALSE, sizeof(iqm_vertex), (GLvoid*)offsetof(iqm_vertex, normal) ); - glVertexAttribPointer(4, 4, GL_FLOAT, GL_FALSE, sizeof(iqm_vertex), (GLvoid*)offsetof(iqm_vertex, tangent) ); + glVertexAttribPointer(2, 3, GL_FLOAT, GL_FALSE, sizeof(iqm_vertex), (GLvoid*)offsetof(iqm_vertex, normal) ); + glVertexAttribPointer(3, 4, GL_FLOAT, GL_FALSE, sizeof(iqm_vertex), (GLvoid*)offsetof(iqm_vertex, tangent) ); glEnableVertexAttribArray(0); glEnableVertexAttribArray(1); glEnableVertexAttribArray(2); glEnableVertexAttribArray(3); - glEnableVertexAttribArray(4); // vertex color - glVertexAttribPointer(12, 4, GL_UNSIGNED_BYTE, GL_FALSE, sizeof(iqm_vertex), (GLvoid*)offsetof(iqm_vertex,color) ); - glEnableVertexAttribArray(12); + glVertexAttribPointer(11, 4, GL_UNSIGNED_BYTE, GL_FALSE, sizeof(iqm_vertex), (GLvoid*)offsetof(iqm_vertex,color) ); + glEnableVertexAttribArray(11); // animation if(numframes > 0) { - glVertexAttribPointer( 9, 4, GL_UNSIGNED_BYTE, GL_FALSE, sizeof(iqm_vertex), (GLvoid*)offsetof(iqm_vertex,blendindexes) ); - glVertexAttribPointer( 10, 4, GL_UNSIGNED_BYTE, GL_TRUE, sizeof(iqm_vertex), (GLvoid*)offsetof(iqm_vertex,blendweights) ); - glVertexAttribPointer(11, 1, GL_FLOAT, GL_FALSE, sizeof(iqm_vertex), (GLvoid*)offsetof(iqm_vertex, blendvertexindex) ); + glVertexAttribPointer( 8, 4, GL_UNSIGNED_BYTE, GL_FALSE, sizeof(iqm_vertex), (GLvoid*)offsetof(iqm_vertex,blendindexes) ); + glVertexAttribPointer( 9, 4, GL_UNSIGNED_BYTE, GL_TRUE, sizeof(iqm_vertex), (GLvoid*)offsetof(iqm_vertex,blendweights) ); + glVertexAttribPointer(10, 1, GL_FLOAT, GL_FALSE, sizeof(iqm_vertex), (GLvoid*)offsetof(iqm_vertex, blendvertexindex) ); + glEnableVertexAttribArray(8); glEnableVertexAttribArray(9); glEnableVertexAttribArray(10); - glEnableVertexAttribArray(11); } // mat4 attribute; for instanced rendering @@ -19875,22 +19880,26 @@ void model_set_state(model_t m) { glBindBuffer(GL_ARRAY_BUFFER, m.vao_instanced); glBufferData(GL_ARRAY_BUFFER, m.num_instances * mat4_size, m.instanced_matrices, GL_STATIC_DRAW); - glVertexAttribPointer(5, 4, GL_FLOAT, GL_FALSE, 4 * vec4_size, (GLvoid*)(((char*)NULL)+(0 * vec4_size))); - glVertexAttribPointer(6, 4, GL_FLOAT, GL_FALSE, 4 * vec4_size, (GLvoid*)(((char*)NULL)+(1 * vec4_size))); - glVertexAttribPointer(7, 4, GL_FLOAT, GL_FALSE, 4 * vec4_size, (GLvoid*)(((char*)NULL)+(2 * vec4_size))); - glVertexAttribPointer(8, 4, GL_FLOAT, GL_FALSE, 4 * vec4_size, (GLvoid*)(((char*)NULL)+(3 * vec4_size))); + glVertexAttribPointer(4, 4, GL_FLOAT, GL_FALSE, 4 * vec4_size, (GLvoid*)(((char*)NULL)+(0 * vec4_size))); + glVertexAttribPointer(5, 4, GL_FLOAT, GL_FALSE, 4 * vec4_size, (GLvoid*)(((char*)NULL)+(1 * vec4_size))); + glVertexAttribPointer(6, 4, GL_FLOAT, GL_FALSE, 4 * vec4_size, (GLvoid*)(((char*)NULL)+(2 * vec4_size))); + glVertexAttribPointer(7, 4, GL_FLOAT, GL_FALSE, 4 * vec4_size, (GLvoid*)(((char*)NULL)+(3 * vec4_size))); + glEnableVertexAttribArray(4); glEnableVertexAttribArray(5); glEnableVertexAttribArray(6); glEnableVertexAttribArray(7); - glEnableVertexAttribArray(8); + glVertexAttribDivisor(4, 1); glVertexAttribDivisor(5, 1); glVertexAttribDivisor(6, 1); glVertexAttribDivisor(7, 1); - glVertexAttribDivisor(8, 1); } + // lmap data + glVertexAttribPointer(12, 2, GL_FLOAT, GL_FALSE, sizeof(iqm_vertex), (GLvoid*)offsetof(iqm_vertex, texcoord2) ); + glEnableVertexAttribArray(12); + // 7 bitangent? into texcoord.z? glBindVertexArray( 0 ); @@ -19955,6 +19964,8 @@ bool model_load_meshes(iqm_t *q, const struct iqmheader *hdr, model_t *m) { } struct iqmtriangle *tris = (struct iqmtriangle *)&buf[hdr->ofs_triangles]; + m->num_tris = hdr->num_triangles; + m->tris = (void*)tris; glGenVertexArrays(1, &vao); glBindVertexArray(vao); @@ -19996,22 +20007,22 @@ bool model_load_meshes(iqm_t *q, const struct iqmheader *hdr, model_t *m) { glBufferData(GL_ARRAY_BUFFER, hdr->num_vertexes*sizeof(iqm_vertex), verts, GL_STATIC_DRAW); glBindBuffer(GL_ARRAY_BUFFER, 0); -m->stride = sizeof(iqm_vertex); -#if 0 -m->stride = 0; -if(inposition) m->stride += sizeof(verts[0].position); -if(innormal) m->stride += sizeof(verts[0].normal); -if(intangent) m->stride += sizeof(verts[0].tangent); -if(intexcoord) m->stride += sizeof(verts[0].texcoord); -if(inblendindex8) m->stride += sizeof(verts[0].blendindexes); // no index8? bug? -if(inblendweight8) m->stride += sizeof(verts[0].blendweights); // no weight8? bug? -if(inblendindexi) m->stride += sizeof(verts[0].blendindexes); -if(inblendweightf) m->stride += sizeof(verts[0].blendweights); -if(invertexcolor8) m->stride += sizeof(verts[0].color); -#endif -//for( int i = 0; i < 16; ++i ) printf("%.9g%s", ((float*)verts)[i], (i % 3) == 2 ? "\n" : ","); -//m->verts = verts; //FREE(verts); -m->verts = 0; FREE(verts); + m->stride = sizeof(iqm_vertex); + #if 0 + m->stride = 0; + if(inposition) m->stride += sizeof(verts[0].position); + if(innormal) m->stride += sizeof(verts[0].normal); + if(intangent) m->stride += sizeof(verts[0].tangent); + if(intexcoord) m->stride += sizeof(verts[0].texcoord); + if(inblendindex8) m->stride += sizeof(verts[0].blendindexes); // no index8? bug? + if(inblendweight8) m->stride += sizeof(verts[0].blendweights); // no weight8? bug? + if(inblendindexi) m->stride += sizeof(verts[0].blendindexes); + if(inblendweightf) m->stride += sizeof(verts[0].blendweights); + if(invertexcolor8) m->stride += sizeof(verts[0].color); + #endif + //for( int i = 0; i < 16; ++i ) printf("%.9g%s", ((float*)verts)[i], (i % 3) == 2 ? "\n" : ","); + m->verts = verts; + /*m->verts = 0; FREE(verts);*/ textures = CALLOC(hdr->num_meshes * 8, sizeof(GLuint)); colormaps = CALLOC(hdr->num_meshes * 8, sizeof(vec4)); @@ -20243,8 +20254,8 @@ model_t model_from_mem(const void *mem, int len, int flags) { // static int shaderprog = -1; // if( shaderprog < 0 ) { const char *symbols[] = { "{{include-shadowmap}}", vfs_read("shaders/fs_0_0_shadowmap_lit.glsl") }; // #define RIM - int shaderprog = shader(strlerp(1,symbols,vfs_read("shaders/vs_3223444143_16_332_model.glsl")), strlerp(1,symbols,vfs_read("shaders/fs_32_4_model.glsl")), //fs, - "att_position,att_texcoord,att_texcoord2,att_normal,att_tangent,att_instanced_matrix,,,,att_indexes,att_weights,att_vertexindex,att_color,att_bitangent","fragColor", + int shaderprog = shader(strlerp(1,symbols,vfs_read("shaders/vs_323444143_16_3322_model.glsl")), strlerp(1,symbols,vfs_read("shaders/fs_32_4_model.glsl")), //fs, + "att_position,att_texcoord,att_normal,att_tangent,att_instanced_matrix,,,,att_indexes,att_weights,att_vertexindex,att_color,att_bitangent,att_texcoord2","fragColor", va("SHADING_PHONG,%s", (flags&MODEL_RIMLIGHT)?"RIM":"")); // } // ASSERT(shaderprog > 0); @@ -20486,7 +20497,7 @@ float model_animate(model_t m, float curframe) { } static -void model_draw_call(model_t m) { +void model_draw_call(model_t m, int shader) { if(!m.iqm) return; iqm_t *q = m.iqm; @@ -20498,17 +20509,21 @@ void model_draw_call(model_t m) { glActiveTexture(GL_TEXTURE0); glBindTexture(GL_TEXTURE_2D, textures[i] ); - glUniform1i(glGetUniformLocation(m.program, "fsDiffTex"), 0 /*<-- unit!*/ ); + glUniform1i(glGetUniformLocation(shader, "u_texture2d"), 0 ); int loc; - if ((loc = glGetUniformLocation(m.program, "u_textured")) >= 0) { + if ((loc = glGetUniformLocation(shader, "u_textured")) >= 0) { bool textured = !!textures[i] && textures[i] != texture_checker().id; // m.materials[i].layer[0].texture != texture_checker().id; glUniform1i(loc, textured ? GL_TRUE : GL_FALSE); - if ((loc = glGetUniformLocation(m.program, "u_diffuse")) >= 0) { + if ((loc = glGetUniformLocation(shader, "u_diffuse")) >= 0) { glUniform4f(loc, m.materials[i].layer[0].color.r, m.materials[i].layer[0].color.g, m.materials[i].layer[0].color.b, m.materials[i].layer[0].color.a); } } + glActiveTexture(GL_TEXTURE1); + glBindTexture(GL_TEXTURE_2D, m.lightmap.id); + glUniform1i(glGetUniformLocation(shader, "u_lightmap"), 1 ); + glDrawElementsInstanced(GL_TRIANGLES, 3*im->num_triangles, GL_UNSIGNED_INT, &tris[im->first_triangle], m.num_instances); profile_incstat("Render.num_drawcalls", +1); profile_incstat("Render.num_triangles", +im->num_triangles); @@ -20530,7 +20545,7 @@ void model_render_instanced(model_t m, mat44 proj, mat44 view, mat44* models, in } model_set_uniforms(m, shader > 0 ? shader : m.program, mv, proj, view, models[0]); - model_draw_call(m); + model_draw_call(m, shader > 0 ? shader : m.program); } void model_render(model_t m, mat44 proj, mat44 view, mat44 model, int shader) { @@ -20647,114 +20662,99 @@ lightmap_t lightmap(int hmsize, float cnear, float cfar, vec3 color, int passes, return lm; } - return lm; -} + const char *symbols[] = { "{{include-shadowmap}}", vfs_read("shaders/fs_0_0_shadowmap_lit.glsl") }; // #define RIM + lm.shader = shader(strlerp(1,symbols,vfs_read("shaders/vs_323444143_16_3322_model.glsl")), strlerp(1,symbols,vfs_read("shaders/fs_32_4_model.glsl")), //fs, + "att_position,att_texcoord,att_normal,att_tangent,att_instanced_matrix,,,,att_indexes,att_weights,att_vertexindex,att_color,att_bitangent,att_texcoord2","fragColor", + va("%s", "LIGHTMAP_BAKING")); -static -void lightmap_destroytexture(lightmap_t *lm) { - texture_destroy(&lm->lightmap); - for (int i = 0; i < array_count(lm->models); i++) { - lm->models[i]->lightmap = NULL; - } + return lm; } void lightmap_destroy(lightmap_t *lm) { lmDestroy(lm->ctx); - lightmap_destroytexture(lm); + shader_destroy(lm->shader); // } void lightmap_setup(lightmap_t *lm, int w, int h) { - if (lm->ready) { - lightmap_destroytexture(lm); - } lm->ready=1; - - lm->lightmap = texture_create(w, h, 4, 0, TEXTURE_LINEAR); - glBindTexture(GL_TEXTURE_2D, lm->lightmap.id); - unsigned char emissive[] = { 0, 0, 0, 255 }; - glTexImage2D(GL_TEXTURE_2D, 0, GL_RGBA, 1, 1, 0, GL_RGBA, GL_UNSIGNED_BYTE, emissive); - glBindTexture(GL_TEXTURE_2D, 0); + //@fixme: prep atlas for lightmaps + lm->w = w; + lm->h = h; } -void lightmap_addmodel(lightmap_t *lm, model_t *m) { - array_push(lm->models, m); -} - -void lightmap_bake(lightmap_t *lm, int bounces, void (*drawscene)(lightmap_t *lm, float *view, float *proj, void *userdata), void *userdata) { +void lightmap_bake(lightmap_t *lm, int bounces, void (*drawscene)(lightmap_t *lm, model_t *m, float *view, float *proj, void *userdata), void *userdata) { ASSERT(lm->ready); // @fixme: use xatlas to UV pack all models, update their UV1 and upload them to GPU. - // @fixme: combine all verts data together and push to lmSetGeometry - // int w = lm->lightmap->w, h = lm->lightmap->h; - // float *data = CALLOC(w * h * 4, sizeof(float)); - // memset(data, 0, w*h*4); - // for (int b = 0; b < bounces; b++) { - // lmSetTargetLightmap(lm->ctx, data, w, h, 4); + GLint cullface=0; + glGetIntegerv(GL_CULL_FACE, &cullface); + glDisable(GL_CULL_FACE); - // lmSetGeometry(lm->ctx, NULL, - // LM_FLOAT, (unsigned char*)scene->vertices + offsetof(vertex_t, p), sizeof(vertex_t), - // LM_NONE , NULL , 0 , // no interpolated normals in this example - // LM_FLOAT, (unsigned char*)scene->vertices + offsetof(vertex_t, t), sizeof(vertex_t), - // scene->indexCount, LM_UNSIGNED_SHORT, scene->indices); + int w = lm->w, h = lm->h; + for (int i = 0; i < array_count(lm->models); i++) { + model_t *m = lm->models[i]; + if (m->lightmap.w != 0) { + texture_destroy(&m->lightmap); + } + m->lightmap = texture_create(w, h, 4, 0, TEXTURE_LINEAR|TEXTURE_FLOAT); + glBindTexture(GL_TEXTURE_2D, m->lightmap.id); + unsigned char emissive[] = { 0, 0, 0, 255 }; + glTexImage2D(GL_TEXTURE_2D, 0, GL_RGBA, 1, 1, 0, GL_RGBA, GL_UNSIGNED_BYTE, emissive); + glBindTexture(GL_TEXTURE_2D, 0); + } + for (int b = 0; b < bounces; b++) { + for (int i = 0; i < array_count(lm->models); i++) { + model_t *m = lm->models[i]; + if (!m->lmdata) { + m->lmdata = CALLOC(w*h*4, sizeof(float)); + } + memset(m->lmdata, 0, w*h*4); + lmSetTargetLightmap(lm->ctx, m->lmdata, w, h, 4); + lmSetGeometry(lm->ctx, m->pivot, + LM_FLOAT, (uint8_t*)m->verts + offsetof(iqm_vertex, position), sizeof(iqm_vertex), + LM_FLOAT, (uint8_t*)m->verts + offsetof(iqm_vertex, normal), sizeof(iqm_vertex), + LM_FLOAT, (uint8_t*)m->verts + offsetof(iqm_vertex, texcoord), sizeof(iqm_vertex), + m->num_tris*3, LM_UNSIGNED_INT, m->tris); + + glDisable(GL_BLEND); + int vp[4]; + float view[16], projection[16]; + while (lmBegin(lm->ctx, vp, view, projection)) + { + // render to lightmapper framebuffer + glViewport(vp[0], vp[1], vp[2], vp[3]); + drawscene(lm, m, view, projection, userdata); + lmEnd(lm->ctx); + } + } + + // postprocess texture + for (int i = 0; i < array_count(lm->models); i++) { + model_t *m = lm->models[i]; + float *temp = CALLOC(w * h * 4, sizeof(float)); + for (int i = 0; i < 16; i++) + { + lmImageDilate(m->lmdata, temp, w, h, 4); + lmImageDilate(temp, m->lmdata, w, h, 4); + } + lmImageSmooth(m->lmdata, temp, w, h, 4); + lmImageDilate(temp, m->lmdata, w, h, 4); + lmImagePower(m->lmdata, w, h, 4, 1.0f / 2.2f, 0x7); // gamma correct color channels + FREE(temp); + + // save result to a file + // if (lmImageSaveTGAf("result.tga", m->lmdata, w, h, 4, 1.0f)) + // printf("Saved result.tga\n"); + // upload result + glBindTexture(GL_TEXTURE_2D, m->lightmap.id); + glTexImage2D(GL_TEXTURE_2D, 0, GL_RGBA, w, h, 0, GL_RGBA, GL_FLOAT, m->lmdata); + FREE(m->lmdata); m->lmdata = NULL; + } + } - // glDisable(GL_BLEND); - - // int vp[4]; - // float view[16], projection[16]; - // double lastUpdateTime = 0.0; - // while (lmBegin(ctx, vp, view, projection)) - // { - // // render to lightmapper framebuffer - // glViewport(vp[0], vp[1], vp[2], vp[3]); - // drawScene(scene, view, projection); - - // // display progress every second (printf is expensive) - // double time = time_ms() / 1000.0; - // if (time - lastUpdateTime > 1.0) - // { - // lastUpdateTime = time; - // printf("\r%6.2f%%", lmProgress(ctx) * 100.0f); - // fflush(stdout); - // } - - // lmEnd(ctx); - // // window_swap(); - // } - // printf("\rFinished baking %d triangles.\n", scene->indexCount / 3); - // } - - // lmDestroy(ctx); - - // // postprocess texture - // float *temp = CALLOC(w * h * 4, sizeof(float)); - // for (int i = 0; i < 16; i++) - // { - // lmImageDilate(data, temp, w, h, 4); - // lmImageDilate(temp, data, w, h, 4); - // } - // lmImageSmooth(data, temp, w, h, 4); - // lmImageDilate(temp, data, w, h, 4); - // lmImagePower(data, w, h, 4, 1.0f / 2.2f, 0x7); // gamma correct color channels - // FREE(temp); - - // // save result to a file - // if (lmImageSaveTGAf("result.tga", data, w, h, 4, 1.0f)) - // printf("Saved result.tga\n"); - - // // upload result - // glBindTexture(GL_TEXTURE_2D, scene->lightmap); - // glTexImage2D(GL_TEXTURE_2D, 0, GL_RGBA, w, h, 0, GL_RGBA, GL_FLOAT, data); - // FREE(data); -} - -void lightmap_clear(lightmap_t *lm) { - ASSERT(lm->ready); - glBindTexture(GL_TEXTURE_2D, lm->lightmap.id); - unsigned char emissive[] = { 0, 0, 0, 255 }; - glTexImage2D(GL_TEXTURE_2D, 0, GL_RGBA, 1, 1, 0, GL_RGBA, GL_UNSIGNED_BYTE, emissive); - glBindTexture(GL_TEXTURE_2D, 0); + if (cullface) glEnable(GL_CULL_FACE); } #line 0 diff --git a/engine/v4k.h b/engine/v4k.h index 1393659..b463ec7 100644 --- a/engine/v4k.h +++ b/engine/v4k.h @@ -3578,7 +3578,9 @@ typedef struct model_t { handle *textures; char **texture_names; array(material_t) materials; - texture_t *lightmap; + + texture_t lightmap; + float *lmdata; unsigned num_meshes; unsigned num_triangles; @@ -3592,6 +3594,8 @@ typedef struct model_t { int stride; // usually 68 bytes for a p3 u2 u2 n3 t4 i4B w4B c4B vertex stream void *verts; int num_verts; + void *tris; + int num_tris; handle vao, ibo, vbo, vao_instanced; unsigned flags; @@ -3643,15 +3647,16 @@ API anims_t animations(const char *pathfile, int flags); typedef struct lightmap_t { struct lm_context *ctx; // private bool ready; - texture_t lightmap; //@fixme: do we need it per-model? + int w, h; + int atlas_w, atlas_h; //@fixme: implement + texture_t atlas; //@fixme: implement this array(model_t*) models; + unsigned shader; } lightmap_t; API lightmap_t lightmap(int hmsize /*64*/, float near, float far, vec3 color /*1,1,1 for AO*/, int passes /*2*/, float threshold /*0.01f*/, float distmod /*0.0f*/); API void lightmap_setup(lightmap_t *lm, int w, int h); -API void lightmap_addmodel(lightmap_t *lm, model_t *m); -API void lightmap_bake(lightmap_t *lm, int bounces, void (*drawscene)(lightmap_t *lm, float *view, float *proj, void *userdata), void *userdata); -API void lightmap_clear(lightmap_t *lm); +API void lightmap_bake(lightmap_t *lm, int bounces, void (*drawscene)(lightmap_t *lm, model_t *m, float *view, float *proj, void *userdata), void *userdata); API void lightmap_destroy(lightmap_t *lm); // ----------------------------------------------------------------------------- diff --git a/result.tga b/result.tga new file mode 100644 index 0000000000000000000000000000000000000000..f7b31c1a42f509dee918d7fbe28d79fece1a80c0 GIT binary patch literal 1638418 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�W|-y~Xkj-Rj=Y9!P5N*%uQZ3Od9bel~Q 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
  • sKf0`rdHfoV;qz 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 literal 0 HcmV?d00001