Fake contrast

Fake contrast is a feature of the original vanilla Doom engine, which consists of making walls oriented parallel to the east-west axis darker, while walls parallel to the north-south axis are brighter. The aim of fake contrast is to help accentuate the angles in the map's geometry, because with the simple lighting system of the Doom engine (ambient omnidirectional light, no shadows) and the low-resolution paletted textures, the angles could seem flat in rooms.

The system, however, is not perfect. It only works for orthogonal geometry, even though getting free of the orthogonality constraint present in older raycaster engines (such as Wolfenstein 3D) was one of the main points of the Doom engine. The relatively steep difference detracts from it as well, and has even been perceived as a bug.

While Heretic and Strife retain this feature, Hexen disables it entirely. Amongst source ports, Doomsday, the Eternity Engine, and ZDoom feature options to completely disable fake contrast or to make it gradually change with wall orientation. In the renderer of Strife: Veteran Edition, when lightmaps are enabled, walls will be assigned continuously variable fake contrast lighting values computed via their dot product with the level's global sunlight vector. Otherwise, it emulates the behavior of the software renderer.

Technical details
In vanilla, it corresponds to a part of the functions and  in r_segs.c, specifically code segments like this: // Calculate light table. // Use different light tables //  for horizontal / vertical / diagonal. Diagonal? // OPTIMIZE: get rid of LIGHTSEGSHIFT globally curline = ds->curline; frontsector = curline->frontsector; backsector = curline->backsector; texnum = texturetranslation[curline->sidedef->midtexture]; lightnum = (frontsector->lightlevel >> LIGHTSEGSHIFT)+extralight;

if (curline->v1->y == curline->v2->y) lightnum--; else if (curline->v1->x == curline->v2->x) lightnum++;

if (lightnum < 0) walllights = scalelight[0]; else if (lightnum >= LIGHTLEVELS) walllights = scalelight[LIGHTLEVELS-1]; else walllights = scalelight[lightnum]; The vanilla engine has 16 light levels corresponding to the 256 light values, so increasing or decreasing lightnum as done here corresponds to increasing or decreasing the effective sector light for the wall by 16. A perfectly "vertical" wall is brightened, while a perfectly "horizontal" one is darkened; every other wall uses the light level of the front sector.

Previous implementations
The idea for fake contrast predates Doom and extends back to the earliest id Software first-person shooters. In, a simple flat-shaded raycasting engine, walls in alternate directions are shaded a darker or lighter shade to create contrast. In its texture-mapped successors, and Wolfenstein 3D, this is accomplished using texture themes with matching lighter and darker versions of textures that can be assigned to the different faces of each cell.