Fix normal map UVs upside down

This commit is contained in:
KP 2024-07-31 02:03:41 -05:00
parent 35ccb134b5
commit 80993a19ea
12 changed files with 110 additions and 798 deletions

View file

@ -39,32 +39,37 @@ vec4 MakeLight(vec3 norm, vec3 position, vec3 diffuse, float radius, float sharp
light.diffuse = diffuse; light.diffuse = diffuse;
light.radius = radius; light.radius = radius;
float alpha = kpc(distance(light.position, v_position), light.radius * sharpness, light.radius);
vec3 light_dir = normalize(light.position - v_position); vec3 light_dir = normalize(light.position - v_position);
//vec3 view_dir = normalize(u_camdir - v_position); //vec3 view_dir = normalize(u_camdir - v_position);
vec3 view_dir = normalize(u_campos - v_position); vec3 view_dir = normalize(u_campos - v_position);
vec3 reflect_dir = reflect(-light_dir, norm); vec3 reflect_dir = reflect(-light_dir, norm);
float spec = max(dot(view_dir, reflect_dir), 0.0); float spec = max(dot(view_dir, reflect_dir), 0.0);
float diff = max(dot(norm, light_dir), 0.0); float diff = max(dot(norm, light_dir), 0.0);
//diff *= 1.0 - alpha;
power *= 0.5; power *= 0.5;
vec3 ddiffuse = diff * vec3(1.0);// * light.diffuse; //power = 0.5;//alpha;
vec3 specular = power * spec * light.diffuse; vec3 specular = power * spec * light.diffuse * diff;
vec4 res = vec4(ddiffuse + specular, 1.0); vec4 res = vec4(vec3(diff) + specular, 1.0) * (1.0 - alpha);
res *= vec4(light.diffuse, 1);
float alpha = kpc(distance(light.position, v_position), light.radius * sharpness, light.radius); //float alpha = kpc(distance(light.position, v_position), light.radius * sharpness, light.radius);
res *= mix(vec4(light.diffuse, 1), vec4(0,0,0,1), alpha); //res *= mix(vec4(light.diffuse, 1), vec4(0,0,0,1), alpha);
return res; return res;
} }
void main() void main()
{ {
vec3 tangentNormal = texture(u_normal_texture, v_texcoord).xyz * 2.0 - 1.0; vec3 tangentNormal = normalize(texture(u_normal_texture, v_texcoord).xyz * 2.0 - 1.0);
vec3 T = normalize(v_tangent); vec3 T = normalize(v_tangent);
vec3 B = normalize(v_bitangent); vec3 B = normalize(v_bitangent);
vec3 N = normalize(v_normal); vec3 N = normalize(abs(v_normal));
mat3 TBN = mat3(T, B, N); mat3 TBN = mat3(T, B, N);
vec3 norm = normalize(TBN * tangentNormal) * 2.0; vec3 norm = normalize(TBN * tangentNormal);
vec4 texv = texture(u_texture, v_texcoord); //norm = vec3(0,1,0);
vec4 texv = texture(u_texture, v_texcoord);
vec4 ambient = vec4(0.1, 0.1, 0.1, 1.0) * 1.5, light = ambient; vec4 ambient = vec4(0.1, 0.1, 0.1, 1.0) * 1.5, light = ambient;

View file

@ -22,7 +22,7 @@ void main()
v_position = position; v_position = position;
v_normal = normal; v_normal = normal;
v_proj_normal = vec4(u_mvp * vec4(normal, 1.0)).xyz; v_proj_normal = vec4(u_mvp * vec4(normal, 1.0)).xyz;
v_texcoord = texcoord; v_texcoord = vec2(texcoord.x, -texcoord.y);
v_tangent = tangent; v_tangent = tangent;
v_bitangent = bitangent; v_bitangent = bitangent;

Binary file not shown.

After

Width:  |  Height:  |  Size: 247 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 33 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 155 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 181 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 20 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 28 KiB

View file

@ -1,787 +1,95 @@
[00:57:22 AM] Info: Starting... [01:51:37 AM] Info: Starting...
KP3D version 2 KP3D version 2
=============================== ===============================
Copyright (C) kpworld.xyz 2018-2024 Copyright (C) kpworld.xyz 2018-2024
Contact me! @kp_cftsz Contact me! @kp_cftsz
[00:57:22 AM] Info: Initializing SDL [01:51:37 AM] Info: Initializing SDL
[00:57:23 AM] Info: Initializing OpenGL [01:51:37 AM] Info: Initializing OpenGL
[00:57:23 AM] Info: OpenGL version: 4.6.0 NVIDIA 536.23 [01:51:37 AM] Info: OpenGL version: 4.6.0 NVIDIA 536.23
[00:57:23 AM] Info: Initializing GLEW [01:51:37 AM] Info: Initializing GLEW
[00:57:23 AM] Info: Initializing SDL_mixer [01:51:38 AM] Info: Initializing SDL_mixer
[00:57:23 AM] Info: Reticulating splines... [01:51:38 AM] Info: Reticulating splines...
[00:57:23 AM] Info: Ready! [01:51:38 AM] Info: Ready!
[00:57:23 AM] Info: Loading material resource: block.png [01:51:38 AM] Info: Loading material resource: block.png
[00:57:23 AM] Info: Found normal map texture: materials/block_n.png [01:51:38 AM] Info: Found normal map texture: materials/block_n.png
[00:57:23 AM] Info: Loading material resource: FLAT5_7.png [01:51:38 AM] Info: Loading material resource: brick2.jpg
[00:57:23 AM] Info: Found normal map texture: materials/FLAT5_7_n.png [01:51:38 AM] Info: Found normal map texture: materials/brick2_n.jpg
[00:57:23 AM] Info: Loading material resource: floor0.png [01:51:38 AM] Info: Loading material resource: bricks.jpg
[00:57:23 AM] Info: Found normal map texture: materials/floor0_n.png [01:51:38 AM] Info: Found normal map texture: materials/bricks_n.jpg
[00:57:23 AM] Info: Loading material resource: floor1.png [01:51:38 AM] Info: Loading material resource: FLAT5_7.png
[00:57:23 AM] Info: Found normal map texture: materials/floor1_n.png [01:51:38 AM] Info: Found normal map texture: materials/FLAT5_7_n.png
[00:57:23 AM] Info: Loading material resource: GRASS2.png [01:51:38 AM] Info: Loading material resource: floor0.png
[00:57:23 AM] Info: Found normal map texture: materials/GRASS2_n.png [01:51:38 AM] Info: Found normal map texture: materials/floor0_n.png
[00:57:23 AM] Info: Map init [01:51:38 AM] Info: Loading material resource: floor1.png
[00:57:23 AM] Info: Finalized mesh with 49 batches [01:51:38 AM] Info: Found normal map texture: materials/floor1_n.png
[00:57:27 AM] Info: Finalized mesh with 48 batches [01:51:38 AM] Info: Loading material resource: GRASS2.png
[00:57:27 AM] Info: Finalized mesh with 48 batches [01:51:38 AM] Info: Found normal map texture: materials/GRASS2_n.png
[00:57:27 AM] Info: Finalized mesh with 48 batches [01:51:38 AM] Info: Loading material resource: hardwood.jpg
[00:57:27 AM] Info: Finalized mesh with 48 batches [01:51:38 AM] Info: Found normal map texture: materials/hardwood_n.jpg
[00:57:27 AM] Info: Finalized mesh with 48 batches [01:51:38 AM] Info: Map init
[00:57:27 AM] Info: Finalized mesh with 48 batches [01:51:38 AM] Info: Finalized mesh with 49 batches
[00:57:27 AM] Info: Finalized mesh with 48 batches [01:51:58 AM] Info: Finalized mesh with 48 batches
[00:57:27 AM] Info: Finalized mesh with 48 batches [01:52:01 AM] Info: Finalized mesh with 48 batches
[00:57:27 AM] Info: Finalized mesh with 48 batches [01:52:12 AM] Info: Finalized mesh with 48 batches
[00:57:27 AM] Info: Finalized mesh with 48 batches [01:52:14 AM] Info: Finalized mesh with 48 batches
[00:57:28 AM] Info: Finalized mesh with 48 batches [01:52:15 AM] Info: Finalized mesh with 48 batches
[00:57:28 AM] Info: Finalized mesh with 48 batches [01:52:21 AM] Info: Finalized mesh with 48 batches
[00:57:28 AM] Info: Finalized mesh with 48 batches [01:52:24 AM] Info: Finalized mesh with 48 batches
[00:57:28 AM] Info: Finalized mesh with 48 batches [01:53:07 AM] Info: $ set-mode game
[00:57:28 AM] Info: Finalized mesh with 48 batches [01:53:07 AM] Info: $
[00:57:28 AM] Info: Finalized mesh with 48 batches [01:53:24 AM] Warning: Failed to compile fragment shader:
[00:57:28 AM] Info: Finalized mesh with 48 batches 0(52) : error C7011: implicit cast from "float" to "vec3"
[00:57:28 AM] Info: Finalized mesh with 48 batches
[00:57:28 AM] Info: Finalized mesh with 48 batches [01:53:25 AM] Warning: Failed to compile fragment shader:
[00:57:28 AM] Info: Finalized mesh with 48 batches 0(52) : error C7011: implicit cast from "float" to "vec3"
[00:57:28 AM] Info: Finalized mesh with 48 batches
[00:57:28 AM] Info: Finalized mesh with 48 batches [01:53:26 AM] Warning: Failed to compile fragment shader:
[00:57:28 AM] Info: Finalized mesh with 48 batches 0(52) : error C7011: implicit cast from "float" to "vec3"
[00:57:28 AM] Info: Finalized mesh with 48 batches
[00:57:28 AM] Info: Finalized mesh with 48 batches [01:53:27 AM] Warning: Failed to compile fragment shader:
[00:57:28 AM] Info: Finalized mesh with 48 batches 0(52) : error C7011: implicit cast from "float" to "vec3"
[00:57:28 AM] Info: Finalized mesh with 48 batches
[00:57:28 AM] Info: Finalized mesh with 48 batches [01:53:28 AM] Warning: Failed to compile fragment shader:
[00:57:28 AM] Info: Finalized mesh with 48 batches 0(52) : error C7011: implicit cast from "float" to "vec3"
[00:57:28 AM] Info: Finalized mesh with 48 batches
[00:57:28 AM] Info: Finalized mesh with 48 batches [01:53:29 AM] Warning: Failed to compile fragment shader:
[00:57:28 AM] Info: Finalized mesh with 48 batches 0(52) : error C7011: implicit cast from "float" to "vec3"
[00:57:28 AM] Info: Finalized mesh with 48 batches
[00:57:28 AM] Info: Finalized mesh with 48 batches [01:53:30 AM] Warning: Failed to compile fragment shader:
[00:57:28 AM] Info: Finalized mesh with 48 batches 0(52) : error C7011: implicit cast from "float" to "vec3"
[00:57:28 AM] Info: Finalized mesh with 48 batches
[00:57:28 AM] Info: Finalized mesh with 48 batches [01:53:31 AM] Warning: Failed to compile fragment shader:
[00:57:28 AM] Info: Finalized mesh with 48 batches 0(52) : error C7011: implicit cast from "float" to "vec3"
[00:57:28 AM] Info: Finalized mesh with 48 batches
[00:57:28 AM] Info: Finalized mesh with 48 batches [01:53:32 AM] Warning: Failed to compile fragment shader:
[00:57:28 AM] Info: Finalized mesh with 48 batches 0(52) : error C7011: implicit cast from "float" to "vec3"
[00:57:28 AM] Info: Finalized mesh with 48 batches
[00:57:28 AM] Info: Finalized mesh with 48 batches [01:53:33 AM] Warning: Failed to compile fragment shader:
[00:57:28 AM] Info: Finalized mesh with 48 batches 0(52) : error C7011: implicit cast from "float" to "vec3"
[00:57:28 AM] Info: Finalized mesh with 48 batches
[00:57:28 AM] Info: Finalized mesh with 48 batches [01:53:34 AM] Warning: Failed to compile fragment shader:
[00:57:29 AM] Info: Finalized mesh with 48 batches 0(52) : error C7011: implicit cast from "float" to "vec3"
[00:57:29 AM] Info: Finalized mesh with 48 batches
[00:57:29 AM] Info: Finalized mesh with 48 batches [01:53:35 AM] Warning: Failed to compile fragment shader:
[00:57:29 AM] Info: Finalized mesh with 48 batches 0(53) : error C1503: undefined variable "ddiffuse"
[00:57:29 AM] Info: Finalized mesh with 48 batches
[00:57:29 AM] Info: Finalized mesh with 48 batches [01:53:36 AM] Warning: Failed to compile fragment shader:
[00:57:29 AM] Info: Finalized mesh with 48 batches 0(53) : error C1503: undefined variable "ddiffuse"
[00:57:29 AM] Info: Finalized mesh with 48 batches
[00:57:29 AM] Info: Finalized mesh with 48 batches [01:53:37 AM] Warning: Failed to compile fragment shader:
[00:57:29 AM] Info: Finalized mesh with 48 batches 0(53) : error C1503: undefined variable "ddiffuse"
[00:57:29 AM] Info: Finalized mesh with 48 batches
[00:57:29 AM] Info: Finalized mesh with 48 batches [01:53:38 AM] Warning: Failed to compile fragment shader:
[00:57:29 AM] Info: Finalized mesh with 48 batches 0(53) : error C1503: undefined variable "ddiffuse"
[00:57:29 AM] Info: Finalized mesh with 48 batches
[00:57:29 AM] Info: Finalized mesh with 48 batches [01:58:13 AM] Warning: Failed to compile fragment shader:
[00:57:29 AM] Info: Finalized mesh with 48 batches 0(50) : error C1503: undefined variable "ff"
[00:57:29 AM] Info: Finalized mesh with 48 batches
[00:57:29 AM] Info: Finalized mesh with 48 batches [01:58:14 AM] Warning: Failed to compile fragment shader:
[00:57:29 AM] Info: Finalized mesh with 48 batches 0(50) : error C1503: undefined variable "ff"
[00:57:29 AM] Info: Finalized mesh with 48 batches
[00:57:29 AM] Info: Finalized mesh with 48 batches [01:58:15 AM] Warning: Failed to compile fragment shader:
[00:57:29 AM] Info: Finalized mesh with 48 batches 0(50) : error C1503: undefined variable "ff"
[00:57:29 AM] Info: Finalized mesh with 48 batches
[00:57:29 AM] Info: Finalized mesh with 48 batches
[00:57:29 AM] Info: Finalized mesh with 48 batches
[00:57:29 AM] Info: Finalized mesh with 48 batches
[00:57:29 AM] Info: Finalized mesh with 48 batches
[00:57:29 AM] Info: Finalized mesh with 48 batches
[00:57:29 AM] Info: Finalized mesh with 48 batches
[00:57:29 AM] Info: Finalized mesh with 48 batches
[00:57:29 AM] Info: Finalized mesh with 48 batches
[00:57:29 AM] Info: Finalized mesh with 48 batches
[00:57:29 AM] Info: Finalized mesh with 48 batches
[00:57:29 AM] Info: Finalized mesh with 48 batches
[00:57:29 AM] Info: Finalized mesh with 48 batches
[00:57:29 AM] Info: Finalized mesh with 48 batches
[00:57:29 AM] Info: Finalized mesh with 48 batches
[00:57:29 AM] Info: Finalized mesh with 48 batches
[00:57:30 AM] Info: Finalized mesh with 48 batches
[00:57:30 AM] Info: Finalized mesh with 48 batches
[00:57:30 AM] Info: Finalized mesh with 48 batches
[00:57:30 AM] Info: Finalized mesh with 48 batches
[00:57:30 AM] Info: Finalized mesh with 48 batches
[00:57:30 AM] Info: Finalized mesh with 48 batches
[00:57:30 AM] Info: Finalized mesh with 48 batches
[00:57:30 AM] Info: Finalized mesh with 48 batches
[00:57:30 AM] Info: Finalized mesh with 48 batches
[00:57:30 AM] Info: Finalized mesh with 48 batches
[00:57:30 AM] Info: Finalized mesh with 48 batches
[00:57:30 AM] Info: Finalized mesh with 48 batches
[00:57:30 AM] Info: Finalized mesh with 48 batches
[00:57:30 AM] Info: Finalized mesh with 48 batches
[00:57:31 AM] Info: Finalized mesh with 48 batches
[00:57:31 AM] Info: Finalized mesh with 48 batches
[00:57:31 AM] Info: Finalized mesh with 48 batches
[00:57:31 AM] Info: Finalized mesh with 48 batches
[00:57:31 AM] Info: Finalized mesh with 48 batches
[00:57:31 AM] Info: Finalized mesh with 48 batches
[00:57:31 AM] Info: Finalized mesh with 48 batches
[00:57:31 AM] Info: Finalized mesh with 48 batches
[00:57:31 AM] Info: Finalized mesh with 48 batches
[00:57:32 AM] Info: Finalized mesh with 48 batches
[00:57:32 AM] Info: Finalized mesh with 48 batches
[00:57:32 AM] Info: Finalized mesh with 48 batches
[00:57:32 AM] Info: Finalized mesh with 48 batches
[00:57:32 AM] Info: Finalized mesh with 48 batches
[00:57:32 AM] Info: Finalized mesh with 48 batches
[00:57:32 AM] Info: Finalized mesh with 48 batches
[00:57:32 AM] Info: Finalized mesh with 48 batches
[00:57:32 AM] Info: Finalized mesh with 48 batches
[00:57:32 AM] Info: Finalized mesh with 48 batches
[00:57:32 AM] Info: Finalized mesh with 48 batches
[00:57:32 AM] Info: Finalized mesh with 48 batches
[00:57:32 AM] Info: Finalized mesh with 48 batches
[00:57:32 AM] Info: Finalized mesh with 48 batches
[00:57:32 AM] Info: Finalized mesh with 48 batches
[00:57:32 AM] Info: Finalized mesh with 48 batches
[00:57:32 AM] Info: Finalized mesh with 48 batches
[00:57:32 AM] Info: Finalized mesh with 48 batches
[00:57:32 AM] Info: Finalized mesh with 48 batches
[00:57:32 AM] Info: Finalized mesh with 48 batches
[00:57:32 AM] Info: Finalized mesh with 48 batches
[00:57:32 AM] Info: Finalized mesh with 48 batches
[00:57:32 AM] Info: Finalized mesh with 48 batches
[00:57:32 AM] Info: Finalized mesh with 48 batches
[00:57:32 AM] Info: Finalized mesh with 48 batches
[00:57:32 AM] Info: Finalized mesh with 48 batches
[00:57:32 AM] Info: Finalized mesh with 48 batches
[00:57:32 AM] Info: Finalized mesh with 48 batches
[00:57:32 AM] Info: Finalized mesh with 48 batches
[00:57:32 AM] Info: Finalized mesh with 48 batches
[00:57:32 AM] Info: Finalized mesh with 48 batches
[00:57:32 AM] Info: Finalized mesh with 48 batches
[00:57:32 AM] Info: Finalized mesh with 48 batches
[00:57:32 AM] Info: Finalized mesh with 48 batches
[00:57:32 AM] Info: Finalized mesh with 48 batches
[00:57:32 AM] Info: Finalized mesh with 48 batches
[00:57:33 AM] Info: Finalized mesh with 48 batches
[00:57:33 AM] Info: Finalized mesh with 48 batches
[00:57:33 AM] Info: Finalized mesh with 48 batches
[00:57:33 AM] Info: Finalized mesh with 48 batches
[00:57:33 AM] Info: Finalized mesh with 48 batches
[00:57:33 AM] Info: Finalized mesh with 48 batches
[00:57:33 AM] Info: Finalized mesh with 48 batches
[00:57:33 AM] Info: Finalized mesh with 48 batches
[00:57:33 AM] Info: Finalized mesh with 48 batches
[00:57:33 AM] Info: Finalized mesh with 48 batches
[00:57:33 AM] Info: Finalized mesh with 48 batches
[00:57:33 AM] Info: Finalized mesh with 48 batches
[00:57:33 AM] Info: Finalized mesh with 48 batches
[00:57:33 AM] Info: Finalized mesh with 48 batches
[00:57:33 AM] Info: Finalized mesh with 48 batches
[00:57:33 AM] Info: Finalized mesh with 48 batches
[00:57:33 AM] Info: Finalized mesh with 48 batches
[00:57:33 AM] Info: Finalized mesh with 48 batches
[00:57:33 AM] Info: Finalized mesh with 48 batches
[00:57:33 AM] Info: Finalized mesh with 48 batches
[00:57:33 AM] Info: Finalized mesh with 48 batches
[00:57:33 AM] Info: Finalized mesh with 48 batches
[00:57:33 AM] Info: Finalized mesh with 48 batches
[00:57:33 AM] Info: Finalized mesh with 48 batches
[00:57:33 AM] Info: Finalized mesh with 48 batches
[00:57:33 AM] Info: Finalized mesh with 48 batches
[00:57:33 AM] Info: Finalized mesh with 48 batches
[00:57:33 AM] Info: Finalized mesh with 48 batches
[00:57:33 AM] Info: Finalized mesh with 48 batches
[00:57:33 AM] Info: Finalized mesh with 48 batches
[00:57:33 AM] Info: Finalized mesh with 48 batches
[00:57:33 AM] Info: Finalized mesh with 48 batches
[00:57:34 AM] Info: Finalized mesh with 48 batches
[00:57:34 AM] Info: Finalized mesh with 48 batches
[00:57:34 AM] Info: Finalized mesh with 48 batches
[00:57:34 AM] Info: Finalized mesh with 48 batches
[00:57:34 AM] Info: Finalized mesh with 48 batches
[00:57:34 AM] Info: Finalized mesh with 48 batches
[00:57:34 AM] Info: Finalized mesh with 48 batches
[00:57:34 AM] Info: Finalized mesh with 48 batches
[00:57:34 AM] Info: Finalized mesh with 48 batches
[00:57:34 AM] Info: Finalized mesh with 48 batches
[00:57:34 AM] Info: Finalized mesh with 48 batches
[00:57:34 AM] Info: Finalized mesh with 48 batches
[00:57:34 AM] Info: Finalized mesh with 48 batches
[00:57:34 AM] Info: Finalized mesh with 48 batches
[00:57:34 AM] Info: Finalized mesh with 48 batches
[00:57:34 AM] Info: Finalized mesh with 48 batches
[00:57:34 AM] Info: Finalized mesh with 48 batches
[00:57:34 AM] Info: Finalized mesh with 48 batches
[00:57:34 AM] Info: Finalized mesh with 48 batches
[00:57:34 AM] Info: Finalized mesh with 48 batches
[00:57:34 AM] Info: Finalized mesh with 48 batches
[00:57:34 AM] Info: Finalized mesh with 48 batches
[00:57:34 AM] Info: Finalized mesh with 48 batches
[00:57:34 AM] Info: Finalized mesh with 48 batches
[00:57:34 AM] Info: Finalized mesh with 48 batches
[00:57:34 AM] Info: Finalized mesh with 48 batches
[00:57:34 AM] Info: Finalized mesh with 48 batches
[00:57:34 AM] Info: Finalized mesh with 48 batches
[00:57:34 AM] Info: Finalized mesh with 48 batches
[00:57:34 AM] Info: Finalized mesh with 48 batches
[00:57:34 AM] Info: Finalized mesh with 48 batches
[00:57:34 AM] Info: Finalized mesh with 48 batches
[00:57:34 AM] Info: Finalized mesh with 48 batches
[00:57:34 AM] Info: Finalized mesh with 48 batches
[00:57:34 AM] Info: Finalized mesh with 48 batches
[00:57:34 AM] Info: Finalized mesh with 48 batches
[00:57:34 AM] Info: Finalized mesh with 48 batches
[00:57:34 AM] Info: Finalized mesh with 48 batches
[00:57:35 AM] Info: Finalized mesh with 48 batches
[00:57:35 AM] Info: Finalized mesh with 48 batches
[00:57:35 AM] Info: Finalized mesh with 48 batches
[00:57:35 AM] Info: Finalized mesh with 48 batches
[00:57:35 AM] Info: Finalized mesh with 48 batches
[00:57:35 AM] Info: Finalized mesh with 48 batches
[00:57:35 AM] Info: Finalized mesh with 48 batches
[00:57:35 AM] Info: Finalized mesh with 48 batches
[00:57:35 AM] Info: Finalized mesh with 48 batches
[00:57:35 AM] Info: Finalized mesh with 48 batches
[00:57:35 AM] Info: Finalized mesh with 48 batches
[00:57:35 AM] Info: Finalized mesh with 48 batches
[00:57:35 AM] Info: Finalized mesh with 48 batches
[00:57:35 AM] Info: Finalized mesh with 48 batches
[00:57:35 AM] Info: Finalized mesh with 48 batches
[00:57:35 AM] Info: Finalized mesh with 48 batches
[00:57:35 AM] Info: Finalized mesh with 48 batches
[00:57:35 AM] Info: Finalized mesh with 48 batches
[00:57:35 AM] Info: Finalized mesh with 48 batches
[00:57:35 AM] Info: Finalized mesh with 48 batches
[00:57:35 AM] Info: Finalized mesh with 48 batches
[00:57:35 AM] Info: Finalized mesh with 48 batches
[00:57:35 AM] Info: Finalized mesh with 48 batches
[00:57:35 AM] Info: Finalized mesh with 48 batches
[00:57:35 AM] Info: Finalized mesh with 48 batches
[00:57:35 AM] Info: Finalized mesh with 48 batches
[00:57:35 AM] Info: Finalized mesh with 48 batches
[00:57:35 AM] Info: Finalized mesh with 48 batches
[00:57:35 AM] Info: Finalized mesh with 48 batches
[00:57:35 AM] Info: Finalized mesh with 48 batches
[00:57:36 AM] Info: Finalized mesh with 48 batches
[00:57:36 AM] Info: Finalized mesh with 48 batches
[00:57:36 AM] Info: Finalized mesh with 48 batches
[00:57:36 AM] Info: Finalized mesh with 48 batches
[00:57:36 AM] Info: Finalized mesh with 48 batches
[00:57:36 AM] Info: Finalized mesh with 48 batches
[00:57:36 AM] Info: Finalized mesh with 48 batches
[00:57:36 AM] Info: Finalized mesh with 48 batches
[00:57:36 AM] Info: Finalized mesh with 48 batches
[00:57:36 AM] Info: Finalized mesh with 48 batches
[00:57:36 AM] Info: Finalized mesh with 48 batches
[00:57:36 AM] Info: Finalized mesh with 48 batches
[00:57:36 AM] Info: Finalized mesh with 48 batches
[00:57:36 AM] Info: Finalized mesh with 48 batches
[00:57:36 AM] Info: Finalized mesh with 48 batches
[00:57:36 AM] Info: Finalized mesh with 48 batches
[00:57:36 AM] Info: Finalized mesh with 48 batches
[00:57:36 AM] Info: Finalized mesh with 48 batches
[00:57:36 AM] Info: Finalized mesh with 48 batches
[00:57:36 AM] Info: Finalized mesh with 48 batches
[00:57:36 AM] Info: Finalized mesh with 48 batches
[00:57:36 AM] Info: Finalized mesh with 48 batches
[00:57:36 AM] Info: Finalized mesh with 48 batches
[00:57:36 AM] Info: Finalized mesh with 48 batches
[00:57:36 AM] Info: Finalized mesh with 48 batches
[00:57:36 AM] Info: Finalized mesh with 48 batches
[00:57:36 AM] Info: Finalized mesh with 48 batches
[00:57:36 AM] Info: Finalized mesh with 48 batches
[00:57:36 AM] Info: Finalized mesh with 48 batches
[00:57:36 AM] Info: Finalized mesh with 48 batches
[00:57:36 AM] Info: Finalized mesh with 48 batches
[00:57:36 AM] Info: Finalized mesh with 48 batches
[00:57:36 AM] Info: Finalized mesh with 48 batches
[00:57:36 AM] Info: Finalized mesh with 48 batches
[00:57:36 AM] Info: Finalized mesh with 48 batches
[00:57:36 AM] Info: Finalized mesh with 48 batches
[00:57:37 AM] Info: Finalized mesh with 48 batches
[00:57:37 AM] Info: Finalized mesh with 48 batches
[00:57:37 AM] Info: Finalized mesh with 48 batches
[00:57:37 AM] Info: Finalized mesh with 48 batches
[00:57:37 AM] Info: Finalized mesh with 48 batches
[00:57:37 AM] Info: Finalized mesh with 48 batches
[00:57:37 AM] Info: Finalized mesh with 48 batches
[00:57:37 AM] Info: Finalized mesh with 48 batches
[00:57:37 AM] Info: Finalized mesh with 48 batches
[00:57:37 AM] Info: Finalized mesh with 48 batches
[00:57:37 AM] Info: Finalized mesh with 48 batches
[00:57:37 AM] Info: Finalized mesh with 48 batches
[00:57:37 AM] Info: Finalized mesh with 48 batches
[00:57:37 AM] Info: Finalized mesh with 48 batches
[00:57:37 AM] Info: Finalized mesh with 48 batches
[00:57:37 AM] Info: Finalized mesh with 48 batches
[00:57:37 AM] Info: Finalized mesh with 48 batches
[00:57:37 AM] Info: Finalized mesh with 48 batches
[00:57:37 AM] Info: Finalized mesh with 48 batches
[00:57:37 AM] Info: Finalized mesh with 48 batches
[00:57:37 AM] Info: Finalized mesh with 48 batches
[00:57:37 AM] Info: Finalized mesh with 48 batches
[00:57:37 AM] Info: Finalized mesh with 48 batches
[00:57:37 AM] Info: Finalized mesh with 48 batches
[00:57:37 AM] Info: Finalized mesh with 48 batches
[00:57:37 AM] Info: Finalized mesh with 48 batches
[00:57:37 AM] Info: Finalized mesh with 48 batches
[00:57:37 AM] Info: Finalized mesh with 48 batches
[00:57:37 AM] Info: Finalized mesh with 48 batches
[00:57:37 AM] Info: Finalized mesh with 48 batches
[00:57:37 AM] Info: Finalized mesh with 48 batches
[00:57:37 AM] Info: Finalized mesh with 48 batches
[00:57:37 AM] Info: Finalized mesh with 48 batches
[00:57:37 AM] Info: Finalized mesh with 48 batches
[00:57:37 AM] Info: Finalized mesh with 48 batches
[00:57:37 AM] Info: Finalized mesh with 48 batches
[00:57:37 AM] Info: Finalized mesh with 48 batches
[00:57:37 AM] Info: Finalized mesh with 48 batches
[00:57:38 AM] Info: Finalized mesh with 48 batches
[00:57:38 AM] Info: Finalized mesh with 48 batches
[00:57:38 AM] Info: Finalized mesh with 48 batches
[00:57:38 AM] Info: Finalized mesh with 48 batches
[00:57:38 AM] Info: Finalized mesh with 48 batches
[00:57:38 AM] Info: Finalized mesh with 48 batches
[00:57:38 AM] Info: Finalized mesh with 48 batches
[00:57:38 AM] Info: Finalized mesh with 48 batches
[00:57:38 AM] Info: Finalized mesh with 48 batches
[00:57:38 AM] Info: Finalized mesh with 48 batches
[00:57:38 AM] Info: Finalized mesh with 48 batches
[00:57:38 AM] Info: Finalized mesh with 48 batches
[00:57:38 AM] Info: Finalized mesh with 48 batches
[00:57:38 AM] Info: Finalized mesh with 48 batches
[00:57:38 AM] Info: Finalized mesh with 48 batches
[00:57:38 AM] Info: Finalized mesh with 48 batches
[00:57:38 AM] Info: Finalized mesh with 48 batches
[00:57:38 AM] Info: Finalized mesh with 48 batches
[00:57:38 AM] Info: Finalized mesh with 48 batches
[00:57:38 AM] Info: Finalized mesh with 48 batches
[00:57:38 AM] Info: Finalized mesh with 48 batches
[00:57:38 AM] Info: Finalized mesh with 48 batches
[00:57:38 AM] Info: Finalized mesh with 48 batches
[00:57:38 AM] Info: Finalized mesh with 48 batches
[00:57:38 AM] Info: Finalized mesh with 48 batches
[00:57:38 AM] Info: Finalized mesh with 48 batches
[00:57:38 AM] Info: Finalized mesh with 48 batches
[00:57:38 AM] Info: Finalized mesh with 48 batches
[00:57:39 AM] Info: Finalized mesh with 48 batches
[00:57:39 AM] Info: Finalized mesh with 48 batches
[00:57:39 AM] Info: Finalized mesh with 48 batches
[00:57:39 AM] Info: Finalized mesh with 48 batches
[00:57:39 AM] Info: Finalized mesh with 48 batches
[00:57:39 AM] Info: Finalized mesh with 48 batches
[00:57:39 AM] Info: Finalized mesh with 48 batches
[00:57:39 AM] Info: Finalized mesh with 48 batches
[00:57:39 AM] Info: Finalized mesh with 48 batches
[00:57:39 AM] Info: Finalized mesh with 48 batches
[00:57:39 AM] Info: Finalized mesh with 48 batches
[00:57:39 AM] Info: Finalized mesh with 48 batches
[00:57:39 AM] Info: Finalized mesh with 48 batches
[00:57:39 AM] Info: Finalized mesh with 48 batches
[00:57:39 AM] Info: Finalized mesh with 48 batches
[00:57:39 AM] Info: Finalized mesh with 48 batches
[00:57:39 AM] Info: Finalized mesh with 48 batches
[00:57:39 AM] Info: Finalized mesh with 48 batches
[00:57:39 AM] Info: Finalized mesh with 48 batches
[00:57:39 AM] Info: Finalized mesh with 48 batches
[00:57:39 AM] Info: Finalized mesh with 48 batches
[00:57:39 AM] Info: Finalized mesh with 48 batches
[00:57:39 AM] Info: Finalized mesh with 48 batches
[00:57:39 AM] Info: Finalized mesh with 48 batches
[00:57:39 AM] Info: Finalized mesh with 48 batches
[00:57:39 AM] Info: Finalized mesh with 48 batches
[00:57:39 AM] Info: Finalized mesh with 48 batches
[00:57:39 AM] Info: Finalized mesh with 48 batches
[00:57:39 AM] Info: Finalized mesh with 48 batches
[00:57:39 AM] Info: Finalized mesh with 48 batches
[00:57:39 AM] Info: Finalized mesh with 48 batches
[00:57:39 AM] Info: Finalized mesh with 48 batches
[00:57:39 AM] Info: Finalized mesh with 48 batches
[00:57:39 AM] Info: Finalized mesh with 48 batches
[00:57:40 AM] Info: Finalized mesh with 48 batches
[00:57:40 AM] Info: Finalized mesh with 48 batches
[00:57:40 AM] Info: Finalized mesh with 48 batches
[00:57:40 AM] Info: Finalized mesh with 48 batches
[00:57:40 AM] Info: Finalized mesh with 48 batches
[00:57:40 AM] Info: Finalized mesh with 48 batches
[00:57:40 AM] Info: Finalized mesh with 48 batches
[00:57:40 AM] Info: Finalized mesh with 48 batches
[00:57:40 AM] Info: Finalized mesh with 48 batches
[00:57:40 AM] Info: Finalized mesh with 48 batches
[00:57:40 AM] Info: Finalized mesh with 48 batches
[00:57:40 AM] Info: Finalized mesh with 48 batches
[00:57:40 AM] Info: Finalized mesh with 48 batches
[00:57:40 AM] Info: Finalized mesh with 48 batches
[00:57:40 AM] Info: Finalized mesh with 48 batches
[00:57:40 AM] Info: Finalized mesh with 48 batches
[00:57:40 AM] Info: Finalized mesh with 48 batches
[00:57:40 AM] Info: Finalized mesh with 48 batches
[00:57:40 AM] Info: Finalized mesh with 48 batches
[00:57:40 AM] Info: Finalized mesh with 48 batches
[00:57:40 AM] Info: Finalized mesh with 48 batches
[00:57:40 AM] Info: Finalized mesh with 48 batches
[00:57:40 AM] Info: Finalized mesh with 48 batches
[00:57:40 AM] Info: Finalized mesh with 48 batches
[00:57:40 AM] Info: Finalized mesh with 48 batches
[00:57:40 AM] Info: Finalized mesh with 48 batches
[00:57:40 AM] Info: Finalized mesh with 48 batches
[00:57:40 AM] Info: Finalized mesh with 48 batches
[00:57:40 AM] Info: Finalized mesh with 48 batches
[00:57:40 AM] Info: Finalized mesh with 48 batches
[00:57:40 AM] Info: Finalized mesh with 48 batches
[00:57:40 AM] Info: Finalized mesh with 48 batches
[00:57:41 AM] Info: Finalized mesh with 48 batches
[00:57:41 AM] Info: Finalized mesh with 48 batches
[00:57:41 AM] Info: Finalized mesh with 48 batches
[00:57:41 AM] Info: Finalized mesh with 48 batches
[00:57:41 AM] Info: Finalized mesh with 48 batches
[00:57:41 AM] Info: Finalized mesh with 48 batches
[00:57:41 AM] Info: Finalized mesh with 48 batches
[00:57:41 AM] Info: Finalized mesh with 48 batches
[00:57:41 AM] Info: Finalized mesh with 48 batches
[00:57:41 AM] Info: Finalized mesh with 48 batches
[00:57:41 AM] Info: Finalized mesh with 48 batches
[00:57:41 AM] Info: Finalized mesh with 48 batches
[00:57:41 AM] Info: Finalized mesh with 48 batches
[00:57:41 AM] Info: Finalized mesh with 48 batches
[00:57:41 AM] Info: Finalized mesh with 48 batches
[00:57:41 AM] Info: Finalized mesh with 48 batches
[00:57:41 AM] Info: Finalized mesh with 48 batches
[00:57:41 AM] Info: Finalized mesh with 48 batches
[00:57:41 AM] Info: Finalized mesh with 48 batches
[00:57:41 AM] Info: Finalized mesh with 48 batches
[00:57:41 AM] Info: Finalized mesh with 48 batches
[00:57:41 AM] Info: Finalized mesh with 48 batches
[00:57:41 AM] Info: Finalized mesh with 48 batches
[00:57:41 AM] Info: Finalized mesh with 48 batches
[00:57:41 AM] Info: Finalized mesh with 48 batches
[00:57:41 AM] Info: Finalized mesh with 48 batches
[00:57:41 AM] Info: Finalized mesh with 48 batches
[00:57:41 AM] Info: Finalized mesh with 48 batches
[00:57:41 AM] Info: Finalized mesh with 48 batches
[00:57:41 AM] Info: Finalized mesh with 48 batches
[00:57:41 AM] Info: Finalized mesh with 48 batches
[00:57:41 AM] Info: Finalized mesh with 48 batches
[00:57:41 AM] Info: Finalized mesh with 48 batches
[00:57:42 AM] Info: Finalized mesh with 48 batches
[00:57:42 AM] Info: Finalized mesh with 48 batches
[00:57:42 AM] Info: Finalized mesh with 48 batches
[00:57:42 AM] Info: Finalized mesh with 48 batches
[00:57:42 AM] Info: Finalized mesh with 48 batches
[00:57:42 AM] Info: Finalized mesh with 48 batches
[00:57:42 AM] Info: Finalized mesh with 48 batches
[00:57:42 AM] Info: Finalized mesh with 48 batches
[00:57:42 AM] Info: Finalized mesh with 48 batches
[00:57:42 AM] Info: Finalized mesh with 48 batches
[00:57:42 AM] Info: Finalized mesh with 48 batches
[00:57:42 AM] Info: Finalized mesh with 48 batches
[00:57:42 AM] Info: Finalized mesh with 48 batches
[00:57:42 AM] Info: Finalized mesh with 48 batches
[00:57:42 AM] Info: Finalized mesh with 48 batches
[00:57:42 AM] Info: Finalized mesh with 48 batches
[00:57:42 AM] Info: Finalized mesh with 48 batches
[00:57:42 AM] Info: Finalized mesh with 48 batches
[00:57:42 AM] Info: Finalized mesh with 48 batches
[00:57:42 AM] Info: Finalized mesh with 48 batches
[00:57:42 AM] Info: Finalized mesh with 48 batches
[00:57:42 AM] Info: Finalized mesh with 48 batches
[00:57:42 AM] Info: Finalized mesh with 48 batches
[00:57:42 AM] Info: Finalized mesh with 48 batches
[00:57:42 AM] Info: Finalized mesh with 48 batches
[00:57:42 AM] Info: Finalized mesh with 48 batches
[00:57:42 AM] Info: Finalized mesh with 48 batches
[00:57:42 AM] Info: Finalized mesh with 48 batches
[00:57:42 AM] Info: Finalized mesh with 48 batches
[00:57:43 AM] Info: Finalized mesh with 48 batches
[00:57:43 AM] Info: Finalized mesh with 48 batches
[00:57:43 AM] Info: Finalized mesh with 48 batches
[00:57:43 AM] Info: Finalized mesh with 48 batches
[00:57:43 AM] Info: Finalized mesh with 48 batches
[00:57:43 AM] Info: Finalized mesh with 48 batches
[00:57:43 AM] Info: Finalized mesh with 48 batches
[00:57:43 AM] Info: Finalized mesh with 48 batches
[00:57:43 AM] Info: Finalized mesh with 48 batches
[00:57:43 AM] Info: Finalized mesh with 48 batches
[00:57:43 AM] Info: Finalized mesh with 48 batches
[00:57:43 AM] Info: Finalized mesh with 48 batches
[00:57:43 AM] Info: Finalized mesh with 48 batches
[00:57:43 AM] Info: Finalized mesh with 48 batches
[00:57:43 AM] Info: Finalized mesh with 48 batches
[00:57:43 AM] Info: Finalized mesh with 48 batches
[00:57:43 AM] Info: Finalized mesh with 48 batches
[00:57:43 AM] Info: Finalized mesh with 48 batches
[00:57:43 AM] Info: Finalized mesh with 48 batches
[00:57:43 AM] Info: Finalized mesh with 48 batches
[00:57:43 AM] Info: Finalized mesh with 48 batches
[00:57:43 AM] Info: Finalized mesh with 48 batches
[00:57:43 AM] Info: Finalized mesh with 48 batches
[00:57:43 AM] Info: Finalized mesh with 48 batches
[00:57:43 AM] Info: Finalized mesh with 48 batches
[00:57:43 AM] Info: Finalized mesh with 48 batches
[00:57:43 AM] Info: Finalized mesh with 48 batches
[00:57:43 AM] Info: Finalized mesh with 48 batches
[00:57:43 AM] Info: Finalized mesh with 48 batches
[00:57:43 AM] Info: Finalized mesh with 48 batches
[00:57:43 AM] Info: Finalized mesh with 48 batches
[00:57:43 AM] Info: Finalized mesh with 48 batches
[00:57:43 AM] Info: Finalized mesh with 48 batches
[00:57:43 AM] Info: Finalized mesh with 48 batches
[00:57:43 AM] Info: Finalized mesh with 48 batches
[00:57:44 AM] Info: Finalized mesh with 48 batches
[00:57:44 AM] Info: Finalized mesh with 48 batches
[00:57:44 AM] Info: Finalized mesh with 48 batches
[00:57:44 AM] Info: Finalized mesh with 48 batches
[00:57:44 AM] Info: Finalized mesh with 48 batches
[00:57:44 AM] Info: Finalized mesh with 48 batches
[00:57:44 AM] Info: Finalized mesh with 48 batches
[00:57:44 AM] Info: Finalized mesh with 48 batches
[00:57:44 AM] Info: Finalized mesh with 48 batches
[00:57:44 AM] Info: Finalized mesh with 48 batches
[00:57:44 AM] Info: Finalized mesh with 48 batches
[00:57:44 AM] Info: Finalized mesh with 48 batches
[00:57:44 AM] Info: Finalized mesh with 48 batches
[00:57:44 AM] Info: Finalized mesh with 48 batches
[00:57:44 AM] Info: Finalized mesh with 48 batches
[00:57:44 AM] Info: Finalized mesh with 48 batches
[00:57:44 AM] Info: Finalized mesh with 48 batches
[00:57:44 AM] Info: Finalized mesh with 48 batches
[00:57:44 AM] Info: Finalized mesh with 48 batches
[00:57:44 AM] Info: Finalized mesh with 48 batches
[00:57:44 AM] Info: Finalized mesh with 48 batches
[00:57:44 AM] Info: Finalized mesh with 48 batches
[00:57:44 AM] Info: Finalized mesh with 48 batches
[00:57:44 AM] Info: Finalized mesh with 48 batches
[00:57:44 AM] Info: Finalized mesh with 48 batches
[00:57:44 AM] Info: Finalized mesh with 48 batches
[00:57:44 AM] Info: Finalized mesh with 48 batches
[00:57:44 AM] Info: Finalized mesh with 48 batches
[00:57:44 AM] Info: Finalized mesh with 48 batches
[00:57:44 AM] Info: Finalized mesh with 48 batches
[00:57:44 AM] Info: Finalized mesh with 48 batches
[00:57:44 AM] Info: Finalized mesh with 48 batches
[00:57:44 AM] Info: Finalized mesh with 48 batches
[00:57:44 AM] Info: Finalized mesh with 48 batches
[00:57:44 AM] Info: Finalized mesh with 48 batches
[00:57:44 AM] Info: Finalized mesh with 48 batches
[00:57:45 AM] Info: Finalized mesh with 48 batches
[00:57:45 AM] Info: Finalized mesh with 48 batches
[00:57:45 AM] Info: Finalized mesh with 48 batches
[00:57:45 AM] Info: Finalized mesh with 48 batches
[00:57:45 AM] Info: Finalized mesh with 48 batches
[00:57:45 AM] Info: Finalized mesh with 48 batches
[00:57:45 AM] Info: Finalized mesh with 48 batches
[00:57:45 AM] Info: Finalized mesh with 48 batches
[00:57:45 AM] Info: Finalized mesh with 48 batches
[00:57:45 AM] Info: Finalized mesh with 48 batches
[00:57:45 AM] Info: Finalized mesh with 48 batches
[00:57:45 AM] Info: Finalized mesh with 48 batches
[00:57:45 AM] Info: Finalized mesh with 48 batches
[00:57:45 AM] Info: Finalized mesh with 48 batches
[00:57:45 AM] Info: Finalized mesh with 48 batches
[00:57:45 AM] Info: Finalized mesh with 48 batches
[00:57:45 AM] Info: Finalized mesh with 48 batches
[00:57:45 AM] Info: Finalized mesh with 48 batches
[00:57:45 AM] Info: Finalized mesh with 48 batches
[00:57:45 AM] Info: Finalized mesh with 48 batches
[00:57:45 AM] Info: Finalized mesh with 48 batches
[00:57:45 AM] Info: Finalized mesh with 48 batches
[00:57:45 AM] Info: Finalized mesh with 48 batches
[00:57:45 AM] Info: Finalized mesh with 48 batches
[00:57:45 AM] Info: Finalized mesh with 48 batches
[00:57:45 AM] Info: Finalized mesh with 48 batches
[00:57:46 AM] Info: Finalized mesh with 48 batches
[00:57:46 AM] Info: Finalized mesh with 48 batches
[00:57:46 AM] Info: Finalized mesh with 48 batches
[00:57:46 AM] Info: Finalized mesh with 48 batches
[00:57:46 AM] Info: Finalized mesh with 48 batches
[00:57:46 AM] Info: Finalized mesh with 48 batches
[00:57:46 AM] Info: Finalized mesh with 48 batches
[00:57:46 AM] Info: Finalized mesh with 48 batches
[00:57:46 AM] Info: Finalized mesh with 48 batches
[00:57:46 AM] Info: Finalized mesh with 48 batches
[00:57:46 AM] Info: Finalized mesh with 48 batches
[00:57:46 AM] Info: Finalized mesh with 48 batches
[00:57:46 AM] Info: Finalized mesh with 48 batches
[00:57:46 AM] Info: Finalized mesh with 48 batches
[00:57:46 AM] Info: Finalized mesh with 48 batches
[00:57:46 AM] Info: Finalized mesh with 48 batches
[00:57:46 AM] Info: Finalized mesh with 48 batches
[00:57:46 AM] Info: Finalized mesh with 48 batches
[00:57:46 AM] Info: Finalized mesh with 48 batches
[00:57:46 AM] Info: Finalized mesh with 48 batches
[00:57:46 AM] Info: Finalized mesh with 48 batches
[00:57:46 AM] Info: Finalized mesh with 48 batches
[00:57:46 AM] Info: Finalized mesh with 48 batches
[00:57:46 AM] Info: Finalized mesh with 48 batches
[00:57:46 AM] Info: Finalized mesh with 48 batches
[00:57:46 AM] Info: Finalized mesh with 48 batches
[00:57:46 AM] Info: Finalized mesh with 48 batches
[00:57:47 AM] Info: Finalized mesh with 48 batches
[00:57:47 AM] Info: Finalized mesh with 48 batches
[00:57:47 AM] Info: Finalized mesh with 48 batches
[00:57:47 AM] Info: Finalized mesh with 48 batches
[00:57:47 AM] Info: Finalized mesh with 48 batches
[00:57:47 AM] Info: Finalized mesh with 48 batches
[00:57:47 AM] Info: Finalized mesh with 48 batches
[00:57:47 AM] Info: Finalized mesh with 48 batches
[00:57:47 AM] Info: Finalized mesh with 48 batches
[00:57:47 AM] Info: Finalized mesh with 48 batches
[00:57:47 AM] Info: Finalized mesh with 48 batches
[00:57:47 AM] Info: Finalized mesh with 48 batches
[00:57:47 AM] Info: Finalized mesh with 48 batches
[00:57:47 AM] Info: Finalized mesh with 48 batches
[00:57:47 AM] Info: Finalized mesh with 48 batches
[00:57:47 AM] Info: Finalized mesh with 48 batches
[00:57:47 AM] Info: Finalized mesh with 48 batches
[00:57:48 AM] Info: Finalized mesh with 48 batches
[00:57:48 AM] Info: Finalized mesh with 48 batches
[00:57:48 AM] Info: Finalized mesh with 48 batches
[00:57:48 AM] Info: Finalized mesh with 48 batches
[00:57:48 AM] Info: Finalized mesh with 48 batches
[00:57:48 AM] Info: Finalized mesh with 48 batches
[00:57:48 AM] Info: Finalized mesh with 48 batches
[00:57:48 AM] Info: Finalized mesh with 48 batches
[00:57:59 AM] Info: Finalized mesh with 48 batches
[00:58:01 AM] Info: Finalized mesh with 48 batches
[00:58:09 AM] Info: Finalized mesh with 48 batches
[00:58:09 AM] Info: Finalized mesh with 48 batches
[00:58:09 AM] Info: Finalized mesh with 48 batches
[00:58:09 AM] Info: Finalized mesh with 48 batches
[00:58:09 AM] Info: Finalized mesh with 48 batches
[00:58:09 AM] Info: Finalized mesh with 48 batches
[00:58:09 AM] Info: Finalized mesh with 48 batches
[00:58:09 AM] Info: Finalized mesh with 48 batches
[00:58:09 AM] Info: Finalized mesh with 48 batches
[00:58:09 AM] Info: Finalized mesh with 48 batches
[00:58:09 AM] Info: Finalized mesh with 48 batches
[00:58:09 AM] Info: Finalized mesh with 48 batches
[00:58:09 AM] Info: Finalized mesh with 48 batches
[00:58:09 AM] Info: Finalized mesh with 48 batches
[00:58:09 AM] Info: Finalized mesh with 48 batches
[00:58:09 AM] Info: Finalized mesh with 48 batches
[00:58:09 AM] Info: Finalized mesh with 48 batches
[00:58:09 AM] Info: Finalized mesh with 48 batches
[00:58:09 AM] Info: Finalized mesh with 48 batches
[00:58:09 AM] Info: Finalized mesh with 48 batches
[00:58:09 AM] Info: Finalized mesh with 48 batches
[00:58:09 AM] Info: Finalized mesh with 48 batches
[00:58:09 AM] Info: Finalized mesh with 48 batches
[00:58:09 AM] Info: Finalized mesh with 48 batches
[00:58:09 AM] Info: Finalized mesh with 48 batches
[00:58:09 AM] Info: Finalized mesh with 48 batches
[00:58:09 AM] Info: Finalized mesh with 48 batches
[00:58:09 AM] Info: Finalized mesh with 48 batches
[00:58:09 AM] Info: Finalized mesh with 48 batches
[00:58:09 AM] Info: Finalized mesh with 48 batches
[00:58:09 AM] Info: Finalized mesh with 48 batches
[00:58:09 AM] Info: Finalized mesh with 48 batches
[00:58:09 AM] Info: Finalized mesh with 48 batches
[00:58:10 AM] Info: Finalized mesh with 48 batches
[00:58:10 AM] Info: Finalized mesh with 48 batches
[00:58:10 AM] Info: Finalized mesh with 48 batches
[00:58:10 AM] Info: Finalized mesh with 48 batches
[00:58:10 AM] Info: Finalized mesh with 48 batches
[00:58:10 AM] Info: Finalized mesh with 48 batches
[00:58:10 AM] Info: Finalized mesh with 48 batches
[00:58:10 AM] Info: Finalized mesh with 48 batches
[00:58:10 AM] Info: Finalized mesh with 48 batches
[00:58:10 AM] Info: Finalized mesh with 48 batches
[00:58:10 AM] Info: Finalized mesh with 48 batches
[00:58:10 AM] Info: Finalized mesh with 48 batches
[00:58:10 AM] Info: Finalized mesh with 48 batches
[00:58:10 AM] Info: Finalized mesh with 48 batches
[00:58:11 AM] Info: Finalized mesh with 48 batches
[00:58:11 AM] Info: Finalized mesh with 48 batches
[00:58:11 AM] Info: Finalized mesh with 48 batches
[00:58:11 AM] Info: Finalized mesh with 48 batches
[00:58:11 AM] Info: Finalized mesh with 48 batches
[00:58:11 AM] Info: Finalized mesh with 48 batches
[00:58:11 AM] Info: Finalized mesh with 48 batches
[00:58:11 AM] Info: Finalized mesh with 48 batches
[00:58:11 AM] Info: Finalized mesh with 48 batches
[00:58:11 AM] Info: Finalized mesh with 48 batches
[00:58:11 AM] Info: Finalized mesh with 48 batches
[00:58:11 AM] Info: Finalized mesh with 48 batches
[00:58:11 AM] Info: Finalized mesh with 48 batches
[00:58:11 AM] Info: Finalized mesh with 48 batches
[00:58:11 AM] Info: Finalized mesh with 48 batches
[00:58:11 AM] Info: Finalized mesh with 48 batches
[00:58:12 AM] Info: Finalized mesh with 48 batches
[00:58:12 AM] Info: Finalized mesh with 48 batches
[00:58:12 AM] Info: Finalized mesh with 48 batches
[00:58:12 AM] Info: Finalized mesh with 48 batches
[00:58:14 AM] Info: Finalized mesh with 48 batches
[00:58:14 AM] Info: Finalized mesh with 48 batches
[00:58:14 AM] Info: Finalized mesh with 48 batches
[00:58:14 AM] Info: Finalized mesh with 48 batches
[00:58:14 AM] Info: Finalized mesh with 48 batches
[00:58:14 AM] Info: Finalized mesh with 48 batches
[00:58:14 AM] Info: Finalized mesh with 48 batches
[00:58:14 AM] Info: Finalized mesh with 48 batches
[00:58:14 AM] Info: Finalized mesh with 48 batches
[00:58:14 AM] Info: Finalized mesh with 48 batches
[00:58:14 AM] Info: Finalized mesh with 48 batches
[00:58:14 AM] Info: Finalized mesh with 48 batches
[00:58:14 AM] Info: Finalized mesh with 48 batches
[00:58:14 AM] Info: Finalized mesh with 48 batches
[00:58:14 AM] Info: Finalized mesh with 48 batches
[00:58:14 AM] Info: Finalized mesh with 48 batches
[00:58:14 AM] Info: Finalized mesh with 48 batches
[00:58:14 AM] Info: Finalized mesh with 48 batches
[00:58:14 AM] Info: Finalized mesh with 48 batches
[00:58:14 AM] Info: Finalized mesh with 48 batches
[00:58:14 AM] Info: Finalized mesh with 48 batches
[00:58:14 AM] Info: Finalized mesh with 48 batches
[00:58:14 AM] Info: Finalized mesh with 48 batches
[00:58:14 AM] Info: Finalized mesh with 48 batches
[00:58:15 AM] Info: Finalized mesh with 48 batches
[00:58:29 AM] Info: Finalized mesh with 48 batches
[00:58:29 AM] Info: Finalized mesh with 48 batches
[00:58:29 AM] Info: Finalized mesh with 48 batches
[00:58:29 AM] Info: Finalized mesh with 48 batches
[00:58:29 AM] Info: Finalized mesh with 48 batches
[00:58:29 AM] Info: Finalized mesh with 48 batches
[00:58:29 AM] Info: Finalized mesh with 48 batches
[00:58:30 AM] Info: Finalized mesh with 48 batches
[00:58:30 AM] Info: Finalized mesh with 48 batches
[00:58:30 AM] Info: Finalized mesh with 48 batches
[00:58:30 AM] Info: Finalized mesh with 48 batches
[00:58:30 AM] Info: Finalized mesh with 48 batches
[00:58:30 AM] Info: Finalized mesh with 48 batches
[00:58:30 AM] Info: Finalized mesh with 48 batches
[00:58:30 AM] Info: Finalized mesh with 48 batches
[00:58:30 AM] Info: Finalized mesh with 48 batches
[00:58:30 AM] Info: Finalized mesh with 48 batches
[00:58:30 AM] Info: Finalized mesh with 48 batches
[00:58:30 AM] Info: Finalized mesh with 48 batches
[00:58:30 AM] Info: Finalized mesh with 48 batches
[00:58:30 AM] Info: Finalized mesh with 48 batches
[00:58:30 AM] Info: Finalized mesh with 48 batches
[00:58:30 AM] Info: Finalized mesh with 48 batches
[00:58:30 AM] Info: Finalized mesh with 48 batches
[00:58:30 AM] Info: Finalized mesh with 48 batches
[00:58:30 AM] Info: Finalized mesh with 48 batches
[00:58:30 AM] Info: Finalized mesh with 48 batches
[00:58:30 AM] Info: Finalized mesh with 48 batches
[00:58:30 AM] Info: Finalized mesh with 48 batches
[00:58:30 AM] Info: Finalized mesh with 48 batches
[00:58:34 AM] Info: Finalized mesh with 48 batches
[00:58:34 AM] Info: Finalized mesh with 48 batches
[00:58:34 AM] Info: Finalized mesh with 48 batches
[00:58:34 AM] Info: Finalized mesh with 48 batches
[00:58:34 AM] Info: Finalized mesh with 48 batches
[00:58:34 AM] Info: Finalized mesh with 48 batches
[00:58:34 AM] Info: Finalized mesh with 48 batches
[00:58:34 AM] Info: Finalized mesh with 48 batches
[00:58:34 AM] Info: Finalized mesh with 48 batches
[00:58:34 AM] Info: Finalized mesh with 48 batches
[00:58:34 AM] Info: Finalized mesh with 48 batches
[00:58:34 AM] Info: Finalized mesh with 48 batches
[00:58:34 AM] Info: Finalized mesh with 48 batches
[00:58:34 AM] Info: Finalized mesh with 48 batches
[00:58:35 AM] Info: Finalized mesh with 48 batches

View file

@ -165,7 +165,7 @@ void Renderer3D::End()
r3d_state->active = false; r3d_state->active = false;
} }
void Renderer3D::DrawMesh(StaticMesh& mesh, const Mat4& m, bool bind_shader, uint (*func_highlight)(const RenderBatch3D&)) void Renderer3D::DrawMesh(StaticMesh& mesh, const Mat4& m, bool bind_shader, uint(*func_highlight)(const RenderBatch3D&), const Mat4& modelview)
{ {
glBindVertexArray(mesh.m_gl_vao_id); glBindVertexArray(mesh.m_gl_vao_id);
@ -181,6 +181,7 @@ void Renderer3D::DrawMesh(StaticMesh& mesh, const Mat4& m, bool bind_shader, uin
if (bind_shader) if (bind_shader)
r3d_state->shader->Bind(); r3d_state->shader->Bind();
r3d_state->shader->SetUniform("u_mvp", m); r3d_state->shader->SetUniform("u_mvp", m);
r3d_state->shader->SetUniform("u_mv", modelview);
r3d_state->shader->SetUniform("u_campos", r3d_state->v->position); r3d_state->shader->SetUniform("u_campos", r3d_state->v->position);
r3d_state->shader->SetUniform("u_camdir", r3d_state->v->forward); r3d_state->shader->SetUniform("u_camdir", r3d_state->v->forward);
r3d_state->shader->SetUniform("u_time", r3d_state->time); r3d_state->shader->SetUniform("u_time", r3d_state->time);
@ -285,7 +286,7 @@ void Renderer3D::DrawMesh(StaticMesh& mesh, const Mat4& m, bool bind_shader, uin
void Renderer3D::DrawMesh(StaticMesh& mesh, Transform& m, bool bind_shader, uint (*func_highlight)(const RenderBatch3D&)) void Renderer3D::DrawMesh(StaticMesh& mesh, Transform& m, bool bind_shader, uint (*func_highlight)(const RenderBatch3D&))
{ {
DrawMesh(mesh, m.GetProjectedTransformationMatrix(*r3d_state->v, *r3d_state->p), bind_shader, func_highlight); DrawMesh(mesh, m.GetProjectedTransformationMatrix(*r3d_state->v, *r3d_state->p), bind_shader, func_highlight, m.GetTransformationMatrix());
} }
void Renderer3D::DrawBillboard(const Texture& texture, const Vec3& position, Vec2 size, bool both_axes, float yaw) void Renderer3D::DrawBillboard(const Texture& texture, const Vec3& position, Vec2 size, bool both_axes, float yaw)

View file

@ -3,13 +3,11 @@
#include <vector> #include <vector>
#include "KP3D_Common.h" #include "KP3D_Common.h"
#include "KP3D_Math.h"
namespace kp3d { namespace kp3d {
class Camera; class Camera;
class Vec2;
class Vec3;
class Mat4;
class Transform; class Transform;
class StaticMesh; class StaticMesh;
class Texture; class Texture;
@ -23,7 +21,7 @@ public:
static void Begin(const Camera& v, const Mat4& p); static void Begin(const Camera& v, const Mat4& p);
static void End(); static void End();
static void DrawMesh(StaticMesh& mesh, const Mat4& m, bool bind_shader = true, uint (*func_highlight)(const RenderBatch3D&) = nullptr); static void DrawMesh(StaticMesh& mesh, const Mat4& m, bool bind_shader = true, uint (*func_highlight)(const RenderBatch3D&) = nullptr, const Mat4& modelview = Mat4());
static void DrawMesh(StaticMesh& mesh, Transform& m, bool bind_shader = true, uint (*func_highlight)(const RenderBatch3D&) = nullptr); static void DrawMesh(StaticMesh& mesh, Transform& m, bool bind_shader = true, uint (*func_highlight)(const RenderBatch3D&) = nullptr);
static void DrawBillboard(const Texture& texture, const Vec3& position, Vec2 size, bool both_axes = false, float yaw = 90.0f); static void DrawBillboard(const Texture& texture, const Vec3& position, Vec2 size, bool both_axes = false, float yaw = 90.0f);
static void DrawSmartBillboard( static void DrawSmartBillboard(

View file

@ -30,7 +30,7 @@ void LoadMaterials()
std::string filename = std::filesystem::proximate(path_str, kp3d::sys::GetTextureDir() + "materials/").string(); std::string filename = std::filesystem::proximate(path_str, kp3d::sys::GetTextureDir() + "materials/").string();
std::replace(filename.begin(), filename.end(), '\\', '/'); std::replace(filename.begin(), filename.end(), '\\', '/');
if (kp3d::str::EndsWith(path_str, "_n.png")) if (kp3d::str::EndsWith(path_str, "_n.png") || kp3d::str::EndsWith(path_str, "_n.jpg"))
continue; continue;
KP3D_LOG_INFO("Loading material resource: {}", filename); KP3D_LOG_INFO("Loading material resource: {}", filename);