A bit better code for sss_filter

This commit is contained in:
korenkonder
2023-12-25 04:07:21 +03:00
parent ab8cd5cf13
commit 1013eb9d52
+27 -47
View File
@@ -1447,49 +1447,41 @@ static void draw_pass_sss_contour(rndr::Render* rend) {
0.0f, 0.0f, 1.0f, 1.0f, 1.0f, 1.0f, 1.0f);
}
static void draw_pass_sss_filter_calc_coef(double_t a1, size_t a2, double_t a3, size_t a4,
const double_t* a5, const double_t* a6, const double_t* a7, const double_t* a8, vec4 params[64]) {
if (a2 > 8)
static void draw_pass_sss_filter_calc_coef(double_t step, int32_t size, double_t a3, int32_t iterations,
const double_t* a5, const double_t* a6, const double_t* a7, const double_t* a8, vec4 a9[64]) {
if (size > 8)
return;
for (size_t i = a4; i; i--) {
float_t* v20 = (float_t*)params;
for (int32_t i = 0; i < iterations; i++) {
const double_t v18 = a5[i];
double_t v56[3];
v56[0] = *a6;
v56[1] = *a7;
v56[2] = *a8;
v56[0] = a6[i];
v56[1] = a7[i];
v56[2] = a8[i];
for (size_t j = 0; j < 3; j++) {
for (int32_t j = 0; j < 3; j++) {
double_t v22 = 0.0;
double_t v23 = 0.0;
double_t v54[8];
double_t v24 = 1.0 / (a3 * v56[j]);
v24 *= v24;
for (size_t k = 0; k < a2; k++) {
double_t v25 = exp(-0.5 * (v23 * v23) * v24);
for (int32_t k = 0; k < size; k++) {
double_t v25 = exp(-0.5 * (v24 * v23) * (v24 * v23));
v54[k] = v25;
v23 += a1;
v23 += step;
v22 += v25;
}
double_t v27 = 1.0 / v22;
for (size_t k = 0; k < a2; k++)
for (int32_t k = 0; k < size; k++)
v54[k] *= v27;
float_t* v35 = v20;
for (size_t k = 0; k < a2; k++) {
double_t v37 = v54[k] * *a5;
for (size_t v36 = 0; v36 < a2; v36++) {
*v35 += (float_t)(v37 * v54[v36]);
float_t* v35 = (float_t*)a9 + j;
for (int32_t k = 0; k < size; k++)
for (size_t l = 0; l < size; l++) {
*v35 = (float_t)(v54[k] * v18 * v54[l] + *v35);
v35 += 4;
}
}
v20++;
}
a5++;
a6++;
a7++;
a8++;
}
}
@@ -1511,39 +1503,27 @@ static void draw_pass_sss_filter(sss_data* sss) {
&& rob_chara_array_check_visibility(rob_chara_smth, i)) {
mat4* mat = rob_chara_bone_data_get_mats_mat(rob_bone_data, 0);
if (mat) {
mat4_get_translation(mat, &chara_position[i]);
mat4 temp;
mat4_transpose(mat, &temp);
mat4_get_translation(&temp, &chara_position[i]);
chara_distance[i] = vec3::distance(view_point, chara_position[i]);
}
}
}
vec3 closest_chara_position;
if (chara_distance[0] > chara_distance[1]) {
closest_chara_position = chara_position[1];
chara_position[0] = chara_position[1];
}
else
closest_chara_position = chara_position[0];
vec3 closest_chara_position = chara_distance[0] <= chara_distance[1]
? chara_position[0] : chara_position[1];
float_t length = vec3::distance(interest, closest_chara_position);
if (length > 1.25f)
interest = chara_position[0];
float_t v29 = vec3::distance(view_point, interest);
if (v29 < 0.25f)
v29 = 0.25f;
float_t v31 = tanf(camera_data->fov * 0.5f * DEG_TO_RAD_FLOAT) * 5.0f;
if (v31 < 0.25f)
v31 = 0.25f;
float_t v32 = v31 * v29;
float_t v29 = max_def(vec3::distance(view_point, interest), 0.25f);
float_t v31 = max_def(tanf(camera_data->fov * 0.5f * DEG_TO_RAD_FLOAT) * 5.0f, 0.25f);
float_t v33 = 0.6f;
float_t v34 = 1.0f / clamp_def(v32, 0.25f, 100.0f);
if (v34 < 0.145f) {
float_t v36 = v34 - 0.02f;
if (v34 < 0.0f)
v36 = 0.0f;
v33 = (v36 * 8.0f) * 0.6f;
}
float_t v34 = (float_t)(1.0 / clamp_def(v31 * v29, 0.25f, 100.0f));
if (v34 < 0.145f)
v33 = max_def(v34 - 0.02f, 0.0f) * 8.0f * 0.6f;
rctx->obj_batch.g_sss_param = { v33, 0.0f, 0.0f, 0.0f };
gl_state_active_texture(0);