Moved ambient light applying to the vertex shaders, tiny code cleanups

This commit is contained in:
Andrey2470T 2024-04-13 13:19:32 +03:00
parent 4a351df32b
commit 1aa03addec
13 changed files with 25 additions and 20 deletions

@ -9,7 +9,6 @@ uniform float fogShadingParameter;
uniform highp vec3 cameraOffset;
uniform float animationTimer;
uniform vec3 ambientLight;
#ifdef ENABLE_DYNAMIC_SHADOWS
// shadow texture
uniform sampler2D ShadowMapSampler;
@ -378,7 +377,7 @@ void main(void)
color = base.rgb;
vec4 col = vec4(color.rgb * min(varColor.rgb + ambientLight, 1.0), 1.0);
vec4 col = vec4(color.rgb * varColor.rgb, 1.0);
#ifdef ENABLE_DYNAMIC_SHADOWS
if (f_shadow_strength > 0.0) {

@ -6,6 +6,8 @@ uniform vec3 dayLight;
uniform highp vec3 cameraOffset;
uniform float animationTimer;
uniform vec3 ambientLight;
varying vec3 vNormal;
varying vec3 vPosition;
// World position in the visible world (i.e. relative to the cameraOffset.)
@ -220,6 +222,8 @@ void main(void)
color.b += max(0.0, 0.021 - abs(0.2 * brightness - 0.021) +
0.07 * brightness);
color.rgb += ambientLight;
varColor = clamp(color, 0.0, 1.0);
#ifdef ENABLE_DYNAMIC_SHADOWS

@ -9,7 +9,6 @@ uniform float fogShadingParameter;
uniform highp vec3 cameraOffset;
uniform float animationTimer;
uniform vec3 ambientLight;
#ifdef ENABLE_DYNAMIC_SHADOWS
// shadow texture
uniform sampler2D ShadowMapSampler;
@ -381,7 +380,7 @@ void main(void)
color = base.rgb;
vec4 col = vec4(color.rgb * min(varColor.rgb + ambientLight, 1.0), 1.0);
vec4 col = vec4(color.rgb * varColor.rgb, 1.0);
col.rgb *= vIDiff;
#ifdef ENABLE_DYNAMIC_SHADOWS

@ -2,6 +2,7 @@ uniform mat4 mWorld;
uniform vec3 dayLight;
uniform float animationTimer;
uniform lowp vec4 emissiveColor;
uniform vec3 ambientLight;
varying vec3 vNormal;
varying vec3 vPosition;
@ -129,6 +130,8 @@ void main(void)
color.b += max(0.0, 0.021 - abs(0.2 * brightness - 0.021) +
0.07 * brightness);
color.rgb += ambientLight;
varColor = clamp(color, 0.0, 1.0);

@ -8395,9 +8395,10 @@ child will follow movement and rotation of that bone.
* `set_lighting(light_definition)`: sets lighting for the player
* Passing no arguments resets lighting to its default values.
* `light_definition` is a table with the following optional fields:
* `ambient_light` is a ColorSpec controlling lightness & color of ambient light; alpha is ignored (always set to 255)
(global lighting; default: `{a = 255, r = 0, g = 0, b = 0}` / last set value).
* It works only if 'enable_shaders' is set to true.
* `ambient_light` is a ColorSpec controlling color of global ambient light;
(default: `{a = 255, r = 0, g = 0, b = 0}` / last set value).
* It works only if shaders are enabled.
* Alpha is ignored (it is always set to 255).
* `saturation` sets the saturation (vividness; default: `1.0`).
* values > 1 increase the saturation
* values in [0,1] decrease the saturation

@ -149,6 +149,7 @@ class ClientEnvironment : public Environment
void updateFrameTime(bool is_paused);
u64 getFrameTime() const { return m_frame_time; }
u64 getFrameTimeDelta() const { return m_frame_dtime; }
private:
ClientMap *m_map;
LocalPlayer *m_local_player = nullptr;

@ -21,7 +21,6 @@ with this program; if not, write to the Free Software Foundation, Inc.,
#include "nodedef.h"
#include <IMeshManipulator.h>
#include "client/localplayer.h"
struct MeshMakeData;
struct MeshCollector;

@ -382,7 +382,7 @@ class GameGlobalShaderConstantSetter : public IShaderConstantSetter
CachedPixelShaderSetting<float>
m_animation_timer_delta_pixel{"animationTimerDelta"};
CachedPixelShaderSetting<float, 3> m_day_light{"dayLight"};
CachedPixelShaderSetting<float, 3> m_ambient_light{"ambientLight"};
CachedVertexShaderSetting<float, 3> m_ambient_light{"ambientLight"};
CachedPixelShaderSetting<float, 3> m_minimap_yaw{"yawVec"};
CachedPixelShaderSetting<float, 3> m_camera_offset_pixel{"cameraOffset"};
CachedVertexShaderSetting<float, 3> m_camera_offset_vertex{"cameraOffset"};
@ -527,6 +527,7 @@ class GameGlobalShaderConstantSetter : public IShaderConstantSetter
m_bloom_radius_pixel.set(&m_bloom_radius, services);
m_bloom_strength_pixel.set(&m_bloom_strength, services);
}
float saturation = lighting.saturation;
m_saturation_pixel.set(&saturation, services);
@ -569,6 +570,7 @@ class GameGlobalShaderConstantSetter : public IShaderConstantSetter
float moon_brightness = 0.f;
m_moon_brightness_pixel.set(&moon_brightness, services);
}
float volumetric_light_strength = lighting.volumetric_light_strength;
m_volumetric_light_strength_pixel.set(&volumetric_light_strength, services);
}

