Skip to content

Commit

Permalink
renderer2: fogs scale (depth for opaque)
Browse files Browse the repository at this point in the history
  • Loading branch information
rafal1137 committed May 15, 2024
1 parent 47b1f97 commit 941d806
Show file tree
Hide file tree
Showing 4 changed files with 30 additions and 48 deletions.
5 changes: 3 additions & 2 deletions src/renderer2/tr_backend.c
Original file line number Diff line number Diff line change
Expand Up @@ -2407,23 +2407,24 @@ void RB_RenderGlobalFog()

Ren_LogComment("--- RB_RenderGlobalFog ---\n");

// this fogGlobal is disabled?
// all fogging is disabled?
if (r_noFog->integer)
{
return;
}

// no fog pass in snooper
if ((tr.refdef.rdflags & RDF_SNOOPERVIEW))
{
return;
}

// no world means no fog
if (backEnd.refdef.rdflags & RDF_NOWORLDMODEL)
{
return;
}

// a globalfog must exist
if (!tr.world || tr.world->globalFog < 0)
{
return;
Expand Down
9 changes: 5 additions & 4 deletions src/renderer2/tr_bsp.c
Original file line number Diff line number Diff line change
Expand Up @@ -4666,7 +4666,7 @@ static void R_LoadFogs(lump_t *l, lump_t *brushesLump, lump_t *sidesLump)
out->color[3] = 1.0;
out->density = shader->fogParms.density;
d = shader->fogParms.depthForOpaque < 1.0f ? 1.0f : shader->fogParms.depthForOpaque;
out->depthForOpaque = d; // shader->fogParms.depthForOpaque; // < 1.0f ? 1.0f : shader->fogParms.depthForOpaque;
out->depthForOpaque = shader->fogParms.depthForOpaque; // < 1.0f ? 1.0f : shader->fogParms.depthForOpaque;
out->tcScale = rcp(d); // rcp(shader->fogParms.depthForOpaque);

// global fog sets clearcolor/zfar
Expand Down Expand Up @@ -8719,6 +8719,7 @@ void RE_LoadWorldMap(const char *name)
RE_SetFog(FOG_WATER, 0, 0, 0, 0, 0, 0);
RE_SetFog(FOG_SERVER, 0, 0, 0, 0, 0, 0);

// yet another fog
VectorCopy(colorMdGrey, tr.fogColor);
tr.fogDensity = 0;

Expand Down Expand Up @@ -8826,11 +8827,11 @@ void RE_LoadWorldMap(const char *name)
tr.world->hasSkyboxPortal = qfalse;

// reset fog to map fog (if present)
//if (tr.world->globalFog < 0)
//{
if (tr.world->globalFog < 0)
{
// if there is no globalfog
RE_SetFog(FOG_CMD_SWITCHFOG, FOG_MAP, 50, 0, 0, 0, 0);
//}
}

// make sure the VBO glState entries are save
R_BindNullVBO();
Expand Down
49 changes: 13 additions & 36 deletions src/renderer2/tr_fog.c
Original file line number Diff line number Diff line change
Expand Up @@ -60,8 +60,9 @@
* density is density, and is used to derive the values of 'mode', 'drawsky', and 'clearscreen'
* }
*
* note: If the map loads: skyfogvars, waterfogvars, fogvars are set from materials.
* note: If the map loads:
* Global fog is loaded as one of the bsp lumps.
* skyfogvars, waterfogvars & fogvars are set from materials.
* skyfogvars = FOG_SKY.
* waterfogvars = FOG_WATER.
* fogvars = FOG_MAP.
Expand Down Expand Up @@ -171,33 +172,29 @@ void RE_SetGlobalFog(qboolean restore, int duration, float r, float g, float b,

}
else {
tr.world->fogs[tr.world->globalFog].color[0] = tr.world->globalOriginalFog[0]; // * tr.identityLight;
tr.world->fogs[tr.world->globalFog].color[1] = tr.world->globalOriginalFog[1]; // * tr.identityLight;
tr.world->fogs[tr.world->globalFog].color[2] = tr.world->globalOriginalFog[2]; // * tr.identityLight;
tr.world->fogs[tr.world->globalFog].color[0] = tr.world->globalOriginalFog[0];
tr.world->fogs[tr.world->globalFog].color[1] = tr.world->globalOriginalFog[1];
tr.world->fogs[tr.world->globalFog].color[2] = tr.world->globalOriginalFog[2];
tr.world->fogs[tr.world->globalFog].color[3] = 1.0;
tr.world->fogs[tr.world->globalFog].depthForOpaque = tr.world->globalOriginalFog[3];
tr.world->fogs[tr.world->globalFog].tcScale = rcp(tr.world->globalOriginalFog[3]);
//tr.viewParms.zFar = tr.world->fogs[tr.world->globalFog].depthForOpaque;
}

