Add the seal from TF2

This commit is contained in:
kp 2024-08-10 04:03:37 -05:00
parent f9e4187a10
commit 9010b5e821
19 changed files with 1887 additions and 66 deletions

File diff suppressed because one or more lines are too long

Binary file not shown.

Binary file not shown.

After

Width:  |  Height:  |  Size: 628 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 19 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 393 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 659 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 606 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 4.7 KiB

View file

@ -7,6 +7,8 @@ layout (location = 1) in vec3 normal;
layout (location = 2) in vec2 texcoord;
layout (location = 3) in vec3 tangent;
layout (location = 4) in vec3 bitangent;
layout (location = 5) in uvec4 bone_ids; // Skinning (experimental)
layout (location = 6) in vec4 weights;
out vec3 v_position;
out vec3 v_normal;
@ -17,6 +19,10 @@ out vec3 v_bitangent;
out float v_id;
const int MAX_BONES = 48;
uniform mat4 u_bones[MAX_BONES];
uniform int u_has_bones;
void main()
{
v_position = position;
@ -27,6 +33,15 @@ void main()
v_bitangent = bitangent;
v_id = gl_VertexID;
if (u_has_bones == 1) {
mat4 bone_transform = u_bones[bone_ids[0]] * weights[0];
bone_transform += u_bones[bone_ids[1]] * weights[1];
bone_transform += u_bones[bone_ids[2]] * weights[2];
bone_transform += u_bones[bone_ids[3]] * weights[3];
gl_Position = u_mvp * (bone_transform * vec4(v_position, 1.0));
return;
}
gl_Position = u_mvp * vec4(v_position, 1.0);
}

View file

