From 32fb46ce908ef16ea827be1f8e499de6e4dda3e4 Mon Sep 17 00:00:00 2001 From: ManDude <7569514+ManDude@users.noreply.github.com> Date: Mon, 10 Jan 2022 19:58:16 +0000 Subject: [PATCH] Revert "simplify shader" This reverts commit 97bd9b77bec2b61ba66360f499ab6d16489e5513. --- .../opengl_renderer/shaders/sprite_3d.vert | 32 ++++++++++++++++--- 1 file changed, 27 insertions(+), 5 deletions(-) diff --git a/game/graphics/opengl_renderer/shaders/sprite_3d.vert b/game/graphics/opengl_renderer/shaders/sprite_3d.vert index 60f6f78b4d..c027b29840 100644 --- a/game/graphics/opengl_renderer/shaders/sprite_3d.vert +++ b/game/graphics/opengl_renderer/shaders/sprite_3d.vert @@ -53,12 +53,12 @@ vec4 sprite_transform2(vec4 root, vec4 off, mat4 cam, mat3 sprite_rot, float sx, vec3 offset = sprite_rot[0] * off.x * sx + sprite_rot[1] * off.y + sprite_rot[2] * off.z * sy; pos.xyz += offset.xyz; - vec4 transformed_pos = -matrix_transform(cam, pos); + vec4 transformed_pos = matrix_transform(cam, pos); float Q = pfog0 / transformed_pos.w; transformed_pos.xyz *= Q; vec4 offset_pos = transformed_pos + hvdf_off; - // offset_pos.w = max(offset_pos.w, fog_max); - // offset_pos.w = min(offset_pos.w, fog_min); + offset_pos.w = max(offset_pos.w, fog_max); + offset_pos.w = min(offset_pos.w, fog_min); return offset_pos; } @@ -80,19 +80,41 @@ void main() { vec4 transformed_pos_vf02 = matrix_transform(camera, xyz_sx); vec4 scales_vf01 = xyz_sx; // now used for something else. + vec4 fog_consts_vf12 = vec4(fog_min, fog_max, max_scale, bonus); scales_vf01.z = sy; // start building the scale vector float Q = pfog0 / transformed_pos_vf02.w; // quat.z *= deg_to_rad; - scales_vf01.zw *= Q; // sy sx + scales_vf01.z *= Q; // sy + scales_vf01.w *= Q; // sx - transformed_pos_vf02.xyz *= Q; + transformed_pos_vf02.x *= Q; + transformed_pos_vf02.y *= Q; + transformed_pos_vf02.z *= Q; scales_vf01.x = scales_vf01.z; // = sy + + vec4 offset_pos_vf10 = transformed_pos_vf02 + hvdf_offset; + scales_vf01.x *= scales_vf01.w; // x = sx * sy + + offset_pos_vf10.w = max(offset_pos_vf10.w, fog_max); + + scales_vf01.z = max(scales_vf01.z, min_scale); + scales_vf01.w = max(scales_vf01.w, min_scale); + scales_vf01.x *= inv_area; // x = sx * sy * inv_area (area ratio) + + offset_pos_vf10.w = min(offset_pos_vf10.w, fog_min); + + scales_vf01.z = min(scales_vf01.z, fog_consts_vf12.z); + scales_vf01.w = min(scales_vf01.w, fog_consts_vf12.z); + scales_vf01.x = min(scales_vf01.x, 1.0); + + transformed_pos_vf02.w = offset_pos_vf10.w - fog_consts_vf12.y; + fragment_color.w *= scales_vf01.x; // is this right? doesn't this stall?? mat3 rot = sprite_quat_to_rot(quat.x, quat.y, quat.z);