//tr.glfogsettings[FOG_CURRENT].drawsky = qtrue; // tr_sky needs this..
}
else
{
if (duration > 0) {

if (duration > 0)
{
//TODO
}
else {
tr.world->fogs[tr.world->globalFog].color[0] = r; // * tr.identityLight;
tr.world->fogs[tr.world->globalFog].color[1] = g; // * tr.identityLight;
tr.world->fogs[tr.world->globalFog].color[2] = b; // * tr.identityLight;
tr.world->fogs[tr.world->globalFog].color[0] = r;
tr.world->fogs[tr.world->globalFog].color[1] = g;
tr.world->fogs[tr.world->globalFog].color[2] = b;
tr.world->fogs[tr.world->globalFog].color[3] = 1.0;
//tr.world->fogs[tr.world->globalFog].density = depthForOpaque < 1.0f ? depthForOpaque : 1.0f;
tr.world->fogs[tr.world->globalFog].depthForOpaque = depthForOpaque < 1.0f ? 1.0f : depthForOpaque;
tr.world->fogs[tr.world->globalFog].tcScale = rcp(tr.world->fogs[tr.world->globalFog].depthForOpaque);
//tr.world->fogs[tr.world->globalFog].tcScale = rcp(depthForOpaque);
//tr.world->fogs[tr.world->globalFog].tcScale *= 2.0f;


Vector4Set(tr.glfogsettings[FOG_TARGET].color, r, g, b, 1.0);
tr.glfogsettings[FOG_TARGET].end = tr.world->fogs[tr.world->globalFog].depthForOpaque;
tr.glfogsettings[FOG_TARGET].density = tr.world->fogs[tr.world->globalFog].density;
Expand All @@ -206,15 +203,6 @@ void RE_SetGlobalFog(qboolean restore, int duration, float r, float g, float b,
tr.glfogsettings[FOG_TARGET].registered = qtrue;
}
}
/*
// this is clipping when the fog is not at max => you see a "wall", the background color.
float dfo = tr.world->fogs[tr.world->globalFog].depthForOpaque;
if (dfo > 1.f // the fogparms must have a distance supplied (no value <= 1)
&& dfo > tr.viewParms.zNear && dfo < tr.viewParms.zFar) // and the depthForOpaque must be inside the view
{
tr.viewParms.zFar = dfo;
}
*/
}

/**
Expand All @@ -239,7 +227,7 @@ void R_SetFrameFog(void)
}
else
{
/*float*/ lerpPos = (float)(tr.refdef.time - tr.world->globalFogTransStartTime) / (float)fadeTime;
lerpPos = (float)(tr.refdef.time - tr.world->globalFogTransStartTime) / (float)fadeTime;

if (lerpPos > 1)
{
Expand All @@ -250,23 +238,12 @@ void R_SetFrameFog(void)
VectorSubtract(tr.world->globalTransEndFog, tr.world->globalTransStartFog, vec);
VectorMA(vec, lerpPos, tr.world->globalTransStartFog, tr.world->fogs[tr.world->globalFog].color);

/*
tr.world->fogs[tr.world->globalFog].fogParms.depthForOpaque = (tr.world->globalTransEndFog[3] - tr.world->globalTransStartFog[3]) * lerpPos + tr.world->globalTransStartFog[3];
tr.world->fogs[tr.world->globalFog].fogParms.tcScale = rcp(tr.world->fogs[tr.world->globalFog].fogParms.depthForOpaque);
*/
tr.world->fogs[tr.world->globalFog].depthForOpaque = (tr.world->globalTransEndFog[3] - tr.world->globalTransStartFog[3]) * lerpPos + tr.world->globalTransStartFog[3];
tr.world->fogs[tr.world->globalFog].tcScale = rcp(tr.world->fogs[tr.world->globalFog].depthForOpaque);
}
else
{
// transition complete
/*
VectorCopy(tr.world->globalTransEndFog, tr.world->fogs[tr.world->globalFog].color);
tr.world->fogs[tr.world->globalFog].fogParms.depthForOpaque = tr.world->globalTransEndFog[3];
tr.world->fogs[tr.world->globalFog].fogParms.tcScale = rcp(tr.world->globalTransEndFog[3]);
tr.world->globalFogTransEndTime = 0; // stop any transition
*/

VectorCopy(tr.world->globalTransEndFog, tr.world->fogs[tr.world->globalFog].color);
tr.world->fogs[tr.world->globalFog].depthForOpaque = tr.world->globalTransEndFog[3];
tr.world->fogs[tr.world->globalFog].tcScale = rcp(tr.world->globalTransEndFog[3]);
Expand Down
15 changes: 9 additions & 6 deletions src/renderer2/tr_shader.c
Original file line number Diff line number Diff line change
Expand Up @@ -4054,6 +4054,8 @@ static qboolean ParseShader(char *_text)
// fogParms
else if (!Q_stricmp(token, "fogParms"))
{
float d;

if (!ParseVector(text, 3, shader.fogParms.color))
{
return qfalse;
Expand All @@ -4070,9 +4072,10 @@ static qboolean ParseShader(char *_text)
{
shader.fogParms.depthForOpaque = atof(token);
shader.fogParms.density = shader.fogParms.depthForOpaque < 1.0f ? shader.fogParms.depthForOpaque : 1.0f;
shader.fogParms.depthForOpaque = shader.fogParms.depthForOpaque < 1.0f ? 1.0f : shader.fogParms.depthForOpaque;
//shader.fogParms.depthForOpaque = shader.fogParms.depthForOpaque < 1.0f ? 1.0f : shader.fogParms.depthForOpaque;
d = shader.fogParms.depthForOpaque = shader.fogParms.depthForOpaque < 1.0f ? 1.0f : shader.fogParms.depthForOpaque;
}
shader.fogParms.tcScale = 1.0f / shader.fogParms.depthForOpaque;
shader.fogParms.tcScale = 1.0f / d; //shader.fogParms.depthForOpaque;

shader.fogVolume = qtrue;
shader.sort = SS_FOG;
Expand Down Expand Up @@ -4176,9 +4179,6 @@ static qboolean ParseShader(char *_text)
RE_SetFog(FOG_WATER, 0, 5, watercolor[0], watercolor[1], watercolor[2], fogvar);
}

//shader.fogVolume = qtrue;
//shader.sort = SS_FOG;

continue;
}
// ET fogvars
Expand Down Expand Up @@ -4214,9 +4214,12 @@ static qboolean ParseShader(char *_text)
{
fogFar = 5;
}
// store the fog data, and make this fog active
// store the fog data
RE_SetFog(FOG_MAP, 0, fogFar, fogColor[0], fogColor[1], fogColor[2], fogDensity);
RE_SetFog(FOG_CMD_SWITCHFOG, FOG_MAP, 50, 0, 0, 0, 0);
// make this fog active
//RE_SetFog(FOG_CMD_SWITCHFOG, FOG_MAP, 50, 0, 0, 0, 0);

continue;
}
// ET sunshader <name>
Expand Down

0 comments on commit 941d806

Please sign in to comment.