@ -1,56 +1,742 @@
[02:08:00 AM] Info: Starting...
[04:00:32 AM] Info: Starting...
KP3D version 2
===============================
Copyright (C) kpworld.xyz 2018-2024
Contact me! @kp_cftsz
[02:08:00 AM] Info: Initializing SDL
[02:08:00 AM] Info: Initializing OpenGL
[02:08:00 AM] Info: OpenGL version: 4.6.0 NVIDIA 536.23
[02:08:00 AM] Info: Initializing GLEW
[02:08:00 AM] Info: Initializing SDL_mixer
[02:08:00 AM] Info: Reticulating splines...
[02:08:00 AM] Info: Ready!
[02:08:00 AM] Info: Loading script: build-cylinder.scm
[02:08:00 AM] Info: Loading script: build-stairs.scm
[02:08:00 AM] Info: Loading material resource: block.png
[02:08:00 AM] Info: Found normal map texture: materials/block_n.png
[02:08:00 AM] Info: Loading material resource: brick2.jpg
[02:08:00 AM] Info: Found normal map texture: materials/brick2_n.jpg
[02:08:00 AM] Info: Loading material resource: bricks.jpg
[02:08:00 AM] Info: Found normal map texture: materials/bricks_n.jpg
[02:08:00 AM] Info: Loading material resource: FLAT5_7.png
[02:08:00 AM] Info: Found normal map texture: materials/FLAT5_7_n.png
[02:08:00 AM] Info: Loading material resource: floor0.png
[02:08:00 AM] Info: Found normal map texture: materials/floor0_n.png
[02:08:00 AM] Info: Loading material resource: floor1.png
[02:08:00 AM] Info: Found normal map texture: materials/floor1_n.png
[02:08:00 AM] Info: Loading material resource: GRASS2.png
[02:08:00 AM] Info: Found normal map texture: materials/GRASS2_n.png
[02:08:00 AM] Info: Loading material resource: hardwood.jpg
[02:08:00 AM] Info: Found normal map texture: materials/hardwood_n.jpg
[02:08:00 AM] Info: Loading texture resource: .kp3d/banner.png
[02:08:00 AM] Info: Loading texture resource: .kp3d/crosshair.png
[02:08:00 AM] Info: Loading texture resource: .kp3d/empty.png
[02:08:00 AM] Info: Loading texture resource: .kp3d/logo.png
[02:08:00 AM] Info: Loading texture resource: .kp3d/map_grid.png
[02:08:00 AM] Info: Loading texture resource: .kp3d/not_found.png
[02:08:00 AM] Info: Loading texture resource: .kp3d/skybox.png
[02:08:00 AM] Info: Loading texture resource: .kp3d/uv_test.png
[02:08:00 AM] Info: Loading texture resource: .kp3d/water.png
[02:08:00 AM] Info: Loading texture resource: dot.png
[02:08:00 AM] Info: Loading texture resource: editor/stem.png
[02:08:00 AM] Info: Loading texture resource: logo.png
[02:08:00 AM] Info: Loading texture resource: skyboxes/sky50e2dd1d496fc.jpg
[02:08:00 AM] Info: Loading texture resource: skyboxes/sky8.jpg
[02:08:00 AM] Info: Loading texture resource: skyboxes/sky9.jpg
[02:08:00 AM] Info: Loading texture resource: skyboxes/skybox.jpg
[02:08:00 AM] Info: Loading texture resource: skyboxes/skybox_11.jpg
[02:08:00 AM] Info: Loading texture resource: skyboxes/skybox_14.jpg
[02:08:00 AM] Info: Loading texture resource: skyboxes/skybox_15.jpg
[02:08:00 AM] Info: Loading texture resource: skyboxes/skybox_3.jpg
[02:08:00 AM] Info: Loading texture resource: skybox_16.jpg
[02:08:00 AM] Info: Map init
[02:08:00 AM] Info: Finalized mesh with 49 batches
[02:08:03 AM] Info: Placed thing at {6.38296, -1.5, -7.31712}
[04:00:32 AM] Info: Initializing SDL
[04:00:32 AM] Info: Initializing OpenGL
[04:00:32 AM] Info: OpenGL version: 4.6.0 NVIDIA 536.23
[04:00:32 AM] Info: Initializing GLEW
[04:00:32 AM] Info: Initializing SDL_mixer
[04:00:32 AM] Info: Reticulating splines...
[04:00:32 AM] Info: Ready!
[04:00:32 AM] Info: Loading script: build-cylinder.scm
[04:00:32 AM] Info: Loading script: build-stairs.scm
[04:00:32 AM] Info: Loading material resource: block.png
[04:00:32 AM] Info: Found normal map texture: materials/block_n.png
[04:00:32 AM] Info: Loading material resource: brick2.jpg
[04:00:32 AM] Info: Found normal map texture: materials/brick2_n.jpg
[04:00:32 AM] Info: Loading material resource: bricks.jpg
[04:00:32 AM] Info: Found normal map texture: materials/bricks_n.jpg
[04:00:32 AM] Info: Loading material resource: FLAT5_7.png
[04:00:32 AM] Info: Found normal map texture: materials/FLAT5_7_n.png
[04:00:32 AM] Info: Loading material resource: floor0.png
[04:00:32 AM] Info: Found normal map texture: materials/floor0_n.png
[04:00:32 AM] Info: Loading material resource: floor1.png
[04:00:32 AM] Info: Found normal map texture: materials/floor1_n.png
[04:00:32 AM] Info: Loading material resource: GRASS2.png
[04:00:32 AM] Info: Found normal map texture: materials/GRASS2_n.png
[04:00:32 AM] Info: Loading material resource: hardwood.jpg
[04:00:32 AM] Info: Found normal map texture: materials/hardwood_n.jpg
[04:00:32 AM] Info: Loading texture resource: .kp3d/banner.png
[04:00:32 AM] Info: Loading texture resource: .kp3d/crosshair.png
[04:00:32 AM] Info: Loading texture resource: .kp3d/empty.png
[04:00:32 AM] Info: Loading texture resource: .kp3d/logo.png
[04:00:32 AM] Info: Loading texture resource: .kp3d/map_grid.png
[04:00:32 AM] Info: Loading texture resource: .kp3d/not_found.png
[04:00:32 AM] Info: Loading texture resource: .kp3d/skybox.png
[04:00:32 AM] Info: Loading texture resource: .kp3d/uv_test.png
[04:00:32 AM] Info: Loading texture resource: .kp3d/water.png
[04:00:32 AM] Info: Loading texture resource: dot.png
[04:00:32 AM] Info: Loading texture resource: editor/stem.png
[04:00:32 AM] Info: Loading texture resource: logo.png
[04:00:32 AM] Info: Loading texture resource: skyboxes/sky50e2dd1d496fc.jpg
[04:00:32 AM] Info: Loading texture resource: skyboxes/sky8.jpg
[04:00:32 AM] Info: Loading texture resource: skyboxes/sky9.jpg
[04:00:32 AM] Info: Loading texture resource: skyboxes/skybox.jpg
[04:00:32 AM] Info: Loading texture resource: skyboxes/skybox_11.jpg
[04:00:32 AM] Info: Loading texture resource: skyboxes/skybox_14.jpg
[04:00:32 AM] Info: Loading texture resource: skyboxes/skybox_15.jpg
[04:00:33 AM] Info: Loading texture resource: skyboxes/skybox_3.jpg
[04:00:33 AM] Info: Loading texture resource: skybox_16.jpg
[04:00:33 AM] Info: FOUND ANIMATION: seal.qc_skeleton_seal.qc_skeleton, 0
[04:00:33 AM] Info: Num weights for seal_qc_skeleton_body2: 1208
[04:00:33 AM] Info: Num weights for seal_qc_skeleton_body1: 2068
[04:00:33 AM] Info: Num weights for seal_qc_skeleton_head: 2188
[04:00:33 AM] Info: Num weights for seal_qc_skeleton_eyeupper_l: 648
[04:00:33 AM] Info: Num weights for seal_qc_skeleton_eyelower_l: 359
[04:00:33 AM] Info: Num weights for seal_qc_skeleton_eyeupper_r: 636
[04:00:33 AM] Info: Num weights for seal_qc_skeleton_eyelower_r: 359
[04:00:33 AM] Info: Num weights for seal_qc_skeleton_jowl_l: 666
[04:00:33 AM] Info: Num weights for seal_qc_skeleton_jowl_r: 818
[04:00:33 AM] Info: Num weights for seal_qc_skeleton_flipper1_l: 272
[04:00:33 AM] Info: Num weights for seal_qc_skeleton_flipper2_l: 304
[04:00:33 AM] Info: Num weights for seal_qc_skeleton_flipper1_r: 272
[04:00:33 AM] Info: Num weights for seal_qc_skeleton_flipper2_r: 304
[04:00:33 AM] Info: Num weights for seal_qc_skeleton_body3: 1320
[04:00:33 AM] Info: Num weights for seal_qc_skeleton_body4: 1436
[04:00:33 AM] Info: Num weights for seal_qc_skeleton_body5: 1436
[04:00:33 AM] Info: Num weights for seal_qc_skeleton_backflipper_r: 1358
[04:00:33 AM] Info: Num weights for seal_qc_skeleton_backflipper_l: 1358
[04:00:33 AM] Info: FOUND TEXTURE: seal.png
[04:00:33 AM] Info: Num weights for seal_qc_skeleton_head: 24
[04:00:33 AM] Info: Num weights for seal_qc_skeleton_eyeupper_l: 30
[04:00:33 AM] Info: Num weights for seal_qc_skeleton_eyelower_l: 36
[04:00:33 AM] Info: Num weights for seal_qc_skeleton_eyeupper_r: 30
[04:00:33 AM] Info: Num weights for seal_qc_skeleton_eyelower_r: 36
[04:00:33 AM] Info: FOUND TEXTURE: seal.png
[04:00:33 AM] Info: Num weights for seal_qc_skeleton_jowl_l: 12
[04:00:33 AM] Info: Num weights for seal_qc_skeleton_jowl_r: 12
[04:00:33 AM] Info: FOUND TEXTURE: seal_whiskers.png
[04:00:33 AM] Info: Map init
[04:00:33 AM] Info: Finalized mesh with 49 batches
[04:00:42 AM] Info: Finalized mesh with 48 batches
[04:00:42 AM] Info: Finalized mesh with 48 batches
[04:00:42 AM] Info: Finalized mesh with 48 batches
[04:00:42 AM] Info: Finalized mesh with 48 batches
[04:00:42 AM] Info: Finalized mesh with 48 batches
[04:00:42 AM] Info: Finalized mesh with 48 batches
[04:00:42 AM] Info: Finalized mesh with 48 batches
[04:00:42 AM] Info: Finalized mesh with 48 batches
[04:00:42 AM] Info: Finalized mesh with 48 batches
[04:00:42 AM] Info: Finalized mesh with 48 batches
[04:00:42 AM] Info: Finalized mesh with 48 batches
[04:00:42 AM] Info: Finalized mesh with 48 batches
[04:00:42 AM] Info: Finalized mesh with 48 batches
[04:00:42 AM] Info: Finalized mesh with 48 batches
[04:00:42 AM] Info: Finalized mesh with 48 batches
[04:00:42 AM] Info: Finalized mesh with 48 batches
[04:00:44 AM] Info: Finalized mesh with 48 batches
[04:00:44 AM] Info: Finalized mesh with 48 batches
[04:00:44 AM] Info: Finalized mesh with 48 batches
[04:00:44 AM] Info: Finalized mesh with 48 batches
[04:00:44 AM] Info: Finalized mesh with 48 batches
[04:00:44 AM] Info: Finalized mesh with 48 batches
[04:00:44 AM] Info: Finalized mesh with 48 batches
[04:00:44 AM] Info: Finalized mesh with 48 batches
[04:00:44 AM] Info: Finalized mesh with 48 batches
[04:00:44 AM] Info: Finalized mesh with 48 batches
[04:00:44 AM] Info: Finalized mesh with 48 batches
[04:00:44 AM] Info: Finalized mesh with 48 batches
[04:00:44 AM] Info: Finalized mesh with 48 batches
[04:00:44 AM] Info: Finalized mesh with 48 batches
[04:00:44 AM] Info: Finalized mesh with 48 batches
[04:00:45 AM] Info: Finalized mesh with 48 batches
[04:00:45 AM] Info: Finalized mesh with 48 batches
[04:00:45 AM] Info: Finalized mesh with 48 batches
[04:00:45 AM] Info: Finalized mesh with 48 batches
[04:00:45 AM] Info: Finalized mesh with 48 batches
[04:00:45 AM] Info: Finalized mesh with 48 batches
[04:00:45 AM] Info: Finalized mesh with 48 batches
[04:00:45 AM] Info: Finalized mesh with 48 batches
[04:00:45 AM] Info: Finalized mesh with 48 batches
[04:00:45 AM] Info: Finalized mesh with 48 batches
[04:00:45 AM] Info: Finalized mesh with 48 batches
[04:00:45 AM] Info: Finalized mesh with 48 batches
[04:00:45 AM] Info: Finalized mesh with 48 batches
[04:00:45 AM] Info: Finalized mesh with 48 batches
[04:00:45 AM] Info: Finalized mesh with 48 batches
[04:00:45 AM] Info: Finalized mesh with 48 batches
[04:00:45 AM] Info: Finalized mesh with 48 batches
[04:00:45 AM] Info: Finalized mesh with 48 batches
[04:00:45 AM] Info: Finalized mesh with 48 batches
[04:00:45 AM] Info: Finalized mesh with 48 batches
[04:00:45 AM] Info: Finalized mesh with 48 batches
[04:00:45 AM] Info: Finalized mesh with 48 batches
[04:00:45 AM] Info: Finalized mesh with 48 batches
[04:00:45 AM] Info: Finalized mesh with 48 batches
[04:00:45 AM] Info: Finalized mesh with 48 batches
[04:00:45 AM] Info: Finalized mesh with 48 batches
[04:00:45 AM] Info: Finalized mesh with 48 batches
[04:00:45 AM] Info: Finalized mesh with 48 batches
[04:00:45 AM] Info: Finalized mesh with 48 batches
[04:00:45 AM] Info: Finalized mesh with 48 batches
[04:00:45 AM] Info: Finalized mesh with 48 batches
[04:00:45 AM] Info: Finalized mesh with 48 batches
[04:00:45 AM] Info: Finalized mesh with 48 batches
[04:00:45 AM] Info: Finalized mesh with 48 batches
[04:00:45 AM] Info: Finalized mesh with 48 batches
[04:00:45 AM] Info: Finalized mesh with 48 batches
[04:00:45 AM] Info: Finalized mesh with 48 batches
[04:00:45 AM] Info: Finalized mesh with 48 batches
[04:00:45 AM] Info: Finalized mesh with 48 batches
[04:00:45 AM] Info: Finalized mesh with 48 batches
[04:00:45 AM] Info: Finalized mesh with 48 batches
[04:00:45 AM] Info: Finalized mesh with 48 batches
[04:00:45 AM] Info: Finalized mesh with 48 batches
[04:00:45 AM] Info: Finalized mesh with 48 batches
[04:00:45 AM] Info: Finalized mesh with 48 batches
[04:00:45 AM] Info: Finalized mesh with 48 batches
[04:00:45 AM] Info: Finalized mesh with 48 batches
[04:00:45 AM] Info: Finalized mesh with 48 batches
[04:00:45 AM] Info: Finalized mesh with 48 batches
[04:00:45 AM] Info: Finalized mesh with 48 batches
[04:00:45 AM] Info: Finalized mesh with 48 batches
[04:00:45 AM] Info: Finalized mesh with 48 batches
[04:00:45 AM] Info: Finalized mesh with 48 batches
[04:00:45 AM] Info: Finalized mesh with 48 batches
[04:00:45 AM] Info: Finalized mesh with 48 batches
[04:00:45 AM] Info: Finalized mesh with 48 batches
[04:00:45 AM] Info: Finalized mesh with 48 batches
[04:00:45 AM] Info: Finalized mesh with 48 batches
[04:00:45 AM] Info: Finalized mesh with 48 batches
[04:00:45 AM] Info: Finalized mesh with 48 batches
[04:00:46 AM] Info: Finalized mesh with 48 batches
[04:00:46 AM] Info: Finalized mesh with 48 batches
[04:00:46 AM] Info: Finalized mesh with 48 batches
[04:00:46 AM] Info: Finalized mesh with 48 batches
[04:00:46 AM] Info: Finalized mesh with 48 batches
[04:00:46 AM] Info: Finalized mesh with 48 batches
[04:00:46 AM] Info: Finalized mesh with 48 batches
[04:00:46 AM] Info: Finalized mesh with 48 batches
[04:00:46 AM] Info: Finalized mesh with 48 batches
[04:00:46 AM] Info: Finalized mesh with 48 batches
[04:00:46 AM] Info: Finalized mesh with 48 batches
[04:00:46 AM] Info: Finalized mesh with 48 batches
[04:00:46 AM] Info: Finalized mesh with 48 batches
[04:00:46 AM] Info: Finalized mesh with 48 batches
[04:00:46 AM] Info: Finalized mesh with 48 batches
[04:00:46 AM] Info: Finalized mesh with 48 batches
[04:00:46 AM] Info: Finalized mesh with 48 batches
[04:00:46 AM] Info: Finalized mesh with 48 batches
[04:00:46 AM] Info: Finalized mesh with 48 batches
[04:00:46 AM] Info: Finalized mesh with 48 batches
[04:00:46 AM] Info: Finalized mesh with 48 batches
[04:00:46 AM] Info: Finalized mesh with 48 batches
[04:00:46 AM] Info: Finalized mesh with 48 batches
[04:00:46 AM] Info: Finalized mesh with 48 batches
[04:00:46 AM] Info: Finalized mesh with 48 batches
[04:00:46 AM] Info: Finalized mesh with 48 batches
[04:00:46 AM] Info: Finalized mesh with 48 batches
[04:00:46 AM] Info: Finalized mesh with 48 batches
[04:00:46 AM] Info: Finalized mesh with 48 batches
[04:00:46 AM] Info: Finalized mesh with 48 batches
[04:00:46 AM] Info: Finalized mesh with 48 batches
[04:00:46 AM] Info: Finalized mesh with 48 batches
[04:00:46 AM] Info: Finalized mesh with 48 batches
[04:00:47 AM] Info: Finalized mesh with 48 batches
[04:00:47 AM] Info: Finalized mesh with 48 batches
[04:00:47 AM] Info: Finalized mesh with 48 batches
[04:00:47 AM] Info: Finalized mesh with 48 batches
[04:00:47 AM] Info: Finalized mesh with 48 batches
[04:00:47 AM] Info: Finalized mesh with 48 batches
[04:00:47 AM] Info: Finalized mesh with 48 batches
[04:00:47 AM] Info: Finalized mesh with 48 batches
[04:00:47 AM] Info: Finalized mesh with 48 batches
[04:00:47 AM] Info: Finalized mesh with 48 batches
[04:00:47 AM] Info: Finalized mesh with 48 batches
[04:00:47 AM] Info: Finalized mesh with 48 batches
[04:00:57 AM] Info: Finalized mesh with 48 batches
[04:00:57 AM] Info: Finalized mesh with 48 batches
[04:00:57 AM] Info: Finalized mesh with 48 batches
[04:00:57 AM] Info: Finalized mesh with 48 batches
[04:00:57 AM] Info: Finalized mesh with 48 batches
[04:00:57 AM] Info: Finalized mesh with 48 batches
[04:00:57 AM] Info: Finalized mesh with 48 batches
[04:00:57 AM] Info: Finalized mesh with 48 batches
[04:00:57 AM] Info: Finalized mesh with 48 batches
[04:00:57 AM] Info: Finalized mesh with 48 batches
[04:00:57 AM] Info: Finalized mesh with 48 batches
[04:00:57 AM] Info: Finalized mesh with 48 batches
[04:00:57 AM] Info: Finalized mesh with 48 batches
[04:00:58 AM] Info: Finalized mesh with 48 batches
[04:00:58 AM] Info: Finalized mesh with 48 batches
[04:00:58 AM] Info: Finalized mesh with 48 batches
[04:00:58 AM] Info: Finalized mesh with 48 batches
[04:00:58 AM] Info: Finalized mesh with 48 batches
[04:00:58 AM] Info: Finalized mesh with 48 batches
[04:00:58 AM] Info: Finalized mesh with 48 batches
[04:00:58 AM] Info: Finalized mesh with 48 batches
[04:00:58 AM] Info: Finalized mesh with 48 batches
[04:00:58 AM] Info: Finalized mesh with 48 batches
[04:00:58 AM] Info: Finalized mesh with 48 batches
[04:00:58 AM] Info: Finalized mesh with 48 batches
[04:00:58 AM] Info: Finalized mesh with 48 batches
[04:00:58 AM] Info: Finalized mesh with 48 batches
[04:00:58 AM] Info: Finalized mesh with 48 batches
[04:00:58 AM] Info: Finalized mesh with 48 batches
[04:00:58 AM] Info: Finalized mesh with 48 batches
[04:00:58 AM] Info: Finalized mesh with 48 batches
[04:00:58 AM] Info: Finalized mesh with 48 batches
[04:00:58 AM] Info: Finalized mesh with 48 batches
[04:00:58 AM] Info: Finalized mesh with 48 batches
[04:00:58 AM] Info: Finalized mesh with 48 batches
[04:00:58 AM] Info: Finalized mesh with 48 batches
[04:00:58 AM] Info: Finalized mesh with 48 batches
[04:00:58 AM] Info: Finalized mesh with 48 batches
[04:00:58 AM] Info: Finalized mesh with 48 batches
[04:00:58 AM] Info: Finalized mesh with 48 batches
[04:00:58 AM] Info: Finalized mesh with 48 batches
[04:00:58 AM] Info: Finalized mesh with 48 batches
[04:00:58 AM] Info: Finalized mesh with 48 batches
[04:00:58 AM] Info: Finalized mesh with 48 batches
[04:00:58 AM] Info: Finalized mesh with 48 batches
[04:00:58 AM] Info: Finalized mesh with 48 batches
[04:00:58 AM] Info: Finalized mesh with 48 batches
[04:00:58 AM] Info: Finalized mesh with 48 batches
[04:00:58 AM] Info: Finalized mesh with 48 batches
[04:00:58 AM] Info: Finalized mesh with 48 batches
[04:00:58 AM] Info: Finalized mesh with 48 batches
[04:00:58 AM] Info: Finalized mesh with 48 batches
[04:00:58 AM] Info: Finalized mesh with 48 batches
[04:00:58 AM] Info: Finalized mesh with 48 batches
[04:00:58 AM] Info: Finalized mesh with 48 batches
[04:00:58 AM] Info: Finalized mesh with 48 batches
[04:00:58 AM] Info: Finalized mesh with 48 batches
[04:00:58 AM] Info: Finalized mesh with 48 batches
[04:00:58 AM] Info: Finalized mesh with 48 batches
[04:00:58 AM] Info: Finalized mesh with 48 batches
[04:00:58 AM] Info: Finalized mesh with 48 batches
[04:00:58 AM] Info: Finalized mesh with 48 batches
[04:00:58 AM] Info: Finalized mesh with 48 batches
[04:00:58 AM] Info: Finalized mesh with 48 batches
[04:00:58 AM] Info: Finalized mesh with 48 batches
[04:00:58 AM] Info: Finalized mesh with 48 batches
[04:00:58 AM] Info: Finalized mesh with 48 batches
[04:00:58 AM] Info: Finalized mesh with 48 batches
[04:00:58 AM] Info: Finalized mesh with 48 batches
[04:00:58 AM] Info: Finalized mesh with 48 batches
[04:00:58 AM] Info: Finalized mesh with 48 batches
[04:00:59 AM] Info: Finalized mesh with 48 batches
[04:00:59 AM] Info: Finalized mesh with 48 batches
[04:00:59 AM] Info: Finalized mesh with 48 batches
[04:00:59 AM] Info: Finalized mesh with 48 batches
[04:00:59 AM] Info: Finalized mesh with 48 batches
[04:00:59 AM] Info: Finalized mesh with 48 batches
[04:00:59 AM] Info: Finalized mesh with 48 batches
[04:00:59 AM] Info: Finalized mesh with 48 batches
[04:00:59 AM] Info: Finalized mesh with 48 batches
[04:00:59 AM] Info: Finalized mesh with 48 batches
[04:00:59 AM] Info: Finalized mesh with 48 batches
[04:00:59 AM] Info: Finalized mesh with 48 batches
[04:00:59 AM] Info: Finalized mesh with 48 batches
[04:00:59 AM] Info: Finalized mesh with 48 batches
[04:01:05 AM] Info: Finalized mesh with 48 batches
[04:01:05 AM] Info: Finalized mesh with 48 batches
[04:01:05 AM] Info: Finalized mesh with 48 batches
[04:01:05 AM] Info: Finalized mesh with 48 batches
[04:01:05 AM] Info: Finalized mesh with 48 batches
[04:01:05 AM] Info: Finalized mesh with 48 batches
[04:01:05 AM] Info: Finalized mesh with 48 batches
[04:01:05 AM] Info: Finalized mesh with 48 batches
[04:01:05 AM] Info: Finalized mesh with 48 batches
[04:01:05 AM] Info: Finalized mesh with 48 batches
[04:01:05 AM] Info: Finalized mesh with 48 batches
[04:01:05 AM] Info: Finalized mesh with 48 batches
[04:01:05 AM] Info: Finalized mesh with 48 batches
[04:01:05 AM] Info: Finalized mesh with 48 batches
[04:01:05 AM] Info: Finalized mesh with 48 batches
[04:01:05 AM] Info: Finalized mesh with 48 batches
[04:01:05 AM] Info: Finalized mesh with 48 batches
[04:01:05 AM] Info: Finalized mesh with 48 batches
[04:01:05 AM] Info: Finalized mesh with 48 batches
[04:01:05 AM] Info: Finalized mesh with 48 batches
[04:01:05 AM] Info: Finalized mesh with 48 batches
[04:01:05 AM] Info: Finalized mesh with 48 batches
[04:01:05 AM] Info: Finalized mesh with 48 batches
[04:01:05 AM] Info: Finalized mesh with 48 batches
[04:01:05 AM] Info: Finalized mesh with 48 batches
[04:01:05 AM] Info: Finalized mesh with 48 batches
[04:01:05 AM] Info: Finalized mesh with 48 batches
[04:01:05 AM] Info: Finalized mesh with 48 batches
[04:01:05 AM] Info: Finalized mesh with 48 batches
[04:01:05 AM] Info: Finalized mesh with 48 batches
[04:01:05 AM] Info: Finalized mesh with 48 batches
[04:01:05 AM] Info: Finalized mesh with 48 batches
[04:01:05 AM] Info: Finalized mesh with 48 batches
[04:01:05 AM] Info: Finalized mesh with 48 batches
[04:01:05 AM] Info: Finalized mesh with 48 batches
[04:01:05 AM] Info: Finalized mesh with 48 batches
[04:01:05 AM] Info: Finalized mesh with 48 batches
[04:01:05 AM] Info: Finalized mesh with 48 batches
[04:01:05 AM] Info: Finalized mesh with 48 batches
[04:01:05 AM] Info: Finalized mesh with 48 batches
[04:01:05 AM] Info: Finalized mesh with 48 batches
[04:01:05 AM] Info: Finalized mesh with 48 batches
[04:01:05 AM] Info: Finalized mesh with 48 batches
[04:01:06 AM] Info: Finalized mesh with 48 batches
[04:01:06 AM] Info: Finalized mesh with 48 batches
[04:01:06 AM] Info: Finalized mesh with 48 batches
[04:01:06 AM] Info: Finalized mesh with 48 batches
[04:01:06 AM] Info: Finalized mesh with 48 batches
[04:01:06 AM] Info: Finalized mesh with 48 batches
[04:01:06 AM] Info: Finalized mesh with 48 batches
[04:01:06 AM] Info: Finalized mesh with 48 batches
[04:01:06 AM] Info: Finalized mesh with 48 batches
[04:01:06 AM] Info: Finalized mesh with 48 batches
[04:01:06 AM] Info: Finalized mesh with 48 batches
[04:01:06 AM] Info: Finalized mesh with 48 batches
[04:01:06 AM] Info: Finalized mesh with 48 batches
[04:01:06 AM] Info: Finalized mesh with 48 batches
[04:01:06 AM] Info: Finalized mesh with 48 batches
[04:01:06 AM] Info: Finalized mesh with 48 batches
[04:01:06 AM] Info: Finalized mesh with 48 batches
[04:01:06 AM] Info: Finalized mesh with 48 batches
[04:01:06 AM] Info: Finalized mesh with 48 batches
[04:01:06 AM] Info: Finalized mesh with 48 batches
[04:01:06 AM] Info: Finalized mesh with 48 batches
[04:01:06 AM] Info: Finalized mesh with 48 batches
[04:01:06 AM] Info: Finalized mesh with 48 batches
[04:01:06 AM] Info: Finalized mesh with 48 batches
[04:01:06 AM] Info: Finalized mesh with 48 batches
[04:01:06 AM] Info: Finalized mesh with 48 batches
[04:01:06 AM] Info: Finalized mesh with 48 batches
[04:01:06 AM] Info: Finalized mesh with 48 batches
[04:01:06 AM] Info: Finalized mesh with 48 batches
[04:01:06 AM] Info: Finalized mesh with 48 batches
[04:01:06 AM] Info: Finalized mesh with 48 batches
[04:01:06 AM] Info: Finalized mesh with 48 batches
[04:01:06 AM] Info: Finalized mesh with 48 batches
[04:01:06 AM] Info: Finalized mesh with 48 batches
[04:01:06 AM] Info: Finalized mesh with 48 batches
[04:01:06 AM] Info: Finalized mesh with 48 batches
[04:01:06 AM] Info: Finalized mesh with 48 batches
[04:01:07 AM] Info: Finalized mesh with 48 batches
[04:01:07 AM] Info: Finalized mesh with 48 batches
[04:01:07 AM] Info: Finalized mesh with 48 batches
[04:01:07 AM] Info: Finalized mesh with 48 batches
[04:01:07 AM] Info: Finalized mesh with 48 batches
[04:01:07 AM] Info: Finalized mesh with 48 batches
[04:01:07 AM] Info: Finalized mesh with 48 batches
[04:01:07 AM] Info: Finalized mesh with 48 batches
[04:01:07 AM] Info: Finalized mesh with 48 batches
[04:01:07 AM] Info: Finalized mesh with 48 batches
[04:01:07 AM] Info: Finalized mesh with 48 batches
[04:01:07 AM] Info: Finalized mesh with 48 batches
[04:01:07 AM] Info: Finalized mesh with 48 batches
[04:01:07 AM] Info: Finalized mesh with 48 batches
[04:01:07 AM] Info: Finalized mesh with 48 batches
[04:01:07 AM] Info: Finalized mesh with 48 batches
[04:01:07 AM] Info: Finalized mesh with 48 batches
[04:01:07 AM] Info: Finalized mesh with 48 batches
[04:01:07 AM] Info: Finalized mesh with 48 batches
[04:01:07 AM] Info: Finalized mesh with 48 batches
[04:01:09 AM] Info: Finalized mesh with 48 batches
[04:01:09 AM] Info: Finalized mesh with 48 batches
[04:01:09 AM] Info: Finalized mesh with 48 batches
[04:01:09 AM] Info: Finalized mesh with 48 batches
[04:01:09 AM] Info: Finalized mesh with 48 batches
[04:01:09 AM] Info: Finalized mesh with 48 batches
[04:01:09 AM] Info: Finalized mesh with 48 batches
[04:01:09 AM] Info: Finalized mesh with 48 batches
[04:01:10 AM] Info: Finalized mesh with 48 batches
[04:01:10 AM] Info: Finalized mesh with 48 batches
[04:01:10 AM] Info: Finalized mesh with 48 batches
[04:01:10 AM] Info: Finalized mesh with 48 batches
[04:01:10 AM] Info: Finalized mesh with 48 batches
[04:01:10 AM] Info: Finalized mesh with 48 batches
[04:01:10 AM] Info: Finalized mesh with 48 batches
[04:01:10 AM] Info: Finalized mesh with 48 batches
[04:01:10 AM] Info: Finalized mesh with 48 batches
[04:01:10 AM] Info: Finalized mesh with 48 batches
[04:01:10 AM] Info: Finalized mesh with 48 batches
[04:01:10 AM] Info: Finalized mesh with 48 batches
[04:01:10 AM] Info: Finalized mesh with 48 batches
[04:01:10 AM] Info: Finalized mesh with 48 batches
[04:01:10 AM] Info: Finalized mesh with 48 batches
[04:01:10 AM] Info: Finalized mesh with 48 batches
[04:01:10 AM] Info: Finalized mesh with 48 batches
[04:01:10 AM] Info: Finalized mesh with 48 batches
[04:01:10 AM] Info: Finalized mesh with 48 batches
[04:01:10 AM] Info: Finalized mesh with 48 batches
[04:01:10 AM] Info: Finalized mesh with 48 batches
[04:01:10 AM] Info: Finalized mesh with 48 batches
[04:01:10 AM] Info: Finalized mesh with 48 batches
[04:01:10 AM] Info: Finalized mesh with 48 batches
[04:01:10 AM] Info: Finalized mesh with 48 batches
[04:01:10 AM] Info: Finalized mesh with 48 batches
[04:01:10 AM] Info: Finalized mesh with 48 batches
[04:01:10 AM] Info: Finalized mesh with 48 batches
[04:01:10 AM] Info: Finalized mesh with 48 batches
[04:01:10 AM] Info: Finalized mesh with 48 batches
[04:01:10 AM] Info: Finalized mesh with 48 batches
[04:01:10 AM] Info: Finalized mesh with 48 batches
[04:01:10 AM] Info: Finalized mesh with 48 batches
[04:01:10 AM] Info: Finalized mesh with 48 batches
[04:01:10 AM] Info: Finalized mesh with 48 batches
[04:01:10 AM] Info: Finalized mesh with 48 batches
[04:01:10 AM] Info: Finalized mesh with 48 batches
[04:01:10 AM] Info: Finalized mesh with 48 batches
[04:01:10 AM] Info: Finalized mesh with 48 batches
[04:01:14 AM] Info: Finalized mesh with 48 batches
[04:01:14 AM] Info: Finalized mesh with 48 batches
[04:01:14 AM] Info: Finalized mesh with 48 batches
[04:01:14 AM] Info: Finalized mesh with 48 batches
[04:01:14 AM] Info: Finalized mesh with 48 batches
[04:01:14 AM] Info: Finalized mesh with 48 batches
[04:01:14 AM] Info: Finalized mesh with 48 batches
[04:01:14 AM] Info: Finalized mesh with 48 batches
[04:01:14 AM] Info: Finalized mesh with 48 batches
[04:01:14 AM] Info: Finalized mesh with 48 batches
[04:01:14 AM] Info: Finalized mesh with 48 batches
[04:01:14 AM] Info: Finalized mesh with 48 batches
[04:01:14 AM] Info: Finalized mesh with 48 batches
[04:01:14 AM] Info: Finalized mesh with 48 batches
[04:01:14 AM] Info: Finalized mesh with 48 batches
[04:01:14 AM] Info: Finalized mesh with 48 batches
[04:01:14 AM] Info: Finalized mesh with 48 batches
[04:01:14 AM] Info: Finalized mesh with 48 batches
[04:01:14 AM] Info: Finalized mesh with 48 batches
[04:01:14 AM] Info: Finalized mesh with 48 batches
[04:01:14 AM] Info: Finalized mesh with 48 batches
[04:01:14 AM] Info: Finalized mesh with 48 batches
[04:01:14 AM] Info: Finalized mesh with 48 batches
[04:01:14 AM] Info: Finalized mesh with 48 batches
[04:01:14 AM] Info: Finalized mesh with 48 batches
[04:01:14 AM] Info: Finalized mesh with 48 batches
[04:01:14 AM] Info: Finalized mesh with 48 batches
[04:01:14 AM] Info: Finalized mesh with 48 batches
[04:01:14 AM] Info: Finalized mesh with 48 batches
[04:01:14 AM] Info: Finalized mesh with 48 batches
[04:01:14 AM] Info: Finalized mesh with 48 batches
[04:01:17 AM] Info: Finalized mesh with 48 batches
[04:01:17 AM] Info: Finalized mesh with 48 batches
[04:01:17 AM] Info: Finalized mesh with 48 batches
[04:01:17 AM] Info: Finalized mesh with 48 batches
[04:01:17 AM] Info: Finalized mesh with 48 batches
[04:01:17 AM] Info: Finalized mesh with 48 batches
[04:01:17 AM] Info: Finalized mesh with 48 batches
[04:01:17 AM] Info: Finalized mesh with 48 batches
[04:01:17 AM] Info: Finalized mesh with 48 batches
[04:01:17 AM] Info: Finalized mesh with 48 batches
[04:01:17 AM] Info: Finalized mesh with 48 batches
[04:01:17 AM] Info: Finalized mesh with 48 batches
[04:01:17 AM] Info: Finalized mesh with 48 batches
[04:01:17 AM] Info: Finalized mesh with 48 batches
[04:01:17 AM] Info: Finalized mesh with 48 batches
[04:01:17 AM] Info: Finalized mesh with 48 batches
[04:01:17 AM] Info: Finalized mesh with 48 batches
[04:01:17 AM] Info: Finalized mesh with 48 batches
[04:01:17 AM] Info: Finalized mesh with 48 batches
[04:01:17 AM] Info: Finalized mesh with 48 batches
[04:01:17 AM] Info: Finalized mesh with 48 batches
[04:01:17 AM] Info: Finalized mesh with 48 batches
[04:01:17 AM] Info: Finalized mesh with 48 batches
[04:01:17 AM] Info: Finalized mesh with 48 batches
[04:01:17 AM] Info: Finalized mesh with 48 batches
[04:01:17 AM] Info: Finalized mesh with 48 batches
[04:01:17 AM] Info: Finalized mesh with 48 batches
[04:01:17 AM] Info: Finalized mesh with 48 batches
[04:01:17 AM] Info: Finalized mesh with 48 batches
[04:01:17 AM] Info: Finalized mesh with 48 batches
[04:01:17 AM] Info: Finalized mesh with 48 batches
[04:01:17 AM] Info: Finalized mesh with 48 batches
[04:01:17 AM] Info: Finalized mesh with 48 batches
[04:01:17 AM] Info: Finalized mesh with 48 batches
[04:01:17 AM] Info: Finalized mesh with 48 batches
[04:01:17 AM] Info: Finalized mesh with 48 batches
[04:01:18 AM] Info: Finalized mesh with 48 batches
[04:01:18 AM] Info: Finalized mesh with 48 batches
[04:01:18 AM] Info: Finalized mesh with 48 batches
[04:01:18 AM] Info: Finalized mesh with 48 batches
[04:01:18 AM] Info: Finalized mesh with 48 batches
[04:01:18 AM] Info: Finalized mesh with 48 batches
[04:01:18 AM] Info: Finalized mesh with 48 batches
[04:01:18 AM] Info: Finalized mesh with 48 batches
[04:01:18 AM] Info: Finalized mesh with 48 batches
[04:01:18 AM] Info: Finalized mesh with 48 batches
[04:01:18 AM] Info: Finalized mesh with 48 batches
[04:01:18 AM] Info: Finalized mesh with 48 batches
[04:01:18 AM] Info: Finalized mesh with 48 batches
[04:01:18 AM] Info: Finalized mesh with 48 batches
[04:01:18 AM] Info: Finalized mesh with 48 batches
[04:01:18 AM] Info: Finalized mesh with 48 batches
[04:01:18 AM] Info: Finalized mesh with 48 batches
[04:01:18 AM] Info: Finalized mesh with 48 batches
[04:01:18 AM] Info: Finalized mesh with 48 batches
[04:01:18 AM] Info: Finalized mesh with 48 batches
[04:01:18 AM] Info: Finalized mesh with 48 batches
[04:01:18 AM] Info: Finalized mesh with 48 batches
[04:01:18 AM] Info: Finalized mesh with 48 batches
[04:01:18 AM] Info: Finalized mesh with 48 batches
[04:01:18 AM] Info: Finalized mesh with 48 batches
[04:01:18 AM] Info: Finalized mesh with 48 batches
[04:01:18 AM] Info: Finalized mesh with 48 batches
[04:01:18 AM] Info: Finalized mesh with 48 batches
[04:01:18 AM] Info: Finalized mesh with 48 batches
[04:01:18 AM] Info: Finalized mesh with 48 batches
[04:01:18 AM] Info: Finalized mesh with 48 batches
[04:01:18 AM] Info: Finalized mesh with 48 batches
[04:01:18 AM] Info: Finalized mesh with 48 batches
[04:01:18 AM] Info: Finalized mesh with 48 batches
[04:01:18 AM] Info: Finalized mesh with 48 batches
[04:01:18 AM] Info: Finalized mesh with 48 batches
[04:01:18 AM] Info: Finalized mesh with 48 batches
[04:01:18 AM] Info: Finalized mesh with 48 batches
[04:01:18 AM] Info: Finalized mesh with 48 batches
[04:01:18 AM] Info: Finalized mesh with 48 batches
[04:01:18 AM] Info: Finalized mesh with 48 batches
[04:01:18 AM] Info: Finalized mesh with 48 batches
[04:01:18 AM] Info: Finalized mesh with 48 batches
[04:01:18 AM] Info: Finalized mesh with 48 batches
[04:01:18 AM] Info: Finalized mesh with 48 batches
[04:01:18 AM] Info: Finalized mesh with 48 batches
[04:01:18 AM] Info: Finalized mesh with 48 batches
[04:01:18 AM] Info: Finalized mesh with 48 batches
[04:01:18 AM] Info: Finalized mesh with 48 batches
[04:01:18 AM] Info: Finalized mesh with 48 batches
[04:01:18 AM] Info: Finalized mesh with 48 batches
[04:01:18 AM] Info: Finalized mesh with 48 batches
[04:01:19 AM] Info: Finalized mesh with 48 batches
[04:01:19 AM] Info: Finalized mesh with 48 batches
[04:01:19 AM] Info: Finalized mesh with 48 batches
[04:01:19 AM] Info: Finalized mesh with 48 batches
[04:01:19 AM] Info: Finalized mesh with 48 batches
[04:01:19 AM] Info: Finalized mesh with 48 batches
[04:01:19 AM] Info: Finalized mesh with 48 batches
[04:01:19 AM] Info: Finalized mesh with 48 batches
[04:01:19 AM] Info: Finalized mesh with 48 batches
[04:01:19 AM] Info: Finalized mesh with 48 batches
[04:01:19 AM] Info: Finalized mesh with 48 batches
[04:01:19 AM] Info: Finalized mesh with 48 batches
[04:01:19 AM] Info: Finalized mesh with 48 batches
[04:01:19 AM] Info: Finalized mesh with 48 batches
[04:01:19 AM] Info: Finalized mesh with 48 batches
[04:01:19 AM] Info: Finalized mesh with 48 batches
[04:01:19 AM] Info: Finalized mesh with 48 batches
[04:01:19 AM] Info: Finalized mesh with 48 batches
[04:01:19 AM] Info: Finalized mesh with 48 batches
[04:01:19 AM] Info: Finalized mesh with 48 batches
[04:01:19 AM] Info: Finalized mesh with 48 batches
[04:01:19 AM] Info: Finalized mesh with 48 batches
[04:01:19 AM] Info: Finalized mesh with 48 batches
[04:01:19 AM] Info: Finalized mesh with 48 batches
[04:01:19 AM] Info: Finalized mesh with 48 batches
[04:01:19 AM] Info: Finalized mesh with 48 batches
[04:01:19 AM] Info: Finalized mesh with 48 batches
[04:01:19 AM] Info: Finalized mesh with 48 batches
[04:01:19 AM] Info: Finalized mesh with 48 batches
[04:01:19 AM] Info: Finalized mesh with 48 batches
[04:01:19 AM] Info: Finalized mesh with 48 batches
[04:01:19 AM] Info: Finalized mesh with 48 batches
[04:01:19 AM] Info: Finalized mesh with 48 batches
[04:01:19 AM] Info: Finalized mesh with 48 batches
[04:01:19 AM] Info: Finalized mesh with 48 batches
[04:01:19 AM] Info: Finalized mesh with 48 batches
[04:01:19 AM] Info: Finalized mesh with 48 batches
[04:01:19 AM] Info: Finalized mesh with 48 batches
[04:01:19 AM] Info: Finalized mesh with 48 batches
[04:01:19 AM] Info: Finalized mesh with 48 batches
[04:01:19 AM] Info: Finalized mesh with 48 batches
[04:01:19 AM] Info: Finalized mesh with 48 batches
[04:01:19 AM] Info: Finalized mesh with 48 batches
[04:01:19 AM] Info: Finalized mesh with 48 batches
[04:01:19 AM] Info: Finalized mesh with 48 batches
[04:01:19 AM] Info: Finalized mesh with 48 batches
[04:01:19 AM] Info: Finalized mesh with 48 batches
[04:01:19 AM] Info: Finalized mesh with 48 batches
[04:01:19 AM] Info: Finalized mesh with 48 batches
[04:01:19 AM] Info: Finalized mesh with 48 batches
[04:01:19 AM] Info: Finalized mesh with 48 batches
[04:01:19 AM] Info: Finalized mesh with 48 batches
[04:01:19 AM] Info: Finalized mesh with 48 batches
[04:01:19 AM] Info: Finalized mesh with 48 batches
[04:01:19 AM] Info: Finalized mesh with 48 batches
[04:01:20 AM] Info: Finalized mesh with 48 batches
[04:01:20 AM] Info: Finalized mesh with 48 batches
[04:01:20 AM] Info: Finalized mesh with 48 batches
[04:01:20 AM] Info: Finalized mesh with 48 batches
[04:01:20 AM] Info: Finalized mesh with 48 batches
[04:01:20 AM] Info: Finalized mesh with 48 batches
[04:01:20 AM] Info: Finalized mesh with 48 batches
[04:01:20 AM] Info: Finalized mesh with 48 batches
[04:01:20 AM] Info: Finalized mesh with 48 batches
[04:01:20 AM] Info: Finalized mesh with 48 batches
[04:01:20 AM] Info: Finalized mesh with 48 batches
[04:01:20 AM] Info: Finalized mesh with 48 batches
[04:01:20 AM] Info: Finalized mesh with 48 batches
[04:01:23 AM] Info: Finalized mesh with 48 batches
[04:01:23 AM] Info: Finalized mesh with 48 batches
[04:01:23 AM] Info: Finalized mesh with 48 batches
[04:01:23 AM] Info: Finalized mesh with 48 batches
[04:01:23 AM] Info: Finalized mesh with 48 batches
[04:01:23 AM] Info: Finalized mesh with 48 batches
[04:01:23 AM] Info: Finalized mesh with 48 batches
[04:01:23 AM] Info: Finalized mesh with 48 batches
[04:01:23 AM] Info: Finalized mesh with 48 batches
[04:01:23 AM] Info: Finalized mesh with 48 batches
[04:01:23 AM] Info: Finalized mesh with 48 batches
[04:01:23 AM] Info: Finalized mesh with 48 batches
[04:01:23 AM] Info: Finalized mesh with 48 batches
[04:01:23 AM] Info: Finalized mesh with 48 batches
[04:01:23 AM] Info: Finalized mesh with 48 batches
[04:01:23 AM] Info: Finalized mesh with 48 batches
[04:01:23 AM] Info: Finalized mesh with 48 batches
[04:01:23 AM] Info: Finalized mesh with 48 batches
[04:01:23 AM] Info: Finalized mesh with 48 batches
[04:01:23 AM] Info: Finalized mesh with 48 batches
[04:01:23 AM] Info: Finalized mesh with 48 batches
[04:01:23 AM] Info: Finalized mesh with 48 batches
[04:01:23 AM] Info: Finalized mesh with 48 batches
[04:01:23 AM] Info: Finalized mesh with 48 batches
[04:01:23 AM] Info: Finalized mesh with 48 batches
[04:01:23 AM] Info: Finalized mesh with 48 batches
[04:01:29 AM] Info: Finalized mesh with 48 batches
[04:01:29 AM] Info: Finalized mesh with 48 batches
[04:01:29 AM] Info: Finalized mesh with 48 batches
[04:01:29 AM] Info: Finalized mesh with 48 batches
[04:01:29 AM] Info: Finalized mesh with 48 batches
[04:01:29 AM] Info: Finalized mesh with 48 batches
[04:01:29 AM] Info: Finalized mesh with 48 batches
[04:01:29 AM] Info: Finalized mesh with 48 batches
[04:01:29 AM] Info: Finalized mesh with 48 batches
[04:01:29 AM] Info: Finalized mesh with 48 batches
[04:01:29 AM] Info: Finalized mesh with 48 batches
[04:01:29 AM] Info: Finalized mesh with 48 batches
[04:01:29 AM] Info: Finalized mesh with 48 batches
[04:01:29 AM] Info: Finalized mesh with 48 batches
[04:01:29 AM] Info: Finalized mesh with 48 batches
[04:01:29 AM] Info: Finalized mesh with 48 batches
[04:01:29 AM] Info: Finalized mesh with 48 batches
[04:01:29 AM] Info: Finalized mesh with 48 batches
[04:01:29 AM] Info: Finalized mesh with 48 batches
[04:01:29 AM] Info: Finalized mesh with 48 batches
[04:01:29 AM] Info: Finalized mesh with 48 batches
[04:01:29 AM] Info: Finalized mesh with 48 batches
[04:01:29 AM] Info: Finalized mesh with 48 batches
[04:01:31 AM] Info: Finalized mesh with 48 batches
[04:01:31 AM] Info: Finalized mesh with 48 batches
[04:01:32 AM] Info: Finalized mesh with 48 batches
[04:01:32 AM] Info: Finalized mesh with 48 batches
[04:01:32 AM] Info: Finalized mesh with 48 batches
[04:01:32 AM] Info: Finalized mesh with 48 batches
[04:01:32 AM] Info: Finalized mesh with 48 batches
[04:01:32 AM] Info: Finalized mesh with 48 batches
[04:01:32 AM] Info: Finalized mesh with 48 batches
[04:01:32 AM] Info: Finalized mesh with 48 batches
[04:01:32 AM] Info: Finalized mesh with 48 batches
[04:01:32 AM] Info: Finalized mesh with 48 batches
[04:01:32 AM] Info: Finalized mesh with 48 batches
[04:01:32 AM] Info: Finalized mesh with 48 batches
[04:01:32 AM] Info: Finalized mesh with 48 batches
[04:01:32 AM] Info: Finalized mesh with 48 batches
[04:01:32 AM] Info: Finalized mesh with 48 batches
[04:01:32 AM] Info: Finalized mesh with 48 batches
[04:01:32 AM] Info: Finalized mesh with 48 batches
[04:01:32 AM] Info: Finalized mesh with 48 batches
[04:01:32 AM] Info: Finalized mesh with 48 batches
[04:01:32 AM] Info: Finalized mesh with 48 batches
[04:01:32 AM] Info: Finalized mesh with 48 batches
[04:01:32 AM] Info: Finalized mesh with 48 batches
[04:01:32 AM] Info: Finalized mesh with 48 batches
[04:01:32 AM] Info: Finalized mesh with 48 batches
[04:01:32 AM] Info: Finalized mesh with 48 batches
[04:01:32 AM] Info: Finalized mesh with 48 batches
[04:01:32 AM] Info: Finalized mesh with 48 batches
[04:01:32 AM] Info: Finalized mesh with 48 batches
[04:01:32 AM] Info: Finalized mesh with 48 batches
[04:01:32 AM] Info: Finalized mesh with 48 batches
[04:01:32 AM] Info: Finalized mesh with 48 batches
[04:01:32 AM] Info: Finalized mesh with 48 batches
[04:01:32 AM] Info: Finalized mesh with 48 batches
[04:01:32 AM] Info: Finalized mesh with 48 batches
[04:01:32 AM] Info: Finalized mesh with 48 batches
[04:01:32 AM] Info: Finalized mesh with 48 batches
[04:01:32 AM] Info: Finalized mesh with 48 batches
[04:01:32 AM] Info: Finalized mesh with 48 batches
[04:01:32 AM] Info: Finalized mesh with 48 batches
[04:01:32 AM] Info: Finalized mesh with 48 batches
[04:01:32 AM] Info: Finalized mesh with 48 batches
[04:01:32 AM] Info: Finalized mesh with 48 batches
[04:01:32 AM] Info: Finalized mesh with 48 batches
[04:01:37 AM] Info: Starting animation
[04:01:46 AM] Info: Finalized mesh with 54 batches
[04:01:51 AM] Info: Finalized mesh with 53 batches
[04:01:54 AM] Info: Finalized mesh with 53 batches
[04:02:07 AM] Info: Finalized mesh with 53 batches
[04:02:15 AM] Info: Finalized mesh with 53 batches
[04:02:17 AM] Info: Finalized mesh with 53 batches
[04:02:19 AM] Info: Finalized mesh with 53 batches
[04:02:38 AM] Info: Finalized mesh with 53 batches

