Difference between revisions of "Sprites improperly clipped"

From DoomWiki.org

[checked revision][checked revision]
(fix link to disambiguation page. This seems more appropriate than Levels, but thats just my opinion obviously)
(fix link to disambiguation page -- this time for sure)
Line 3: Line 3:
 
[[Sprite]]s can sometimes be '''improperly clipped''' in the [[Doom engine]]. When an [[actor]] is close to a [[wall]] bordering a higher [[sector]] floor, a portion of the sprite will not be clipped where it overlaps a portion of the floor itself that is not covered on-screen by a [[linedef]].  
 
[[Sprite]]s can sometimes be '''improperly clipped''' in the [[Doom engine]]. When an [[actor]] is close to a [[wall]] bordering a higher [[sector]] floor, a portion of the sprite will not be clipped where it overlaps a portion of the floor itself that is not covered on-screen by a [[linedef]].  
  
The engine uses the [[vertices]] from the [[Basics of the WAD format|map]] for a two-sided linedef to determine whether it should clip a sprite by projecting them into screen space and creating a data structure called a [[drawseg]]. This represents a region of the screen between those vertices where sprites should be subject to clipping by the two-sided linedef. The billboards of sprites are clipped against these drawseg windows, but not against [[visplane]]s. Any part of the sprite's billboard that does not overlap with a drawseg will not be subject to clipping, and since sprites are drawn after floors and ceilings, it will appear on top of the floor that should physically be above it.
+
The engine uses the [[vertices]] from the [[Doom rendering engine#Level structure|map]] for a two-sided linedef to determine whether it should clip a sprite by projecting them into screen space and creating a data structure called a [[drawseg]]. This represents a region of the screen between those vertices where sprites should be subject to clipping by the two-sided linedef. The billboards of sprites are clipped against these drawseg windows, but not against [[visplane]]s. Any part of the sprite's billboard that does not overlap with a drawseg will not be subject to clipping, and since sprites are drawn after floors and ceilings, it will appear on top of the floor that should physically be above it.
  
 
This problem is corrected in most [[source port]]s which render the game using {{wp|OpenGL}} and other hardware rendering solutions, since floors and ceilings there are drawn as polygons which are subject to the same depth testing and clipping as walls. However, some implementations may suffer other, similar issues, particularly on platforms where a {{wp|depth buffer}} is either unavailable or insufficiently fast for use on sprites. Such effects may be observed in the [[PlayStation]] and [[Doom 64]] ports, due to the respective consoles' difficulties in this regard.
 
This problem is corrected in most [[source port]]s which render the game using {{wp|OpenGL}} and other hardware rendering solutions, since floors and ceilings there are drawn as polygons which are subject to the same depth testing and clipping as walls. However, some implementations may suffer other, similar issues, particularly on platforms where a {{wp|depth buffer}} is either unavailable or insufficiently fast for use on sprites. Such effects may be observed in the [[PlayStation]] and [[Doom 64]] ports, due to the respective consoles' difficulties in this regard.

Revision as of 00:30, 15 January 2018

A triangular visplane cuts a part of a tree's sprite in vanilla Doom.
In OpenGL mode, only the part of the sprite that should be behind the floor and the wall is clipped.

Sprites can sometimes be improperly clipped in the Doom engine. When an actor is close to a wall bordering a higher sector floor, a portion of the sprite will not be clipped where it overlaps a portion of the floor itself that is not covered on-screen by a linedef.

The engine uses the vertices from the map for a two-sided linedef to determine whether it should clip a sprite by projecting them into screen space and creating a data structure called a drawseg. This represents a region of the screen between those vertices where sprites should be subject to clipping by the two-sided linedef. The billboards of sprites are clipped against these drawseg windows, but not against visplanes. Any part of the sprite's billboard that does not overlap with a drawseg will not be subject to clipping, and since sprites are drawn after floors and ceilings, it will appear on top of the floor that should physically be above it.

This problem is corrected in most source ports which render the game using OpenGL and other hardware rendering solutions, since floors and ceilings there are drawn as polygons which are subject to the same depth testing and clipping as walls. However, some implementations may suffer other, similar issues, particularly on platforms where a depth buffer is either unavailable or insufficiently fast for use on sprites. Such effects may be observed in the PlayStation and Doom 64 ports, due to the respective consoles' difficulties in this regard.

The Kex 2-derived graphics engine used in Strife: Veteran Edition is capable of deliberately emulating the software behavior of sprite clipping, including the propensity of sprites near walls to show through floors. This is accomplished through use of multiple drawing passes.[1]

References

  1. Sprite clipping explained