Glass Eye: Found more stuff

This commit is contained in:
korenkonder
2024-07-14 00:03:53 +03:00
parent 4952f649e1
commit 9e31d2f079
5 changed files with 41 additions and 49 deletions
+4 -4
View File
@@ -404,10 +404,10 @@ void light_set::data_set(face& face, light_set_id id) {
obj_scene.set_g_irradiance_g_transforms(irradiance_g_transforms);
obj_scene.set_g_irradiance_b_transforms(irradiance_b_transforms);
float_t offset = face.get_offset();
float_t v28 = (float_t)(1.0 - exp(offset * -0.44999999)) * 2.0f;
offset = max_def(offset, 0.0f);
obj_scene.g_light_face_diff = { v28 * 0.1f, offset * 0.06f, 1.0f, 1.0f };
float_t v27 = face.get_offset();
float_t v28 = 1.0f - expf(v27 * -0.45f) * 2.0f;
v27 = max_def(v27, 0.0f);
obj_scene.g_light_face_diff = { v28 * 0.1f, v27 * 0.06f, 1.0f, 1.0f };
if (lights[LIGHT_CHARA_COLOR].get_type() == LIGHT_PARALLEL) {
lights[LIGHT_CHARA_COLOR].get_ambient(obj_scene.g_chara_color_rim);
+1 -1
View File
@@ -220,7 +220,7 @@ void obj_shader_shader_data::set_shader_flags(int32_t* shader_flags) {
g_shader_flags.y.m.fog_chara = shader_flags[U_FOG_CHARA];
g_shader_flags.y.m.u16 = shader_flags[U16];
g_shader_flags.y.m.gauss = shader_flags[U_GAUSS];
g_shader_flags.y.m.eyeball = shader_flags[U_EYEBALL];
g_shader_flags.y.m.eye_lens = shader_flags[U_EYE_LENS];
g_shader_flags.y.m.image_filter = shader_flags[U_IMAGE_FILTER];
g_shader_flags.y.m.instance = shader_flags[U_INSTANCE];
g_shader_flags.y.m.tone_curve = shader_flags[U_TONE_CURVE];
+6 -6
View File
@@ -136,16 +136,16 @@ struct glass_eye_batch_shader_data {
vec4 g_ellipsoid_radius;
vec4 g_ellipsoid_scale;
vec4 g_tex_model_param;
vec4 g_tex_offset;
vec4 g_tex_offset; //xy=tex_offset, zw=highlight_tex_offset
vec4 g_eb_radius;
vec4 g_eb_tex_model_param;
vec4 g_fresnel;
vec4 g_refract1;
vec4 g_refract2;
vec4 g_fresnel; //x=1-((n_1-n_2)/(n_2-n_1))^2, y=((n_1-n_2)/(n_2-n_1))^2, zw=unused
vec4 g_refract1; //x=(n_1/n_2)^2, y=1-(n_1/n_2)^2, z=n_1/n_2, w=unused
vec4 g_refract2; //x=(n_2/n_1)^2, y=1-(n_2/n_1)^2, z=n_2/n_1, w=unused
vec4 g_iris_radius;
vec4 g_cornea_radius;
vec4 g_pupil_radius;
vec4 g_tex_scale;
vec4 g_tex_scale; //xy=tex_scale, z=trsmit_coef, w=lens_depth
};
struct glitter_batch_shader_data {
@@ -188,7 +188,7 @@ struct obj_shader_shader_data {
uint32_t fog_chara : 2; // bit 32+2:3
uint32_t u16 : 1; // bit 32+4
uint32_t gauss : 2; // bit 32+5:6
uint32_t eyeball : 1; // bit 32+7
uint32_t eye_lens : 1; // bit 32+7
uint32_t image_filter : 3; // bit 32+8:10
uint32_t instance : 1; // bit 32+11
uint32_t tone_curve : 1; // bit 32+12
+29 -37
View File
@@ -1169,13 +1169,13 @@ struct glass_eye_struct {
const float_t n_2;
const float_t scale_const;
const float_t trsmit_coef_const;
const vec3 ellipsoid_radius_const;
const vec3 cornea_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 cornea_radius;
vec3 iris_radius;
vec3 pupil_radius;
float_t lens_depth;
@@ -1389,7 +1389,7 @@ static void glass_eye_calc(glass_eye_struct* glass_eye) {
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->cornea_radius = glass_eye->cornea_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;
@@ -1419,23 +1419,19 @@ static void glass_eye_calc(glass_eye_struct* glass_eye) {
static void glass_eye_set(glass_eye_struct* glass_eye) {
glass_eye_batch_shader_data glass_eye_batch = {};
vec4 temp;
*(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 ellipsoid_radius = glass_eye->cornea_radius * glass_eye->cornea_radius;
*(vec3*)&glass_eye_batch.g_ellipsoid_radius = vec3::rcp(ellipsoid_radius);
glass_eye_batch.g_ellipsoid_radius.w = ellipsoid_radius.z;
*(vec3*)&temp = glass_eye->ellipsoid_radius;
temp.w = 1.0f;
glass_eye_batch.g_ellipsoid_scale = temp;
*(vec3*)&glass_eye_batch.g_ellipsoid_scale = glass_eye->cornea_radius;
glass_eye_batch.g_ellipsoid_scale.w = 1.0f;
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->eb_radius * glass_eye->eb_radius;
temp.w = temp.z;
*(vec3*)&temp = vec3::rcp(*(vec3*)&temp);
glass_eye_batch.g_eb_radius = temp;
vec3 eb_radius = glass_eye->eb_radius * glass_eye->eb_radius;
*(vec3*)&glass_eye_batch.g_eb_radius = vec3::rcp(eb_radius);
glass_eye_batch.g_eb_radius.w = eb_radius.z;
glass_eye_batch.g_eb_tex_model_param = glass_eye->eb_tex_model_param;
@@ -1443,32 +1439,28 @@ static void glass_eye_set(glass_eye_struct* glass_eye) {
r_0 *= r_0;
glass_eye_batch.g_fresnel = { 1.0f - r_0, r_0, 0.0f, 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 n12 = (glass_eye->n_1 * glass_eye->n_1) / (glass_eye->n_2 * glass_eye->n_2);
glass_eye_batch.g_refract1 = { n12, 1.0f - n12, glass_eye->n_1 / glass_eye->n_2, 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 };
float_t n21 = (glass_eye->n_2 * glass_eye->n_2) / (glass_eye->n_1 * glass_eye->n_1);
glass_eye_batch.g_refract2 = { n21, 1.0f - n21, glass_eye->n_2 / glass_eye->n_1, 0.0f };
*(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*)&glass_eye_batch.g_iris_radius
= vec3::rcp(glass_eye->iris_radius * glass_eye->iris_radius);
glass_eye_batch.g_iris_radius.w = -1.0f;
*(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*)&glass_eye_batch.g_cornea_radius
= vec3::rcp(glass_eye->cornea_radius * glass_eye->cornea_radius);
glass_eye_batch.g_cornea_radius.w = -1.0f;
*(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;
*(vec3*)&glass_eye_batch.g_pupil_radius
= vec3::rcp(glass_eye->pupil_radius * glass_eye->pupil_radius);
glass_eye_batch.g_pupil_radius.w = -1.0f;
*(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;
*(vec2*)&glass_eye_batch.g_tex_scale
= vec2::rcp(*(vec2*)&glass_eye->tex_model_param * *(vec2*)&glass_eye->iris_radius);
glass_eye_batch.g_tex_scale.z = glass_eye->trsmit_coef * 1.442695f;
glass_eye_batch.g_tex_scale.w = glass_eye->lens_depth;
extern render_context* rctx_ptr;
rctx_ptr->glass_eye_batch_ubo.WriteMemory(glass_eye_batch);
@@ -1490,7 +1482,7 @@ static void shader_bind_hair(shader_set_data* set, shader* shad) {
}
static void shader_bind_glass_eye(shader_set_data* set, shader* shad) {
uniform_value[U_EYEBALL] = 0;
uniform_value[U_EYE_LENS] = 0;
if (set->shaders[SHADER_FT_GLASEYE].bind(set, SHADER_FT_SUB_GLASS_EYE) >= 0) {
glass_eye_calc(&glass_eye);
glass_eye_set(&glass_eye);
+1 -1
View File
@@ -52,7 +52,7 @@ enum uniform_name {
U_FOG_CHARA,
U16,
U_GAUSS,
U_EYEBALL,
U_EYE_LENS,
U_IMAGE_FILTER,
U_INSTANCE,
U_TONE_CURVE,