Glass Eye: Found meaning of some variables

This commit is contained in:
korenkonder
2024-07-13 00:56:05 +03:00
parent f13a20be69
commit 10f83624a8
+56 -67
View File
@@ -1163,32 +1163,26 @@ static const uniform_name TRANSPARENCY_uniform[] = {
};
struct glass_eye_struct {
vec4 field_0;
vec4 field_10;
float_t field_20;
float_t field_24;
float_t field_28;
float_t field_2C;
vec3 field_30;
vec3 field_3C;
vec3 field_48;
float_t field_54;
vec3 field_58;
float_t field_64;
vec3 field_68;
vec3 field_74;
vec3 field_80;
float_t field_8C;
vec3 field_90;
const vec4 tex_model_param;
const vec4 eb_tex_model_param;
const float_t n_1;
const float_t n_2;
const float_t scale_const;
const float_t trsmit_coef_const;
const vec3 ellipsoid_radius_const;
const vec3 iris_radius_const;
const vec3 pupil_radius_const;
const float_t lens_depth_const;
const vec3 eb_radius_const;
float_t trsmit_coef;
vec3 ellipsoid_radius;
vec3 iris_radius;
vec3 pupil_radius;
float_t lens_depth;
vec3 eb_radius;
uint32_t frame;
vec4 field_A0;
bool field_B0;
bool field_B1;
bool field_B2;
bool field_B3;
int32_t field_B4;
int32_t field_B8;
int32_t field_BC;
vec4 tex_offset;
bool eye_twitch;
};
#define shader_table_struct(n) \
@@ -1376,13 +1370,7 @@ static glass_eye_struct glass_eye = {
{ 0.0f, 0.0f, 0.0f },
0,
{ 0.0f, 0.0f, 0.0f, 0.0f },
0,
0,
0,
0,
0,
0,
0,
false,
};
int32_t shader_ft_get_index_by_name(const char* name) {
@@ -1392,15 +1380,16 @@ int32_t shader_ft_get_index_by_name(const char* name) {
}
static void glass_eye_calc(glass_eye_struct* glass_eye) {
float_t v2 = glass_eye->field_28;
glass_eye->field_64 = glass_eye->field_2C / v2;
glass_eye->field_90 = glass_eye->field_58;
glass_eye->field_68 = glass_eye->field_30 * v2;
glass_eye->field_74 = glass_eye->field_3C * v2;
glass_eye->field_80 = glass_eye->field_48 * v2;
glass_eye->field_8C = glass_eye->field_54 * v2;
if (!glass_eye->field_B0) {
glass_eye->field_A0 = 0.0f;
const float_t scale_const = glass_eye->scale_const;
glass_eye->trsmit_coef = glass_eye->trsmit_coef_const / scale_const;
glass_eye->eb_radius = glass_eye->eb_radius_const;
glass_eye->ellipsoid_radius = glass_eye->ellipsoid_radius_const * scale_const;
glass_eye->iris_radius = glass_eye->iris_radius_const * scale_const;
glass_eye->pupil_radius = glass_eye->pupil_radius_const * scale_const;
glass_eye->lens_depth = glass_eye->lens_depth_const * scale_const;
if (!glass_eye->eye_twitch) {
glass_eye->tex_offset = 0.0f;
return;
}
@@ -1413,68 +1402,68 @@ static void glass_eye_calc(glass_eye_struct* glass_eye) {
glass_eye->frame = frame;
if (frame == (frame / 90) * 90) {
float_t(FASTCALL * rand_state_array_get_float)(int32_t index) = (float_t(FASTCALL*)(int32_t index))0x00000001404FFE60;
glass_eye->field_A0.x = (rand_state_array_get_float(0) - 0.5f) * 0.015f;
glass_eye->field_A0.y = (rand_state_array_get_float(0) - 0.5f) * 0.015f;
glass_eye->tex_offset.x = (rand_state_array_get_float(0) - 0.5f) * 0.015f;
glass_eye->tex_offset.y = (rand_state_array_get_float(0) - 0.5f) * 0.015f;
}
float_t v17 = (float_t)(uint8_t)frame * (float_t)(M_PI * (1.0 / 128.0));
float_t v19 = sinf(sinf(v17 * 27.0f) + v17 * 2.0f);
float_t v20 = sinf(v17 * 23.0f);
glass_eye->field_A0.z = (v19 + v20) * 0.5f * 0.01f;
glass_eye->field_A0.w = 0.0f;
float_t phase = (float_t)(uint8_t)frame * (float_t)(M_PI * (1.0 / 128.0));
float_t main_wobble = sinf(sinf(phase * 27.0f) + phase * 2.0f);
float_t secondary_wobble = sinf(phase * 23.0f);
glass_eye->tex_offset.z = (main_wobble + secondary_wobble) * 0.5f * 0.01f;
glass_eye->tex_offset.w = 0.0f;
}
static void glass_eye_set(glass_eye_struct* glass_eye) {
glass_eye_batch_shader_data glass_eye_batch = {};
vec4 temp;
*(vec3*)&temp = glass_eye->field_68 * glass_eye->field_68;
*(vec3*)&temp = glass_eye->ellipsoid_radius * glass_eye->ellipsoid_radius;
temp.w = temp.z;
*(vec3*)&temp = vec3::rcp(*(vec3*)&temp);
glass_eye_batch.g_ellipsoid_radius = temp;
*(vec3*)&temp = glass_eye->field_68;
*(vec3*)&temp = glass_eye->ellipsoid_radius;
temp.w = 1.0f;
glass_eye_batch.g_ellipsoid_scale = temp;
glass_eye_batch.g_tex_model_param = glass_eye->field_0;
glass_eye_batch.g_tex_offset = glass_eye->field_A0;
glass_eye_batch.g_tex_model_param = glass_eye->tex_model_param;
glass_eye_batch.g_tex_offset = glass_eye->tex_offset;
*(vec3*)&temp = glass_eye->field_90 * glass_eye->field_90;
*(vec3*)&temp = glass_eye->eb_radius * glass_eye->eb_radius;
temp.w = temp.z;
*(vec3*)&temp = vec3::rcp(*(vec3*)&temp);
glass_eye_batch.g_eb_radius = temp;
glass_eye_batch.g_eb_tex_model_param = glass_eye->field_10;
glass_eye_batch.g_eb_tex_model_param = glass_eye->eb_tex_model_param;
float_t v2 = (glass_eye->field_20 - glass_eye->field_24) / (glass_eye->field_20 + glass_eye->field_24);
v2 *= v2;
glass_eye_batch.g_fresnel = { 1.0f - v2, v2, 0.0f, 0.0f };
float_t r_0 = (glass_eye->n_1 - glass_eye->n_2) / (glass_eye->n_1 + glass_eye->n_2);
r_0 *= r_0;
glass_eye_batch.g_fresnel = { 1.0f - r_0, r_0, 0.0f, 0.0f };
float_t v3 = (glass_eye->field_20 * glass_eye->field_20) / (glass_eye->field_24 * glass_eye->field_24);
glass_eye_batch.g_refract1 = { v3, 1.0f - v3, glass_eye->field_20 / glass_eye->field_24, 0.0f };
float_t v3 = (glass_eye->n_1 * glass_eye->n_1) / (glass_eye->n_2 * glass_eye->n_2);
glass_eye_batch.g_refract1 = { v3, 1.0f - v3, glass_eye->n_1 / glass_eye->n_2, 0.0f };
float_t v4 = (glass_eye->field_24 * glass_eye->field_24) / (glass_eye->field_20 * glass_eye->field_20);
glass_eye_batch.g_refract2 = { v4, 1.0f - v4, glass_eye->field_24 / glass_eye->field_20, 0.0f };
float_t v4 = (glass_eye->n_2 * glass_eye->n_2) / (glass_eye->n_1 * glass_eye->n_1);
glass_eye_batch.g_refract2 = { v4, 1.0f - v4, glass_eye->n_2 / glass_eye->n_1, 0.0f };
*(vec3*)&temp = glass_eye->field_74 * glass_eye->field_74;
*(vec3*)&temp = glass_eye->iris_radius * glass_eye->iris_radius;
temp.w = -1.0f;
*(vec3*)&temp = vec3::rcp(*(vec3*)&temp);
glass_eye_batch.g_iris_radius = temp;
*(vec3*)&temp = glass_eye->field_68 * glass_eye->field_68;
*(vec3*)&temp = glass_eye->ellipsoid_radius * glass_eye->ellipsoid_radius;
temp.w = -1.0f;
*(vec3*)&temp = vec3::rcp(*(vec3*)&temp);
glass_eye_batch.g_cornea_radius = temp;
*(vec3*)&temp = glass_eye->field_80 * glass_eye->field_80;
*(vec3*)&temp = glass_eye->pupil_radius * glass_eye->pupil_radius;
temp.w = -1.0f;
*(vec3*)&temp = vec3::rcp(*(vec3*)&temp);
glass_eye_batch.g_pupil_radius = temp;
*(vec2*)&temp = *(vec2*)&glass_eye->field_0 * *(vec2*)&glass_eye->field_74;
temp.z = glass_eye->field_64 * 1.442695f;
temp.w = glass_eye->field_8C;
*(vec2*)&temp = *(vec2*)&glass_eye->tex_model_param * *(vec2*)&glass_eye->iris_radius;
temp.z = glass_eye->trsmit_coef * 1.442695f;
temp.w = glass_eye->lens_depth;
*(vec2*)&temp = vec2::rcp(*(vec2*)&temp);
glass_eye_batch.g_tex_scale = temp;