Bump engine submodule and switch to mat3 orientations.

This commit is contained in:
Roz K 2022-12-26 14:14:33 +01:00
parent c4309ef7c7
commit 108976bdff
Signed by: roz
GPG Key ID: 51FBF4E483E1C822
4 changed files with 20 additions and 22 deletions

2
engine

@ -1 +1 @@
Subproject commit cdfce62c909cfeb50a7dec261c47331a5573e44e
Subproject commit 6b33f8285cd37f9aca381c3800d21a26435b7cfb

View File

@ -115,7 +115,7 @@ def main():
model.spawn(terrain_batch, vec3(float(((mx - 128) * 8) + 4), float(((127 - my) * 8) + 4), 0.0))
class TestsParams(Structure):
_fields_ = ('translation', vec3), ('orientation', vec3)
_fields_ = ('translation', vec3), ('orientation', mat3)
tests_texture = archive.get_texture('tests')
tests_sampler = resolve_input(tests_shader, b'u_texture_sampler')
@ -124,13 +124,15 @@ def main():
cube_model = archive.get_model('cube')
clouds_model = archive.get_model('clouds')
tests_batch = Batch(tests_vertices, 3,
params_format(PARAM_FORMAT_VEC3_FLOAT, PARAM_FORMAT_VEC3_INT10 | PARAM_FORMAT_NORMALIZE), TestsParams)
params_format(PARAM_FORMAT_VEC3_FLOAT, PARAM_FORMAT_MAT3_INT10 | PARAM_FORMAT_NORMALIZE), TestsParams)
blob_spawn_translation = vec3(-100.0, -500.0, 0.0)
cube_spawn_translation = vec3(100.0, -500.0, 0.0)
blob_forward = math.vec3_normalize((sun_direction[0], sun_direction[1], 0.0))
blob_right = math.vec3_cross(blob_forward, math.vec3_up)
blob_id = blob_model.spawn(tests_batch,
TestsParams(blob_spawn_translation, vec3(*math.vec3_normalize((sun_direction[0], sun_direction[1], 0.0)))))
cube_id = cube_model.spawn(tests_batch, TestsParams(cube_spawn_translation, vec3_forward))
clouds_id = clouds_model.spawn(tests_batch, TestsParams(vec3(0.0, 0.0, 32.0), vec3_forward))
TestsParams(blob_spawn_translation, mat3(vec3(*blob_right), vec3(*blob_forward), vec3_up)))
cube_id = cube_model.spawn(tests_batch, TestsParams(cube_spawn_translation, mat3_identity))
clouds_id = clouds_model.spawn(tests_batch, TestsParams(vec3(0.0, 0.0, 32.0), mat3_identity))
sea_phase = resolve_input(sky_shader, b'u_sea_phase')
sea_polar_textures = sea.load_polar_textures(('data/sea_bump1.png', 'data/sea_bump2.png'))
@ -177,8 +179,8 @@ def main():
mat3_rotation(rotation, vec3_up, (current_time * 0.21) % tau)
mat3_mul_vec3(blob_translation, rotation, blob_spawn_translation)
mat3_mul_vec3(cube_translation, rotation, cube_spawn_translation)
vec3_rotate(cube_orientation, vec3_forward, vec3_up, (current_time * 0.43) % tau)
vec3_rotate(clouds_orientation, vec3_forward, vec3_up, (current_time * -0.037) % tau)
mat3_rotation(cube_orientation, vec3_up, (current_time * 0.43) % tau)
mat3_rotation(clouds_orientation, vec3_up, (current_time * -0.037) % tau)
camera.set_view(camera_origin, camera_lookat, vec3_up, (current_time * 0.05) % tau)
environment.from_sun(camera.view, sun_direction, sun_power)
@ -277,13 +279,13 @@ def main():
# for x in range(10000)
# current_time = 0
# Draw * 9999 : min = 0.2 , max = 2.31 , avg = 0.27 ms
# Draw * 9999 : min = 0.2 , max = 2.41 , avg = 0.27 ms
# Draw * 9999 : min = 0.2 , max = 2.73 , avg = 0.27 ms
# Draw * 9999 : min = 0.21 , max = 1.8 , avg = 0.27 ms
# Draw * 9999 : min = 0.2 , max = 2.03 , avg = 0.27 ms
# Draw * 9999 : min = 0.2 , max = 1.75 , avg = 0.27 ms
# Frame * 9999 : min = 0.26 , max = 2.44 , avg = 0.38 ms
# Frame * 9999 : min = 0.26 , max = 2.54 , avg = 0.37 ms
# Frame * 9999 : min = 0.26 , max = 2.90 , avg = 0.38 ms
# Frame * 9999 : min = 0.26 , max = 1.94 , avg = 0.37 ms
# Frame * 9999 : min = 0.26 , max = 2.21 , avg = 0.36 ms
# Frame * 9999 : min = 0.26 , max = 1.89 , avg = 0.37 ms
print("Quitting...")
del tests_batch

