Skip to content

Commit

Permalink
add fake light for model contrast
Browse files Browse the repository at this point in the history
  • Loading branch information
RicardoLuis0 authored and dpjudas committed Jan 20, 2025
1 parent fb0df2a commit 53187ec
Show file tree
Hide file tree
Showing 7 changed files with 17 additions and 7 deletions.
4 changes: 3 additions & 1 deletion src/common/rendering/hwrenderer/data/hw_cvars.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -178,4 +178,6 @@ CUSTOM_CVAR(Int, gl_spritelight, -1, CVAR_GLOBALCONFIG | CVAR_ARCHIVE)
int get_gl_spritelight()
{
return gl_spritelight < 0 ? (screen->IsRayQueryEnabled() ? 1 : 0) : gl_spritelight;
}
}

CVAR(Bool, gl_fakemodellight, true, CVAR_GLOBALCONFIG | CVAR_ARCHIVE)
4 changes: 3 additions & 1 deletion src/common/rendering/hwrenderer/data/hw_cvars.h
Original file line number Diff line number Diff line change
Expand Up @@ -63,4 +63,6 @@ EXTERN_CVAR(Bool, gl_strict_gldefs)
EXTERN_CVAR(Int, gl_wireframe)
EXTERN_CVAR(Color, gl_wireframecolor)

int get_gl_spritelight();
int get_gl_spritelight();

EXTERN_CVAR(Bool, gl_fakemodellight)
2 changes: 1 addition & 1 deletion src/rendering/hwrenderer/hw_dynlightdata.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -176,7 +176,7 @@ void AddSunLightToList(FDynLightData& dld, float x, float y, float z, const FVec
info.r = suncolor.X;
info.g = suncolor.Y;
info.b = suncolor.Z;
info.flags = LIGHTINFO_ATTENUATED | (doTrace ? LIGHTINFO_TRACE : 0) | LIGHTINFO_SUN;
info.flags = LIGHTINFO_ATTENUATED | (doTrace ? (LIGHTINFO_TRACE | LIGHTINFO_SUN) : 0);
info.strength = 1500.0f;

dld.arrays[LIGHTARRAY_NORMAL].Push(info);
Expand Down
2 changes: 1 addition & 1 deletion src/rendering/hwrenderer/scene/hw_drawinfo.h
Original file line number Diff line number Diff line change
Expand Up @@ -316,7 +316,7 @@ struct HWDrawInfo
void GetDynSpriteLight(AActor *self, sun_trace_cache_t * traceCache, double x, double y, double z, FLightNode *node, int portalgroup, float *out, bool fullbright);
void GetDynSpriteLight(AActor *thing, particle_t *particle, sun_trace_cache_t * traceCache, float *out);

void GetDynSpriteLightList(AActor *self, FDynLightData &modellightdata);
void GetDynSpriteLightList(AActor *self, FDynLightData &modellightdata, bool isModel);

void PreparePlayerSprites(sector_t * viewsector, area_t in_area, FRenderState& state);
void PrepareTargeterSprites(double ticfrac, FRenderState& state);
Expand Down
8 changes: 7 additions & 1 deletion src/rendering/hwrenderer/scene/hw_spritelight.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -258,7 +258,7 @@ void HWDrawInfo::GetDynSpriteLight(AActor *thing, particle_t *particle, sun_trac
}


void HWDrawInfo::GetDynSpriteLightList(AActor *self, FDynLightData &modellightdata)
void HWDrawInfo::GetDynSpriteLightList(AActor *self, FDynLightData &modellightdata, bool isModel)
{
modellightdata.Clear();

Expand All @@ -282,6 +282,12 @@ void HWDrawInfo::GetDynSpriteLightList(AActor *self, FDynLightData &modellightda

int gl_spritelight = get_gl_spritelight();

if(isModel && gl_fakemodellight)
{
//fake light for contrast
AddSunLightToList(modellightdata, x, y, z, FVector3(self->Level->SunDirection.X + 180, 45, 0), self->Level->SunColor * self->Level->SunIntensity * 0.05, false);
}

if ((level.lightmaps && gl_spritelight > 0) || ActorTraceStaticLight::TraceSunVisibility(x, y, z, (self ? &self->StaticLightsTraceCache : nullptr), (self ? staticLight.ActorMoved : false)))
{
AddSunLightToList(modellightdata, x, y, z, self->Level->SunDirection, self->Level->SunColor * self->Level->SunIntensity, gl_spritelight > 0);
Expand Down
2 changes: 1 addition & 1 deletion src/rendering/hwrenderer/scene/hw_sprites.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -654,7 +654,7 @@ inline void HWSprite::PutSprite(HWDrawInfo *di, FRenderState& state, bool transl
// That's a lot of checks...
if ((get_gl_spritelight() > 0 || (modelframe && !modelframe->isVoxel && !(modelframeflags & MDL_NOPERPIXELLIGHTING))) && RenderStyle.BlendOp != STYLEOP_Shadow && gl_light_sprites && di->Level->HasDynamicLights && !di->isFullbrightScene() && !fullbright)
{
di->GetDynSpriteLightList(actor, lightdata);
di->GetDynSpriteLightList(actor, lightdata, modelframe && !modelframe->isVoxel);
dynlightindex = state.UploadLights(lightdata);
}
else
Expand Down
2 changes: 1 addition & 1 deletion src/rendering/hwrenderer/scene/hw_weapon.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -844,7 +844,7 @@ void HWDrawInfo::PreparePlayerSprites3D(sector_t * viewsector, area_t in_area, F
// set the lighting parameters
if (hudsprite.RenderStyle.BlendOp != STYLEOP_Shadow && Level->HasDynamicLights && !isFullbrightScene() && gl_light_sprites)
{
GetDynSpriteLightList(playermo, lightdata);
GetDynSpriteLightList(playermo, lightdata, true);
hudsprite.lightindex = state.UploadLights(lightdata);
}

Expand Down

0 comments on commit 53187ec

Please sign in to comment.