diff --git a/src/CRE/light_param/light.cpp b/src/CRE/light_param/light.cpp index 60481a9b..5c402319 100644 --- a/src/CRE/light_param/light.cpp +++ b/src/CRE/light_param/light.cpp @@ -321,7 +321,7 @@ void light_set::data_set(render_data_context& rend_data_ctx, face& face, light_s get_irradiance(irradiance_r_transforms, irradiance_g_transforms, irradiance_b_transforms); float_t v27 = face.get_offset(); - float_t v28 = (float_t)(1.0 - exp(v27 * -0.44999999)) * 2.0f; + float_t v28 = (1.0f - expf(v27 * -0.45f)) * 2.0f; v27 = max_def(v27, 0.0f); vec4 light_face_diff = { v28 * 0.1f, v27 * 0.06f, 1.0f, 1.0f }; diff --git a/src/CRE/render_context.cpp b/src/CRE/render_context.cpp index e592ac27..5fd484de 100644 --- a/src/CRE/render_context.cpp +++ b/src/CRE/render_context.cpp @@ -767,6 +767,12 @@ void render_data_context::set_glitter_render_data_state() { state.bind_uniform_buffer_base(1, data.buffer_scene); } +void render_data_context::set_npr(rndr::RenderManager* render_manager) { + shader_flags.arr[U_NPR] = 0; + if (render_manager->npr_param == 1) + shader_flags.arr[U_NPR] = 1; +} + void render_data_context::set_render_data_state() { data.set_state(state); } diff --git a/src/CRE/render_context.hpp b/src/CRE/render_context.hpp index a3368cf1..61e5e233 100644 --- a/src/CRE/render_context.hpp +++ b/src/CRE/render_context.hpp @@ -468,6 +468,7 @@ struct render_data_context { void set_batch_texcoord_transforms(const mat4 mats[2]); void set_batch_worlds(const mat4& mat); void set_glitter_render_data_state(); + void set_npr(rndr::RenderManager* render_manager); void set_render_data_state(); void set_scene_fog_params(const render_data_context::fog_params& value); void set_scene_framebuffer_size(const int32_t width, const int32_t height, diff --git a/src/CRE/render_manager.cpp b/src/CRE/render_manager.cpp index 08500e63..5b238bca 100644 --- a/src/CRE/render_manager.cpp +++ b/src/CRE/render_manager.cpp @@ -613,6 +613,7 @@ namespace rndr { } draw_pass_sss_filter(rend_data_ctx, rctx, sss); + rend_data_ctx.set_npr(this); reflect_draw = false; rend_data_ctx.state.end_event(); } @@ -699,6 +700,7 @@ namespace rndr { } draw_pass_sss_filter(rend_data_ctx, rctx, sss); + rend_data_ctx.set_npr(this); rend_data_ctx.state.bind_framebuffer(0); rend_data_ctx.state.end_event(); } @@ -1006,6 +1008,8 @@ namespace rndr { rctx->sss_data->set_texture(rend_data_ctx.state, 1); + rend_data_ctx.set_npr(this); + rend_data_ctx.state.bind_sampler(14, rctx->render_samplers[0]); rend_data_ctx.state.bind_sampler(15, rctx->render_samplers[0]); rend_data_ctx.state.bind_sampler(16, rctx->render_samplers[0]);