View file

@ -427,8 +427,8 @@ ErrCode Model::LoadModel(const std::string& path, const std::string& main_textur
m_faces = 0;
// Run the texture loading routine (this can vary based on how we've decided to load the model)
if (load_textures)
load_textures();
//if (load_textures)
// load_textures();
// TODO: Retarded busy-waiting, fix whenever I restructure this
//
@ -436,8 +436,10 @@ ErrCode Model::LoadModel(const std::string& path, const std::string& main_textur
// fallback and just load whatever textures are in the store by default, because the way the editor/games work is that ALL
// textures in textures/, including textures/tex3d/ (where model textures go) are loaded in one go
//
while (!m_textures.size())
std::this_thread::sleep_for(std::chrono::milliseconds(50));
//while (!m_textures.size())
// std::this_thread::sleep_for(std::chrono::milliseconds(50));
std::string parent_dir = kp3d_path.substr(0, kp3d_path.find_last_of("/\\"));
m_scene = m_importer.ReadFile(
kp3d_path, aiProcess_Triangulate | aiProcess_GenSmoothNormals | aiProcess_FlipUVs | aiProcess_OptimizeMeshes
@ -450,7 +452,7 @@ ErrCode Model::LoadModel(const std::string& path, const std::string& main_textur
m_global_inverse_transform = m_scene->mRootNode->mTransformation;
m_global_inverse_transform = m_scene->mRootNode->mTransformation.Inverse();
std::string parent_dir = kp3d_path.substr(0, kp3d_path.find_last_of("/\\"));
// exit(1);
// TODO: Go through the scene's material information and try to grab diffuse, AO, normal map, etc. textures...
@ -460,6 +462,7 @@ ErrCode Model::LoadModel(const std::string& path, const std::string& main_textur
{
std::string name(m_scene->mAnimations[i]->mName.C_Str());
m_animation_map.emplace(name, i);
KP3D_LOG_INFO("FOUND ANIMATION: {}, {}", name, i);
}
}
@ -478,11 +481,11 @@ ErrCode Model::LoadModel(const std::string& path, const std::string& main_textur
if (noflip)
{
def.vertices.push_back(Vertex3D(Vec3{pos.x, pos.y, pos.z}, Vec3{nor.x, nor.y, nor.z}, Vec2{tex.x, tex.y}));
def.vertices.push_back(Vertex3D(Vec3{pos.x, pos.y, pos.z}, Vec3{nor.x, nor.y, nor.z}, Vec2{tex.x, -tex.y}));
continue;
}
def.vertices.push_back(Vertex3D(Vec3{pos.x, pos.y, -pos.z}, Vec3{nor.x, nor.y, -nor.z}, Vec2{tex.x, tex.y}));
def.vertices.push_back(Vertex3D(Vec3{pos.x, pos.y, -pos.z}, Vec3{nor.x, nor.y, -nor.z}, Vec2{tex.x, -tex.y}));
}
for (size_t i = 0; i < model->mNumFaces; i++)
@ -507,10 +510,31 @@ ErrCode Model::LoadModel(const std::string& path, const std::string& main_textur
def.base_vertex = m_vertices;
def.base_index = m_faces * 3;
Texture* tex = nullptr,* normal_tex = nullptr;
if (m_scene->HasMaterials())
{
aiString path;
if (!m_scene->mMaterials[model->mMaterialIndex]->GetTexture(aiTextureType_DIFFUSE, 0, &path))
{
tex = new Texture();
tex->Load("$" + parent_dir + "/" + path.C_Str(), false, Texture::FILTER_LINEAR);
m_textures.push_back(tex);
KP3D_LOG_INFO("FOUND TEXTURE: {}", path.C_Str());
}
aiString normal_path;
if (!m_scene->mMaterials[model->mMaterialIndex]->GetTexture(aiTextureType_NORMALS, 0, &path))
{
normal_tex = new Texture();
normal_tex->Load("$" + parent_dir + "/" + path.C_Str(), false, Texture::FILTER_LINEAR);
m_normal_textures.push_back(normal_tex);
KP3D_LOG_INFO("FOUND NORMAL TEXTURE: {}", path.C_Str());
}
}
if (model->HasBones())
m->AddSkinnedBatch(m_textures.back(), def.vertices, def.indices, def.bones, false);
m->AddSkinnedBatch(tex, def.vertices, def.indices, def.bones, false, normal_tex);
else
m->AddIndexedBatch(m_textures.back(), def.vertices, def.indices);
m->AddIndexedBatch(tex, def.vertices, def.indices, normal_tex);
m->Finalize();
m_meshes.push_back(m);

View file

@ -84,6 +84,7 @@ private:
std::vector<StaticMesh*> m_meshes;
std::vector<Texture*> m_textures;
std::vector<Texture*> m_normal_textures;
std::vector<BoneInfo> m_bone_info;
std::unordered_map<std::string, uint> m_bone_name_to_index_map;
std::unordered_map<std::string, uint> m_animation_map;

View file

@ -71,7 +71,7 @@ Mat4 Quaternion::ToMat4() const
Vec3 up(2.0f * (x * y + w * z), 1.0f - 2.0f * (x * x + z * z), 2.0f * (y * z - w * x));
Vec3 right(1.0f - 2.0f * (y * y + z * z), 2.0f * (x * y - w * z), 2.0f * (x * z + w * y));
return Mat4().InitRotation(forward, up, right);
return Mat4().InitRotation(forward, up, -right);
}
Quaternion& Quaternion::operator*=(const Quaternion& rhs)

View file

@ -222,17 +222,15 @@ void Renderer3D::DrawMesh(StaticMesh& mesh, const Mat4& m, bool bind_shader, uin
glEnableVertexAttribArray(0);
glEnableVertexAttribArray(1);
glEnableVertexAttribArray(2);
glEnableVertexAttribArray(3);
glEnableVertexAttribArray(4);
glEnableVertexAttribArray(5);
if (skinned)
{
glEnableVertexAttribArray(5);
glEnableVertexAttribArray(6);
}
glVertexAttribPointer(
0, 3, GL_FLOAT, GL_FALSE, sizeof(Vertex3D), reinterpret_cast<GLvoid*>(offsetof(Vertex3D, position))
);
glVertexAttribPointer(0, 3, GL_FLOAT, GL_FALSE, sizeof(Vertex3D), reinterpret_cast<GLvoid*>(offsetof(Vertex3D, position)));
glVertexAttribPointer(1, 3, GL_FLOAT, GL_FALSE, sizeof(Vertex3D), reinterpret_cast<GLvoid*>(offsetof(Vertex3D, normal)));
glVertexAttribPointer(2, 2, GL_FLOAT, GL_FALSE, sizeof(Vertex3D), reinterpret_cast<GLvoid*>(offsetof(Vertex3D, uv)));
glVertexAttribPointer(3, 3, GL_FLOAT, GL_FALSE, sizeof(Vertex3D), reinterpret_cast<GLvoid*>(offsetof(Vertex3D, atangent)));
@ -378,10 +376,13 @@ void Renderer3D::DrawModel(Model& model, const Mat4& m)
if (!mesh)
continue;
r3d_state->shader->Bind();
for (int i = 0; i < transforms.size(); i++)
{
if (i >= MAX_BONES)
continue;
std::string u = "u_bones[" + std::to_string(i) + "]";
glUniformMatrix4fv(
glGetUniformLocation(r3d_state->shader->GetGLID(), u.c_str()), 1, GL_FALSE, transforms[i].mat.data()
@ -389,7 +390,7 @@ void Renderer3D::DrawModel(Model& model, const Mat4& m)
}
if (mesh->skinnable)
r3d_state->shader->SetUniform("u_has_bones", 1);
DrawMesh(*mesh, m);
DrawMesh(*mesh, m, false);
if (mesh->skinnable)
r3d_state->shader->SetUniform("u_has_bones", 0);
}

View file

@ -11,6 +11,7 @@ namespace kp3d::res {
std::unordered_map<std::string, std::shared_ptr<Material>> material_cache;
std::unordered_map<std::string, std::shared_ptr<Texture>> texture_cache;
std::unordered_map<std::string, std::shared_ptr<Model>> model_cache;
void LoadMaterials()
{
@ -93,4 +94,28 @@ void LoadTextures()
}
}
void LoadModels()
{
// Load every available texture
for (const auto& entry: std::filesystem::recursive_directory_iterator(sys::GetModelDir()))
{
if (entry.is_directory())
continue;
std::filesystem::path entry_path = entry.path();
std::string path_str = entry_path.string();
if (!str::EndsWith(path_str, ".fbx") && !str::EndsWith(path_str, ".obj"))
continue;
std::string filename = std::filesystem::proximate(path_str, sys::GetModelDir()).string();
std::replace(filename.begin(), filename.end(), '\\', '/');
KP3D_LOG_INFO("Loading model resource: {}", filename);
model_cache.emplace(filename, std::make_shared<Model>());
model_cache[filename]->Load(filename);
}
}
} // namespace kp3d::res

View file

@ -7,13 +7,16 @@
#include "KP3D_Common.h"
#include "KP3D_Texture.h"
#include "KP3D_Material.h"
#include "KP3D_Model.h"
namespace kp3d::res {
extern std::unordered_map<std::string, std::shared_ptr<Material>> material_cache;
extern std::unordered_map<std::string, std::shared_ptr<Texture>> texture_cache;
extern std::unordered_map<std::string, std::shared_ptr<Model>> model_cache;
void LoadMaterials();
void LoadTextures();
void LoadModels();
} // namespace kp3d::res

View file

@ -16,7 +16,7 @@ RawTexture::RawTexture():
RawTexture::RawTexture(const std::string& path)
{
std::string tex_path = sys::GetTextureDir() + path;
std::string tex_path = path[0] == '$' ? path.substr(1) : sys::GetTextureDir() + path;
data = stbi_load(tex_path.c_str(), &width, &height, NULL, STBI_rgb_alpha);

View file

@ -19,6 +19,9 @@ Sandbox::Sandbox(const std::string& path):
kp3d::res::LoadMaterials();
kp3d::res::LoadTextures();
seal.noflip = true;
seal.Load("seal/seal.dae");
tex.Load("logo.png");
crosshair.Load(".kp3d/crosshair.png");
projection.InitPerspective(70.0f, (float) GetWidth() / (float) GetHeight());
@ -97,6 +100,14 @@ void Sandbox::Update()
//if (IsKeyDown(kp3d::KEY_F)) camera.Rotate(kp3d::Camera::AXIS_Y, -qerf_speed);
ResetMouseCursor([&](float x, float y) { camera.UpdateMouseLook({x, y}); });
camera.UpdateMatrix();
seal.SetAnimation(0);
if (IsKeyDown(kp3d::KEY_L))
{
seal.StartAnimation();
KeyReset(kp3d::KEY_L);
}
seal.UpdateAnimation();
}
void Sandbox::Render()
@ -112,6 +123,10 @@ void Sandbox::Render()
if (m_mode == MODE_EDIT)
editor.RenderMap();
kp3d::Renderer3D::DrawBillboard(tex, {}, { 1, 1 });
kp3d::Transform trans{ {-2.0f, 0.0f, -2.0f}, {kp3d::ToRadians(-90), 0, 0}, kp3d::Vec3(0.1f)};
kp3d::Renderer3D::PushShader(kp3d::Renderer3D::GetMapShader());
kp3d::Renderer3D::DrawModel(seal, trans);
kp3d::Renderer3D::PopShader();
kp3d::Renderer3D::End();
// 2D scene

View file

@ -6,6 +6,7 @@
#include <KP3D_Math.h>
#include <KP3D_Camera.h>
#include <KP3D_Map.h>
#include <KP3D_Model.h>
#include "Editor.h"
@ -35,6 +36,8 @@ public:
kp3d::Texture crosshair;
kp3d::Mat4 projection;
kp3d::Model seal;
private:
// KP3D essentials
int m_mode;