@ -300,7 +300,7 @@ void final_color_blend(video::SColor *result,
void final_color_blend(video::SColor *result,
const video::SColor &data, const video::SColorf &dayLight,
const video::SColor &ambientLight)
video::SColor ambientLight)
{
static const video::SColorf artificialColor(1.04f, 1.04f, 1.04f);
@ -813,7 +813,8 @@ MapBlockMesh::~MapBlockMesh()
delete block;
}
bool MapBlockMesh::animate(bool faraway, float time, int crack, u32 daynight_ratio)
bool MapBlockMesh::animate(bool faraway, float time, int crack,
u32 daynight_ratio)
{
if (!m_has_animation) {
m_animation_force_timer = 100000;
@ -884,7 +885,8 @@ bool MapBlockMesh::animate(bool faraway, float time, int crack, u32 daynight_rat
getMeshBuffer(daynight_diff.first.second);
video::S3DVertex *vertices = (video::S3DVertex *)buf->getVertices();
for (const auto &j : daynight_diff.second)
final_color_blend(&(vertices[j.first].Color), j.second, day_color);
final_color_blend(&(vertices[j.first].Color), j.second,
day_color);
}
m_last_daynight_ratio = daynight_ratio;
}
@ -958,10 +960,8 @@ video::SColor encode_light(u16 light, u8 emissive_light)
// Get components
u32 day = (light & 0xff);
u32 night = (light >> 8);
// Add emissive light
night += emissive_light * 2.5f;
if (night > 255)
night = 255;
// Since we don't know if the day light is sunlight or

@ -329,7 +329,7 @@ void final_color_blend(video::SColor *result,
*/
void final_color_blend(video::SColor *result,
const video::SColor &data, const video::SColorf &dayLight,
const video::SColor &ambientLight=video::SColor(255,0,0,0));
video::SColor ambientLight=video::SColor(255,0,0,0));
// Retrieves the TileSpec of a face of a node
// Adds MATERIAL_FLAG_CRACK if the node is cracked

@ -186,11 +186,11 @@ video::SColor Particle::updateLight(ClientEnvironment *env)
else
light = blend_light(env->getDayNightRatio(), LIGHT_SUN, 0);
u8 m_light = decode_light(light + m_p.glow);
light += m_p.glow;
video::SColor light_color{0xFFFFFFFF};
final_color_blend(&light_color, m_light, env->getDayNightRatio(),
final_color_blend(&light_color, u16(light), env->getDayNightRatio(),
env->getLocalPlayer()->getLighting().ambient_light);
return video::SColor(255,
light_color.getRed() * m_base_color.getRed() / 255,

@ -47,7 +47,6 @@ with this program; if not, write to the Free Software Foundation, Inc.,
#include "skyparams.h"
#include "particles.h"
#include <memory>
#include "client/clientmap.h"
void Client::handleCommand_Deprecated(NetworkPacket* pkt)
{

@ -19,7 +19,6 @@ with this program; if not, write to the Free Software Foundation, Inc.,
#include "lua_api/l_object.h"
#include <cmath>
#include "common/c_types.h"
#include "lua_api/l_internal.h"
#include "lua_api/l_inventory.h"
#include "lua_api/l_item.h"
@ -36,7 +35,6 @@ with this program; if not, write to the Free Software Foundation, Inc.,
#include "server/player_sao.h"
#include "server/serverinventorymgr.h"
#include "server/unit_sao.h"
#include "light.h"
/*
ObjectRef