View File

@ -35,7 +35,6 @@ const vec2 c_terrain_scale = vec2(1.0 / 2048.0, -1.0 / 2048.0);
const vec2 c_terrain_shift = vec2(0.5, 0.5);
const float c_weight_scale = 1.0 / 64.f;
const vec3 c_world_forward = vec3(0.0, 1.0, 0.0);
const vec3 c_world_up = vec3(0.0, 0.0, 1.0);
out vec4 v_position; // view space
out vec4 v_normal; // view space
@ -48,7 +47,7 @@ void main(void) {
world_position.z += texture(u_height_sampler, terrain_coords).r;
vec4 view_position = u_view * world_position;
vec3 terrain_normal = normalize(c_normal_shift + texture(u_normal_sampler, terrain_coords).rgb * c_normal_scale);
vec3 world_normal = mat3(cross(c_world_forward, terrain_normal), c_world_forward, terrain_normal) * normalize(a_normal);
vec3 world_normal = mat3(cross(c_world_forward, terrain_normal), c_world_forward, terrain_normal) * a_normal;
v_position = view_position;
v_normal = u_view * vec4(world_normal, 0.0);
v_terrain_normal = vec4((u_view * vec4(terrain_normal, 0.0)).xyz, 1.0);

View File

@ -21,7 +21,7 @@ layout(location = 1) in vec3 a_normal; // model space
layout(location = 2) in vec3 a_texcoord; // texture space
layout(location = 3) in vec3 i_translation; // per mesh, model space -> world space
layout(location = 4) in vec3 i_orientation; // per mesh, model space -> world space
layout(location = 4) in mat3 i_orientation; // per mesh, model space -> world space
uniform mat4 u_view; // world space -> view space
uniform mat4 u_projection; // view space -> screen space
@ -36,7 +36,6 @@ const vec2 c_terrain_scale = vec2(1.0 / 2048.0, -1.0 / 2048.0);
const vec2 c_terrain_shift = vec2(0.5, 0.5);
const float c_weight_scale = 1.0 / 64.f;
const vec3 c_world_forward = vec3(0.0, 1.0, 0.0);
const vec3 c_world_up = vec3(0.0, 0.0, 1.0);
out vec4 v_position; // view space
out vec4 v_normal; // view space
@ -44,11 +43,9 @@ out vec4 v_terrain_normal; // view space (x, y, z, weigth)
out vec4 v_texcoord; // texture space (s, t, pixel_level, material_level)
void main(void) {
vec3 orientation = normalize(i_orientation);
mat3 rotation = mat3(cross(orientation, c_world_up), orientation, c_world_up);
vec4 world_position = vec4(i_translation + rotation * a_position, 1.0);
vec4 world_position = vec4(i_translation + i_orientation * a_position, 1.0);
float weight = max(0.0, 1.0 - world_position.z * c_weight_scale);
vec3 world_normal = rotation * normalize(a_normal);
vec3 world_normal = i_orientation * a_normal;
vec2 terrain_coords = c_terrain_shift + world_position.xy * c_terrain_scale;
world_position.z += texture(u_height_sampler, terrain_coords).r;
vec4 view_position = u_view * world_position;