Skip to content

Commit

Permalink
Fogs scale (depth for opaque)
Browse files Browse the repository at this point in the history
  • Loading branch information
core-c committed May 15, 2024
1 parent 448d775 commit 7d607fc
Show file tree
Hide file tree
Showing 5 changed files with 28 additions and 54 deletions.
1 change: 0 additions & 1 deletion src/renderer2/glsl/lib/reliefMapping_fp.glsl
Original file line number Diff line number Diff line change
Expand Up @@ -112,7 +112,6 @@ vec3 parallaxAndShadow(sampler2D displaceMap, vec2 texCoords, vec3 viewDir, vec3
weight_1 = 1.0 - weight;
result.xy = prevTexCoords * weight + curTexCoords * weight_1; // finalTexCoords


// self shadowing
shadowFactor = clamp(shadowFactor, 0.0, 1.0);
// early out if self-shadowing is disabled
Expand Down
9 changes: 3 additions & 6 deletions src/renderer2/tr_backend.c
Original file line number Diff line number Diff line change
Expand Up @@ -2495,7 +2495,7 @@ void RB_RenderGlobalFog()

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

// this fogGlobal is disabled?
// all fogging is disabled?
if (r_noFog->integer)
{
return;
Expand All @@ -2507,11 +2507,13 @@ void RB_RenderGlobalFog()
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 All @@ -2537,14 +2539,9 @@ void RB_RenderGlobalFog()
fogDistanceVector[0] = -backEnd.orientation.modelViewMatrix[2];
fogDistanceVector[1] = -backEnd.orientation.modelViewMatrix[6];
fogDistanceVector[2] = -backEnd.orientation.modelViewMatrix[10];
//fogDistanceVector[3] = DotProduct(local, backEnd.viewParms.orientation.axis[0]);
Dot(local, backEnd.viewParms.orientation.axis[0], fogDistanceVector[3]);

// scale the fog vectors based on the fog's thickness
/*fogDistanceVector[0] *= fog->tcScale;
fogDistanceVector[1] *= fog->tcScale;
fogDistanceVector[2] *= fog->tcScale;
fogDistanceVector[3] *= fog->tcScale;*/
Vector4Scale(fogDistanceVector, fog->tcScale, fogDistanceVector);

SetUniformVec4(UNIFORM_FOGDISTANCEVECTOR, fogDistanceVector);
Expand Down
7 changes: 4 additions & 3 deletions src/renderer2/tr_bsp.c
Original file line number Diff line number Diff line change
Expand Up @@ -4652,7 +4652,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 @@ -8695,6 +8695,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 @@ -8802,9 +8803,9 @@ void RE_LoadWorldMap(const char *name)
tr.world->hasSkyboxPortal = qfalse;

// reset fog to map fog (if present)
// if (tr.world->globalFog < 0) { // if there is no globalfog
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
50 changes: 13 additions & 37 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 @@ -163,54 +164,40 @@ void RE_SetGlobalFog(qboolean restore, int duration, float r, float g, float b,
if (restore)
{
if (duration > 0) {

// todo
}
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) {

// 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;
tr.glfogsettings[FOG_TARGET].finishTime = tr.refdef.time;
tr.glfogsettings[FOG_TARGET].mode = GL_LINEAR;
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 @@ -233,8 +220,7 @@ void R_SetFrameFog(void)
lerpPos = 1.f;
}
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)
{
lerpPos = 1;
Expand All @@ -243,22 +229,12 @@ void R_SetFrameFog(void)
vec3_t vec;
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: 8 additions & 7 deletions src/renderer2/tr_shader.c
Original file line number Diff line number Diff line change
Expand Up @@ -4058,6 +4058,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 @@ -4074,9 +4076,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 @@ -4177,9 +4180,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,10 @@ 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 7d607fc

Please sign in to comment.