Open main menu
Home
Random
Recent changes
Special pages
Community portal
Preferences
About Wikipedia
Disclaimers
Incubator escapee wiki
Search
User menu
Talk
Dark mode
Contributions
Create account
Log in
Editing
Lightmap
Warning:
You are not logged in. Your IP address will be publicly visible if you make any edits. If you
log in
or
create an account
, your edits will be attributed to your username, along with other benefits.
Anti-spam check. Do
not
fill this in!
{{short description|Data structure used in lightmapping}} {{notability|date=February 2016}} [[File:Lightmap Cube Sample.png|thumb|Cube with a simple lightmap (shown on the right).]] A '''lightmap''' is a [[data structure]] used in '''lightmapping''', a form of [[surface caching]] in which the brightness of surfaces in a virtual scene is [[Baking (computer graphics)|pre-calculated and stored]] in [[texture maps]] for later use. Lightmaps are most commonly applied to static objects in applications that use [[Real-time computer graphics|real-time]] [[3D computer graphics]], such as [[video game]]s, in order to provide lighting effects such as [[global illumination]] at a relatively low computational cost. ==History== [[John Carmack]]'s ''[[Quake (video game)|Quake]]'' was the first computer game to use lightmaps to augment [[Scanline rendering|rendering]].<ref>{{Cite web|url=http://www.bluesnews.com/abrash/chap68.shtml|title=Quake's Lighting Model: Surface Caching|last=Abrash|first=Michael|date=|website=Blue's News|archive-url=|archive-date=|accessdate=2015-09-07}}</ref> Before lightmaps were invented, realtime applications relied purely on [[Gouraud shading]] to interpolate vertex lighting for surfaces. This only allowed low frequency lighting information, and could create clipping artifacts close to the camera without perspective-correct interpolation. [[Discontinuity meshing]] was sometimes used especially with [[Radiosity (computer graphics)|radiosity]] solutions to adaptively improve the resolution of vertex lighting information, however the additional cost in primitive setup for realtime rasterization was generally prohibitive. [[Quake (video game)|Quake]]'s software rasterizer used [[surface caching]] to apply lighting calculations in texture space once when polygons initially appear within the [[viewing frustum]] (effectively creating temporary 'lit' versions of the currently visible textures as the viewer negotiated the scene). As consumer 3d graphics hardware capable of [[multitexturing]], light-mapping became more popular, and engines began to combine light-maps in real time as a secondary [[Blend modes#Multiply|multiply-blend]] texture layer. ==Limitations== Lightmaps are composed of [[lumel]]s<ref>{{Cite web|url=http://www.flipcode.com/archives/Light_Mapping_Theory_and_Implementation.shtml|title=flipcode - Light Mapping - Theory and Implementation|last=Channa|first=Keshav|date=July 21, 2003|website=www.flipcode.com|archive-url=|archive-date=|accessdate=2015-09-07}}</ref> (lumination elements), analogous to texels in [[texture mapping]]. Smaller lumels yield a higher [[Image resolution|resolution]] lightmap, providing finer lighting detail at the price of reduced performance and increased memory usage. For example, a lightmap scale of 4 lumels per world unit would give a lower quality than a scale of 16 lumels per world unit. Thus, in using the technique, [[level design]]ers and [[3D artist|3d artists]] often have to make a compromise between performance and quality; if high resolution lightmaps are used too frequently then the application may consume excessive system resources, negatively affecting performance. Lightmap resolution and scaling may also be limited by the amount of disk storage space, bandwidth/download time, or texture memory available to the application. Some implementations attempt to pack multiple lightmaps together in a process known as ''atlasing''<ref>{{Cite web|url=http://http.download.nvidia.com/developer/NVTextureSuite/Atlas_Tools/Texture_Atlas_Whitepaper.pdf|title=Texture Atlasing Whitepaper|last=|first=|date=2004-07-07|website=nvidia.com|publisher=[[NVIDIA]]|archive-url=|archive-date=|accessdate=2015-09-07}}</ref> to help circumvent these limitations. Lightmap resolution and scale are two different things. The resolution is the area, in pixels, available for storing one or more surface's lightmaps. The number of individual surfaces that can fit on a lightmap is determined by the scale. Lower scale values mean higher quality and more space taken on a lightmap. Higher scale values mean lower quality and less space taken. A surface can have a lightmap that has the same area, so a 1:1 ratio, or smaller, so the lightmap is stretched to fit. Lightmaps in games are usually colored texture maps. They are usually flat, without information about the light's direction, whilst some [[game engine]]s use multiple lightmaps to provide approximate directional information to combine with normal-maps. Lightmaps may also store separate precalculated components of lighting information for semi-dynamic lighting with shaders, such as ambient-occlusion & sunlight shadowing. ==Creation== When creating lightmaps, any lighting model may be used, because the lighting is entirely precomputed and real-time performance is not always a necessity. A variety of techniques including [[ambient occlusion]], direct lighting with sampled shadow edges, and full [[Radiosity (computer graphics)|radiosity]]<ref>Jason Mitchell, Gary McTaggart, Chris Green, [https://steamcdn-a.akamaihd.net/apps/valve/2006/SIGGRAPH06_Course_ShadingInValvesSourceEngine.pdf Shading in Valve's Source Engine]. ([[PDF]]) Retrieved Jun. 07, 2019.</ref> bounce light solutions are typically used. Modern 3D packages include specific plugins for applying light-map UV-coordinates, atlas-ing multiple surfaces into single texture sheets, and rendering the maps themselves. Alternatively game engine pipelines may include custom lightmap creation tools. An additional consideration is the use of compressed [[S3 Texture Compression|DXT]] textures which are subject to blocking artifacts β individual surfaces must not collide on 4x4 texel chunks for best results. In all cases, [[soft shadows]] for static geometry are possible if simple occlusion tests (such as basic [[Ray tracing (graphics)|ray-tracing]]) are used to determine which lumels are visible to the light. However, the actual softness of the shadows is determined by how the engine interpolates the lumel data across a surface, and can result in a [[Pixelation|pixelated]] look if the lumels are too large. See [[texture filtering]]. Lightmaps can also be calculated in real-time<ref>November 16, 2003. [http://joshbeam.com/articles/dynamic_lightmaps_in_opengl/ Dynamic Lightmaps in OpenGL]. Joshbeam.com Retrieved Jul. 07, 2014.</ref> for good quality colored lighting effects that are not prone to the defects of Gouraud shading, although shadow creation must still be done using another method such as [[stencil shadow volumes]] or [[shadow mapping]], as real-time ray-tracing is still too slow to perform on modern hardware in most 3D engines. [[Photon mapping]] can be used to calculate global illumination for light maps. ==Alternatives== ===Vertex lighting=== In '''vertex lighting''', lighting information is computed per vertex and stored in [[vertex color attributes]]. The two techniques may be combined, e.g. vertex color values stored for high detail meshes, whilst light maps are only used for coarser geometry. ===Discontinuity mapping=== In '''discontinuity mapping''', the scene may be further [[Subdivision (computer graphics)|subdivided]] and [[Clipping (computer graphics)|clipped]] along major changes in light and dark to better define shadows. ==See also== * [[Baking (computer graphics)]] * [[Environment map]] * [[Screen space ambient occlusion]] * [[Shader]] * [[Texture mapping]] ==References== <references/> [[Category:Video game graphics]] [[Category:Geometric data structures]]
Edit summary
(Briefly describe your changes)
By publishing changes, you agree to the
Terms of Use
, and you irrevocably agree to release your contribution under the
CC BY-SA 4.0 License
and the
GFDL
. You agree that a hyperlink or URL is sufficient attribution under the Creative Commons license.
Cancel
Editing help
(opens in new window)
Pages transcluded onto the current version of this page
(
help
)
:
Template:Cite web
(
edit
)
Template:Notability
(
edit
)
Template:Short description
(
edit
)