1196 lines
37 KiB
ReStructuredText
1196 lines
37 KiB
ReStructuredText
=====
|
|
light
|
|
=====
|
|
|
|
light - Caclulate lightmap data for a Quake BSP file
|
|
|
|
Synopsis
|
|
========
|
|
|
|
**light** [OPTION]... BSPFILE
|
|
|
|
Description
|
|
===========
|
|
|
|
**light** reads a Quake .bsp file and calculates light and shadow
|
|
information based on the entity definitions contained in the .bsp. The
|
|
.bsp file is updated with the new light data upon completion,
|
|
overwriting any existing lighting data.
|
|
|
|
Options
|
|
=======
|
|
|
|
.. program:: light
|
|
|
|
Note, any of the Worldspawn Keys listed in the next section can be
|
|
supplied as command-line options, which will override any setting in
|
|
worldspawn.
|
|
|
|
Logging
|
|
-------
|
|
|
|
.. option:: -log
|
|
|
|
Write log files. Enabled by default.
|
|
|
|
.. option:: -nolog
|
|
|
|
Don't write log files.
|
|
|
|
.. option:: -verbose
|
|
-v
|
|
|
|
Verbose output.
|
|
|
|
.. option:: -nopercent
|
|
|
|
Don't output percentage messages.
|
|
|
|
.. option:: -nostat
|
|
|
|
Don't output statistic messages.
|
|
|
|
.. option:: -noprogress
|
|
|
|
Don't output progress messages.
|
|
|
|
.. option:: -nocolor
|
|
|
|
Don't output color codes (for TB, etc).
|
|
|
|
.. option:: -quiet
|
|
-noverbose
|
|
|
|
Suppress non-important messages (equivalent to :option:`-nopercent` :option:`-nostat`
|
|
:option:`-noprogress`)
|
|
|
|
|
|
Game
|
|
----
|
|
|
|
.. option:: -gamedir "relative/path" or "C:/absolute/path"
|
|
|
|
Override the default mod base directory. if this is not set, or if it is relative, it will be derived from
|
|
the input file or the basedir if specified.
|
|
|
|
.. option:: -basedir "relative/path" or "C:/absolute/path"
|
|
|
|
Override the default game base directory. if this is not set, or if it is relative, it will be derived
|
|
from the input file or the gamedir if specified.
|
|
|
|
.. option:: -filepriority archive | loose
|
|
|
|
Which types of archives (folders/loose files or packed archives) are higher priority and chosen first
|
|
for path searching.
|
|
|
|
.. option:: -path "/path/to/folder" <multiple allowed>
|
|
|
|
Additional paths or archives to add to the search path, mostly for loose files.
|
|
|
|
.. option:: -q2rtx
|
|
|
|
Adjust settings to best support Q2RTX.
|
|
|
|
.. option:: -defaultpaths
|
|
|
|
Whether the compiler should attempt to automatically derive game/base paths for
|
|
games that support it. Enabled by default.
|
|
|
|
.. option:: -nodefaultpaths
|
|
|
|
Opt out of :option:`-defaultpaths`.
|
|
|
|
Performance
|
|
-----------
|
|
|
|
.. option:: -lowpriority [0]
|
|
|
|
Run in a lower priority, to free up headroom for other processes.
|
|
|
|
.. option:: -threads n
|
|
|
|
Set number of threads explicitly. By default light will attempt to
|
|
detect the number of CPUs/cores available.
|
|
|
|
.. option:: -extra
|
|
|
|
Calculate extra samples (2x2) and average the results for smoother
|
|
shadows.
|
|
|
|
.. option:: -extra4
|
|
|
|
Calculate even more samples (4x4) and average the results for
|
|
smoother shadows.
|
|
|
|
.. option:: -gate n
|
|
|
|
Set a minimum light level, below which can be considered zero
|
|
brightness. This can dramatically speed up processing when there are
|
|
large numbers of lights with inverse or inverse square falloff. In
|
|
most cases, values less than 1.0 will cause no discernible visual
|
|
differences. Default 0.001.
|
|
|
|
.. option:: -sunsamples [n]
|
|
|
|
Set the number of samples to use for :worldspawn-key:`_sunlight_penumbra` and
|
|
:worldspawn-key:`_sunlight2` (sunlight2 may use more or less because of how the suns
|
|
are set up in a sphere). Default 100.
|
|
|
|
.. option:: -surflight_subdivide [n]
|
|
|
|
Configure spacing of all surface lights. Default 16 units. Value must be between 1
|
|
and 8192. In the future I'd like to make this
|
|
configurable per-surface-light.
|
|
|
|
.. option:: -emissivequality low | high
|
|
|
|
For emissive surfaces (both direct light and bounced light), use a single
|
|
point in the middle of the face (low) or subdivide the face into multiple
|
|
points, which provides anti-aliased results and more shadows, at the cost
|
|
of compile time. When using "high", you can use `surflight_subdivide`
|
|
to control the point spacing for better anti-aliasing. Default is low.
|
|
|
|
Output format options
|
|
---------------------
|
|
|
|
.. option:: -lit
|
|
|
|
Force generation of a .lit file, even if your map does not have any
|
|
coloured lights. By default, light will automatically generate the
|
|
.lit file when needed.
|
|
|
|
.. option:: -world_units_per_luxel n
|
|
|
|
Enables output of DECOUPLED_LM BSPX lump.
|
|
|
|
.. option:: -onlyents
|
|
|
|
Updates the entities lump in the bsp. You should run this after
|
|
running qbsp with -onlyents, if your map uses any switchable lights.
|
|
All this does is assign style numbers to each switchable light.
|
|
|
|
.. option:: -litonly
|
|
|
|
Generate a .lit file that is compatible with the .bsp without
|
|
modifying the .bsp. This is meant for tweaking lighting or adding
|
|
colored lights when you can't modify an existing .bsp (e.g. for
|
|
multiplayer maps.) Typically you would make a temporary copy of the
|
|
.bsp, update the lights in the entity lump (e.g. with "qbsp
|
|
-onlyents"), then re-light it with "light -litonly". Engines may
|
|
enforce a restriction that you can't make areas brighter than they
|
|
originally were (cheat protection). Also, styled lights
|
|
(flickering/switchable) can't be added in new areas or have their
|
|
styles changed.
|
|
|
|
.. option:: -nolighting
|
|
|
|
Do all of the stuff required for lighting to work without actually
|
|
performing any lighting calculations. This is mainly for engines that
|
|
don't use the light data, but still need switchable lights, etc.
|
|
|
|
.. option:: -nolights
|
|
|
|
Ignore light entities (only sunlight/minlight).
|
|
|
|
.. option:: -facestyles n
|
|
|
|
Max amount of styles per face; requires BSPX lump if > 4.
|
|
|
|
.. option:: -exportobj
|
|
|
|
Export an .OBJ for inspection.
|
|
|
|
.. option:: -lmshift n
|
|
|
|
Force a specified lmshift to be applied to the entire map; this is useful if you want to re-light a map with
|
|
higher quality BSPX lighting without the sources. Will add the LMSHIFT lump to the BSP.
|
|
|
|
Postprocessing options
|
|
----------------------
|
|
|
|
.. option:: -soft [n]
|
|
|
|
Perform post-processing on the lightmap which averages adjacent
|
|
samples to smooth shadow edges. If n is specified, the algorithm
|
|
will take 'n' samples on each side of the sample point and replace
|
|
the original value with the average. e.g. a value of 1 results in
|
|
averaging a 3x3 square centred on the original sample. 2 implies a
|
|
5x5 square and so on. If -soft is specified, but n is omitted, a
|
|
value will be the level of oversampling requested. If no
|
|
oversampling, then the implied value is 1. :option:`-extra` implies a value
|
|
of 2 and :option:`-extra4` implies 3. Default 0 (off).
|
|
|
|
Debug modes
|
|
-----------
|
|
|
|
.. option:: -dirtdebug
|
|
|
|
Implies :worldspawn-key:`_dirt` "1", and renders just the dirtmap against a fullbright
|
|
background, ignoring all lights in the map. Useful for previewing and
|
|
turning the dirt settings.
|
|
|
|
.. option:: -phongdebug
|
|
|
|
Write normals to lit file for debugging phong shading.
|
|
|
|
.. option:: -bouncedebug
|
|
|
|
Write bounced lighting only to the lightmap for debugging /
|
|
previewing -bounce.
|
|
|
|
.. option:: -bouncelightsdebug
|
|
|
|
Only save bounced emitters lighting to the lightmap.
|
|
|
|
.. option:: -surflight_dump
|
|
|
|
Saves the lights generated by surfacelights to a
|
|
"mapname-surflights.map" file.
|
|
|
|
.. option:: -visapprox auto | none | rays | vis
|
|
|
|
Change approximate visibility algorithm.
|
|
|
|
auto
|
|
choose default based on format
|
|
|
|
vis
|
|
use BSP vis data (slow but precise).
|
|
|
|
rays
|
|
use sphere culling with fired rays (fast but may miss faces).
|
|
|
|
none
|
|
Disable approximate visibility culling of lights, which has a small
|
|
chance of introducing artifacts where lights cut off too soon.
|
|
|
|
.. option:: -novisapprox
|
|
|
|
Alias for :option:`-visapprox none`
|
|
|
|
.. option:: -phongdebug_obj
|
|
|
|
Save map as .obj with phonged normals.
|
|
|
|
.. option:: -debugoccluded
|
|
|
|
Save luxel occlusion data to lightmap.
|
|
|
|
.. option:: -debugneighbours
|
|
|
|
Save neighboring faces data to lightmap (requires :option:`-debugface`).
|
|
|
|
.. option:: -debugmottle
|
|
|
|
Save mottle pattern (used by Q2 minlight, when opted in with :bmodel-key:`_minlight_mottle`)
|
|
to lightmap.
|
|
|
|
.. option:: -debugface x y z
|
|
|
|
.. option:: -debugvert x y z
|
|
|
|
.. option:: -highlightseams
|
|
|
|
Experimental options
|
|
--------------------
|
|
|
|
.. option:: -addmin
|
|
|
|
Changes the behaviour of *minlight*. Instead of increasing low light
|
|
levels to the global minimum, add the global minimum light level to
|
|
all style 0 lightmaps. This may help reducing the sometimes uniform
|
|
minlight effect.
|
|
|
|
.. option:: -lit2
|
|
|
|
Force generation of a .lit2 file, even if your map does not have any
|
|
coloured lights.
|
|
|
|
.. option:: -lux
|
|
|
|
Generate a .lux file storing average incoming light directions for
|
|
surfaces. Usable by FTEQW with "r_deluxemapping 1".
|
|
|
|
.. option:: -bspxlux
|
|
|
|
Writes lux data into the bsp itself.
|
|
|
|
.. option:: -lmscale n
|
|
|
|
Equivalent to "_lightmap_scale" worldspawn key.
|
|
|
|
.. option:: -bspxlit
|
|
|
|
Writes rgb data into the bsp itself.
|
|
|
|
.. option:: -bspx
|
|
|
|
Writes both rgb and directions data into the bsp itself.
|
|
|
|
.. option:: -bspxonly
|
|
|
|
Writes both rgb and directions data *only* into the bsp itself.
|
|
|
|
.. option:: -hdr
|
|
|
|
Write .lit file with e5bgr9 data.
|
|
|
|
.. option:: -bspxhdr
|
|
|
|
Writes e5bgr9 data into the bsp itself.
|
|
|
|
.. option:: -novanilla
|
|
|
|
Fallback scaled lighting will be omitted. Standard grey lighting will
|
|
be omitted if there are coloured lights. Implies :option:`-bspxlit`. :option:`-lit`
|
|
will no longer be implied by the presence of coloured lights.
|
|
|
|
.. option:: -wrnormals
|
|
|
|
Writes normal data into the bsp itself.
|
|
|
|
.. option:: -arghradcompat
|
|
|
|
Enable compatibility for Arghrad-specific keys.
|
|
|
|
.. option:: -radlights "filename.rad"
|
|
|
|
Loads a <surfacename> <r> <g> <b> <intensity> file.
|
|
|
|
.. option:: -lightgrid
|
|
|
|
Generates a lightgrid and writes it to a bspx lump (LIGHTGRID_OCTREE).
|
|
|
|
.. option:: -lightgrid_dist x y z
|
|
|
|
Distance between lightgrid sample points, in world units. Controls lightgrid size.
|
|
|
|
.. option:: -lightgrid_format octree
|
|
|
|
Lightgrid BSPX lump to use. Currently there is only one supported format, octree.
|
|
|
|
Model Entity Keys
|
|
=================
|
|
|
|
Worldspawn Keys
|
|
---------------
|
|
|
|
The following keys can be added to the *worldspawn* entity:
|
|
|
|
.. worldspawn-key:: "light" "n"
|
|
"_minlight" "n"
|
|
|
|
Set a global minimum light level of "n" across the whole map. This is
|
|
an easy way to eliminate completely dark areas of the level, however
|
|
you may lose some contrast as a result, so use with care. Default 0.
|
|
|
|
.. note:: In Q2 mode, minlight uses a 0..1 range.
|
|
|
|
.. worldspawn-key:: "_minlight_color" "r g b"
|
|
"_mincolor" "r g b"
|
|
|
|
Specify red(r), green(g) and blue(b) components for the colour of the
|
|
minlight. RGB component values are between 0 and 255 (between 0 and 1
|
|
is also accepted). Default is white light ("255 255 255").
|
|
|
|
.. worldspawn-key:: "_maxlight" "n"
|
|
|
|
.. worldspawn-key:: "_dist" "n"
|
|
|
|
Scales the fade distance of all lights by a factor of n. If n > 1
|
|
lights fade more quickly with distance and if n < 1, lights fade more
|
|
slowly with distance and light reaches further.
|
|
|
|
.. worldspawn-key:: "_range" "n"
|
|
|
|
Scales the brightness range of all lights without affecting their
|
|
fade discance. Values of n > 0.5 makes lights brighter and n < 0.5
|
|
makes lights less bright. The same effect can be achieved on
|
|
individual lights by adjusting both the "light" and "wait"
|
|
attributes.
|
|
|
|
.. worldspawn-key:: "_sunlight" "n"
|
|
"_sun_light" "n"
|
|
|
|
Set the brightness of the sunlight coming from an unseen sun in the
|
|
sky. Sky brushes (or more accurately bsp leafs with sky contents)
|
|
will emit sunlight at an angle specified by the "_sun_mangle" key.
|
|
Default 0.
|
|
|
|
.. worldspawn-key:: "_anglescale" "n"
|
|
"_anglesense" "n"
|
|
|
|
Set the scaling of sunlight brightness due to the angle of incidence
|
|
with a surface (more detailed explanation in the "_anglescale" light
|
|
entity key below).
|
|
|
|
.. worldspawn-key:: "_sunlight_mangle" "yaw pitch roll"
|
|
"_sun_mangle" "yaw pitch roll"
|
|
"_sun_angle" "yaw pitch roll"
|
|
|
|
Specifies the direction of sunlight using yaw, pitch and roll in
|
|
degrees. Yaw specifies the angle around the Z-axis from 0 to 359
|
|
degrees and pitch specifies the angle from 90 (shining straight up)
|
|
to -90 (shining straight down from above). Roll has no effect, so use
|
|
any value (e.g. 0). Default is straight down ("0 -90 0").
|
|
|
|
.. worldspawn-key:: "_sun2" "n"
|
|
|
|
.. worldspawn-key:: "_sun2_color" "x y z"
|
|
|
|
.. worldspawn-key:: "_sun2_mangle" "x y z"
|
|
|
|
.. worldspawn-key:: "_sunlight_penumbra" "n"
|
|
|
|
Specifies the penumbra width, in degrees, of sunlight. Useful values
|
|
are 3-4 for a gentle soft edge, or 10-20+ for more diffuse sunlight.
|
|
Default is 0.
|
|
|
|
.. worldspawn-key:: "_sunlight_color" "r g b"
|
|
"_sun_color" "r g b"
|
|
|
|
Specify red(r), green(g) and blue(b) components for the colour of the
|
|
sunlight. RGB component values are between 0 and 255 (between 0 and 1
|
|
is also accepted). Default is white light ("255 255 255").
|
|
|
|
.. worldspawn-key:: "_sunlight2" "n"
|
|
|
|
Set the brightness of a dome of lights arranged around the upper
|
|
hemisphere. (i.e. ambient light, coming from above the horizon).
|
|
Default 0.
|
|
|
|
.. worldspawn-key:: "_sunlight_color2" "r g b"
|
|
"_sunlight2_color" "r g b"
|
|
|
|
Specifies the colour of \_sunlight2, same format as
|
|
"_sunlight_color". Default is white light ("255 255 255").
|
|
|
|
.. worldspawn-key:: "_sunlight3" "n"
|
|
|
|
Same as "_sunlight2", but for the bottom hemisphere (i.e. ambient
|
|
light, coming from below the horizon). Combine "_sunlight2" and
|
|
"_sunlight3" to have light coming equally from all directions, e.g.
|
|
for levels floating in the clouds. Default 0.
|
|
|
|
.. worldspawn-key:: "_sunlight_color3" "r g b"
|
|
"_sunlight3_color" "r g b"
|
|
|
|
Specifies the colour of "_sunlight3". Default is white light ("255
|
|
255 255").
|
|
|
|
.. worldspawn-key:: "_dirt" "n"
|
|
"_dirty" "n"
|
|
|
|
1 enables dirtmapping (ambient occlusion) on all lights, borrowed
|
|
from q3map2. This adds shadows to corners and crevices. You can
|
|
override the global setting for specific lights with the "_dirt"
|
|
light entity key or "_sunlight_dirt", "_sunlight2_dirt", and
|
|
"_minlight_dirt" worldspawn keys. Default is no dirtmapping (-1).
|
|
|
|
.. worldspawn-key:: "_sunlight_dirt" "n"
|
|
|
|
1 enables dirtmapping (ambient occlusion) on sunlight, -1 to disable
|
|
(making it illuminate the dirtmapping shadows). Default is to use the
|
|
value of "_dirt".
|
|
|
|
.. worldspawn-key:: "_sunlight2_dirt" "n"
|
|
|
|
1 enables dirtmapping (ambient occlusion) on sunlight2/3, -1 to
|
|
disable. Default is to use the value of "_dirt".
|
|
|
|
.. worldspawn-key:: "_minlight_dirt" "n"
|
|
|
|
1 enables dirtmapping (ambient occlusion) on minlight, -1 to disable.
|
|
Default is to use the value of "_dirt".
|
|
|
|
.. worldspawn-key:: "_dirtmode" "n"
|
|
|
|
Choose between ordered (0, default) and randomized (1) dirtmapping.
|
|
|
|
.. worldspawn-key:: "_dirtdepth" "n"
|
|
|
|
Maximum depth of occlusion checking for dirtmapping, default 128.
|
|
|
|
.. worldspawn-key:: "_dirtscale" "n"
|
|
|
|
Scale factor used in dirt calculations, default 1. Lower values (e.g.
|
|
0.5) make the dirt fainter, 2.0 would create much darker shadows.
|
|
|
|
.. worldspawn-key:: "_dirtgain" "n"
|
|
|
|
Exponent used in dirt calculation, default 1. Lower values (e.g. 0.5)
|
|
make the shadows darker and stretch further away from corners.
|
|
|
|
.. worldspawn-key:: "_dirtangle" "n"
|
|
|
|
Cone angle in degrees for occlusion testing, default 88. Allowed
|
|
range 1-90. Lower values can avoid unwanted dirt on arches, pipe
|
|
interiors, etc.
|
|
|
|
.. worldspawn-key:: "_gamma" "n"
|
|
|
|
Adjust brightness of final lightmap. Default 1, >1 is brighter, <1 is
|
|
darker.
|
|
|
|
.. worldspawn-key:: "_lightmap_scale" "n"
|
|
|
|
Forces all surfaces+submodels to use this specific lightmap scale.
|
|
Removes "LMSHIFT" field.
|
|
|
|
.. worldspawn-key:: "_bounce" "n"
|
|
|
|
Non-zero enables bounce lighting, disabled by default. The value is
|
|
the maximum number of bounces to perform.
|
|
|
|
.. worldspawn-key:: "_bouncescale" "n"
|
|
|
|
Scales brightness of bounce lighting, default 1.
|
|
|
|
.. worldspawn-key:: "_bouncecolorscale" "n"
|
|
|
|
Weight for bounce lighting to use texture colors from the map:
|
|
0=ignore map textures (default), 1=multiply bounce light color by
|
|
texture color.
|
|
|
|
.. worldspawn-key:: "_bouncelightsubdivision" "n"
|
|
|
|
.. worldspawn-key:: "_surflightscale" "n"
|
|
|
|
Scales the surface light emission from Q2 surface lights (excluding sky faces) by this amount.
|
|
|
|
.. worldspawn-key:: "_surflightskyscale" "n"
|
|
|
|
Scales the surface light emission from Q2 sky faces by this amount.
|
|
|
|
.. worldspawn-key:: "_surflightsubdivision" "n"
|
|
"_choplight" "n"
|
|
|
|
.. worldspawn-key:: "_bouncestyled" "n"
|
|
|
|
1 allows styled lights to bounce (e.g. flickering or switchable lights).
|
|
Default is 1.
|
|
|
|
.. worldspawn-key:: "_spotlightautofalloff" "n"
|
|
|
|
When set to 1, spotlight falloff is calculated from the distance to
|
|
the targeted info_null. Ignored when "_falloff" is not 0. Default 0.
|
|
|
|
.. worldspawn-key:: "_surflight_radiosity" "n"
|
|
|
|
Whether to use Q1-style surface subdivision (0) or Q2-style surface radiosity.
|
|
|
|
.. worldspawn-key:: "_sky_surface" "x y z"
|
|
"_sun_surface" "x y z"
|
|
|
|
.. worldspawn-key:: "_compilerstyle_start" "n"
|
|
|
|
.. worldspawn-key:: "_compilerstyle_max" "n"
|
|
|
|
.. worldspawn-key:: "_surflight_minlight_scale" "n"
|
|
|
|
Scale factor for automatic minlight on an emissive face, derived from the
|
|
light color being emitted.
|
|
|
|
This is intended to prevent, e.g., a light fixture texture which is configured
|
|
as a surface light, from being completely black.
|
|
|
|
Default 1.0, can set to 0.0 to disable minlight.
|
|
|
|
Model Entity Keys
|
|
-----------------
|
|
|
|
The following keys can be used on any entity with a brush model.
|
|
|
|
If used on func_detail* or func_group, a full qbsp pass need to be run.
|
|
|
|
.. bmodel-key:: "_minlight" "n"
|
|
|
|
Set the minimum light level for any surface of the brush model.
|
|
Default 0.
|
|
|
|
.. note:: Q2 uses a 0..1 scale for this key
|
|
|
|
.. bmodel-key:: "_minlight_mottle" "n"
|
|
"_minlightMottle" "n"
|
|
|
|
Whether minlight should have a mottled pattern. Defaults
|
|
to 0.
|
|
|
|
.. bmodel-key:: "_minlight_exclude" "texname"
|
|
"_minlight_exclude2" "texname"
|
|
"_minlight_exclude3" "texname"
|
|
|
|
Faces with the given texture are excluded from receiving minlight on
|
|
this brush model.
|
|
|
|
.. bmodel-key:: "_minlight_color" "r g b"
|
|
"_mincolor" "r g b"
|
|
|
|
Specify red(r), green(g) and blue(b) components for the colour of the
|
|
minlight. RGB component values are between 0 and 255 (between 0 and 1
|
|
is also accepted). Default is white light ("255 255 255").
|
|
|
|
.. bmodel-key:: "_shadow" "n"
|
|
|
|
If n is 1, this model will cast shadows on other models and itself
|
|
(i.e. "_shadow" implies "_shadowself"). Note that this doesn't
|
|
magically give Quake dynamic lighting powers, so the shadows will not
|
|
move if the model moves. Set to -1 on func_detail/func_group to
|
|
prevent them from casting shadows. Default 0.
|
|
|
|
.. bmodel-key:: "_shadowself" "n"
|
|
"_selfshadow" "n"
|
|
|
|
If n is 1, this model will cast shadows on itself if one part of the
|
|
model blocks the light from another model surface. This can be a
|
|
better compromise for moving models than full shadowing. Default 0.
|
|
|
|
.. bmodel-key:: "_shadowworldonly" "n"
|
|
|
|
If n is 1, this model will cast shadows on the world only (not other
|
|
bmodels).
|
|
|
|
.. bmodel-key:: "_switchableshadow" "n"
|
|
|
|
If n is 1, this model casts a shadow that can be switched on/off
|
|
using QuakeC. To make this work, a lightstyle is automatically
|
|
assigned and stored in a key called "switchshadstyle", which the
|
|
QuakeC will need to read and call the "lightstyle()" builtin with "a"
|
|
or "m" to switch the shadow on or off. Entities sharing the same
|
|
targetname, and with "_switchableshadow" set to 1, will share the
|
|
same lightstyle.
|
|
|
|
These models are only able to block style 0 light (i.e., non-flickering
|
|
or switchable lights). Flickering or switchable lights will shine
|
|
through the switchable shadow casters, regardless of whether the shadow
|
|
is off or on.
|
|
|
|
.. bmodel-key:: "_dirt" "n"
|
|
|
|
For brush models, -1 prevents dirtmapping on the brush model. Useful
|
|
if the bmodel touches or sticks into the world, and you want to
|
|
prevent those areas from turning black. Default 0.
|
|
|
|
.. bmodel-key:: "_phong" "n"
|
|
|
|
1 enables phong shading on this model with a default \_phong_angle of
|
|
89 (softens columns etc).
|
|
|
|
.. bmodel-key:: "_phong_angle" "n"
|
|
|
|
Enables phong shading on faces of this model with a custom angle.
|
|
Adjacent faces with normals this many degrees apart (or less) will be
|
|
smoothed. Consider setting "_anglescale" to "1" on lights or
|
|
worldspawn to make the effect of phong shading more visible. Use the
|
|
"-phongdebug" command-line flag to save the interpolated normals to
|
|
the lightmap for previewing (use "r_lightmap 1" or "gl_lightmaps 1"
|
|
in your engine to preview.)
|
|
|
|
.. bmodel-key:: "_phong_angle_concave" "n"
|
|
|
|
Optional key for setting a different angle threshold for concave
|
|
joints. A pair of faces will either use "_phong_angle" or
|
|
"_phong_angle_concave" as the smoothing threshold, depending on
|
|
whether the joint between the faces is concave or not.
|
|
"_phong_angle(_concave)" is the maximum angle (in degrees) between
|
|
the face normals that will still cause the pair of faces to be
|
|
smoothed. The minimum setting for "_phong_angle_concave" is 1, this
|
|
should make all concave joints non-smoothed (unless they're less than
|
|
1 degree apart, almost a flat plane.) If it's 0 or unset, the same
|
|
value as "_phong_angle" is used.
|
|
|
|
.. bmodel-key:: "_phong_group" "n"
|
|
|
|
Integer specifying a "smoothing group ID" for phong shading. Default 0,
|
|
faces with a _phong_group will only smooth with faces with a matching
|
|
_phong_group.
|
|
|
|
Equivalent to the Q2 .map format's "value" field.
|
|
|
|
.. bmodel-key:: "_lightignore" "n"
|
|
|
|
1 makes a model receive minlight only, ignoring all lights /
|
|
sunlight. Could be useful on rotators / trains.
|
|
|
|
.. seealso:: `Lighting Channels`_ for a more powerful version of this
|
|
|
|
.. bmodel-key:: "_light_twosided" "n"
|
|
|
|
Set to 1 to enable receiving light from either side.
|
|
|
|
Default is 0 execept on liquids (Q1 :texture:`*`, Q2 contents LAVA/SLIME/WATER),
|
|
where it defaults to 1.
|
|
|
|
.. bmodel-key:: "_light_alpha" "n"
|
|
|
|
Float, range 0-1. Allows customizing the opacity of this face when it's acting
|
|
as "stained glass".
|
|
|
|
.. todo::
|
|
|
|
Document default, and which conditions cause a face to be "stained glass"
|
|
|
|
.. bmodel-key:: "_litwater" "n"
|
|
"_splitturb" "n"
|
|
|
|
Overrides the worldspawn/command line option :option:`qbsp -litwater` for these specific brushes.
|
|
|
|
.. bmodel-key:: "_surflight_rescale" "n"
|
|
|
|
Integer, 0 or 1.
|
|
|
|
If 1, rescales any surface light emitted by these brushes to emit 50% light
|
|
at 90 degrees from the surface normal. Otherwise, use a more natural angle falloff
|
|
of 0% at 90 degrees.
|
|
|
|
Default is 0 on sky faces, otherwise 1.
|
|
|
|
.. bmodel-key:: "_surflight_color" "r g b"
|
|
|
|
Customize the emissive color of a surface light.
|
|
|
|
Default is to use the average texture color.
|
|
|
|
.. bmodel-key:: "_surflight_style" "n"
|
|
|
|
Override the surface light lightstyle number for light emitted from these brushes.
|
|
|
|
.. bmodel-key:: "_surflight_targetname" "name"
|
|
|
|
Override the surface light targetname for light emitted from these brushes.
|
|
|
|
.. bmodel-key:: "_surflight_minlight_scale" "n"
|
|
|
|
Overrides the worldspawn setting :worldspawn-key:`_surflight_minlight_scale`
|
|
|
|
.. bmodel-key:: "_bounce" "n"
|
|
|
|
Set to -1 to prevent this model from bouncing light (i.e. prevents
|
|
its brushes from emitting bounced light they receive from elsewhere.)
|
|
Only has an effect if "_bounce" is enabled in worldspawn.
|
|
|
|
.. bmodel-key:: "_autominlight" "n"
|
|
|
|
"Autominlight" is a feature for automatically choosing a suitable
|
|
minlight color for a bmodel entity (e.g. a func_door), by averaging
|
|
incoming light at the center of the bmodel bounding box.
|
|
|
|
Default behaviour is to apply autominlight on occluded luxels only (e.g., for a
|
|
door that opens vertically upwards, it would apply to the bottom face of the
|
|
door, which is initially pressed against the ground).
|
|
|
|
A value of "-1" disables the feature (occluded luxels will be solid black),
|
|
and "1" enables it as a minlight color even on non-occluded luxels.
|
|
|
|
.. bmodel-key:: "_autominlight_target" "name"
|
|
|
|
For autominlight, instead of using the center of the model bounds as the sample point,
|
|
searches for an entity with its "targetname" key set to "name",
|
|
and use that entity's origin (typically you'd use an "info_null" for this).
|
|
|
|
.. bmodel-key:: "_world_units_per_luxel" "n"
|
|
|
|
When :option:`-world_units_per_luxel` is in use, customizes the lightmap scale
|
|
on this entity.
|
|
|
|
.. bmodel-key:: "_surflight_group" "n"
|
|
|
|
Integer. Default 0.
|
|
|
|
Can be set to a nonzero value to make these brushes emit as surface lights
|
|
only from a light template with a matching :surflight-key:`_surflight_group` value.
|
|
|
|
.. bmodel-key:: "_lightcolorscale" "n"
|
|
|
|
Saturation control as a postprocessing step on these specific faces' lightmaps.
|
|
|
|
Default 1.0, 0.0 is fully desaturated to greyscale.
|
|
|
|
Light Entity Keys
|
|
=================
|
|
|
|
Light entity keys can be used in any entity with a classname starting
|
|
with the first five letters "light". E.g. "light", "light_globe",
|
|
"light_flame_small_yellow", etc.
|
|
|
|
Point Lights
|
|
------------
|
|
|
|
.. light-key:: "light" "n"
|
|
|
|
Set the light intensity. Negative values are also allowed and will
|
|
cause the entity to subtract light cast by other entities. Default
|
|
300.
|
|
|
|
.. light-key:: "wait" "n"
|
|
|
|
Scale the fade distance of the light by "n". Values of n > 1 make the
|
|
light fade more quickly with distance, and values < 1 make the light
|
|
fade more slowly (and thus reach further). Default 1.
|
|
|
|
.. light-key:: "delay" "n"
|
|
|
|
Select an attenuation formaula for the light:
|
|
|
|
.. code:: none
|
|
|
|
0 => Linear attenuation (default)
|
|
1 => 1/x attenuation
|
|
2 => 1/(x^2) attenuation
|
|
3 => No attenuation (same brightness at any distance)
|
|
4 => "local minlight" - No attenuation and like minlight,
|
|
it won't raise the lighting above it's light value.
|
|
Unlike minlight, it will only affect surfaces within
|
|
line of sight of the entity.
|
|
5 => 1/(x^2) attenuation, but slightly more attenuated and
|
|
without the extra bright effect that "delay 2" has
|
|
near the source.
|
|
|
|
.. light-key:: "_falloff" "n"
|
|
|
|
Sets the distance at which the light drops to 0, in map units.
|
|
|
|
In this mode, "wait" is ignored and "light" only controls the brightness
|
|
at the center of the light, and no longer affects the falloff distance.
|
|
|
|
Only supported on linear attenuation (delay 0) lights currently.
|
|
|
|
.. light-key:: "_color" "r g b"
|
|
|
|
Specify red(r), green(g) and blue(b) components for the colour of the
|
|
light. RGB component values are between 0 and 255 (between 0 and 1 is
|
|
also accepted). Default is white light ("255 255 255").
|
|
|
|
.. light-key:: "targetname" "name"
|
|
|
|
Turns the light into a switchable light, toggled by another entity
|
|
targeting it's name.
|
|
|
|
.. light-key:: "style" "n"
|
|
|
|
Set the animated light style. Default 0.
|
|
|
|
.. light-key:: "_anglescale" "n"
|
|
"_anglesense" "n"
|
|
|
|
Sets a scaling factor for how much influence the angle of incidence
|
|
of light on a surface has on the brightness of the surface. *n* must
|
|
be between 0.0 and 1.0. Smaller values mean less attenuation, with
|
|
zero meaning that angle of incidence has no effect at all on the
|
|
brightness. Default 0.5.
|
|
|
|
.. light-key:: "_dirtscale" "n"
|
|
"_dirtgain" "n"
|
|
|
|
Override the global "_dirtscale" or "_dirtgain" settings to change
|
|
how this light is affected by dirtmapping (ambient occlusion). See
|
|
descriptions of these keys in the worldspawn section.
|
|
|
|
.. light-key:: "_dirt" "n"
|
|
|
|
Overrides the worldspawn setting of "_dirt" for this particular
|
|
light. -1 to disable dirtmapping (ambient occlusion) for this light,
|
|
making it illuminate the dirtmapping shadows. 1 to enable ambient
|
|
occlusion for this light. Default is to defer to the worldspawn
|
|
setting.
|
|
|
|
.. light-key:: "_deviance" "n"
|
|
|
|
Split up the light into a sphere of randomly positioned lights within
|
|
radius "n" (in world units). Useful to give shadows a wider penumbra.
|
|
"_samples" specifies the number of lights in the sphere. The "light"
|
|
value is automatically scaled down for most lighting formulas (except
|
|
linear and non-additive minlight) to attempt to keep the brightness
|
|
equal. Default is 0, do not split up lights.
|
|
|
|
.. light-key:: "_samples" "n"
|
|
|
|
Number of lights to use for "_deviance". Default 16 (only used if
|
|
"_deviance" is set).
|
|
|
|
.. light-key:: "_bouncescale" "n"
|
|
|
|
Scales the amount of light that is contributed by bounces. Default is
|
|
1.0, 0.0 disables bounce lighting for this light.
|
|
|
|
.. light-key:: "_nostaticlight" "n"
|
|
|
|
Set to 1 to make the light compiler ignore this entity (prevents it
|
|
from casting any light). e.g. could be useful with rtlights.
|
|
|
|
Spotlights
|
|
----------
|
|
|
|
Supports all keys from `Point Lights`_ in addition to the following:
|
|
|
|
.. spotlight-key:: "target" "name"
|
|
|
|
Turns the light into a spotlight, with the direction of light being
|
|
towards another entity with it's "targetname" key set to "name".
|
|
|
|
.. spotlight-key:: "mangle" "yaw pitch roll"
|
|
|
|
Turns the light into a spotlight and specifies the direction of light
|
|
using yaw, pitch and roll in degrees. Yaw specifies the angle around
|
|
the Z-axis from 0 to 359 degrees and pitch specifies the angle from
|
|
90 (straight up) to -90 (straight down). Roll has no effect, so use
|
|
any value (e.g. 0). Often easier than the "target" method.
|
|
|
|
.. spotlight-key:: "angle" "n"
|
|
|
|
Specifies the angle in degrees for a spotlight cone. Default 40.
|
|
|
|
.. spotlight-key:: "_softangle" "n"
|
|
|
|
Specifies the angle in degrees for an inner spotlight cone (must be
|
|
less than the "angle" cone. Creates a softer transition between the
|
|
full brightness of the inner cone to the edge of the outer cone.
|
|
Default 0 (disabled).
|
|
|
|
Surface Lights
|
|
--------------
|
|
|
|
.. surflight-key:: "_surface" "texturename"
|
|
|
|
Makes surfaces with the given texture name emit light, by using this
|
|
light as a template which is copied across those surfaces. Lights are
|
|
spaced about 128 units (though possibly closer due to bsp splitting)
|
|
apart and positioned 2 units above the surfaces.
|
|
|
|
To restrict this surface light config to a subset of brushes with
|
|
the "texturename" texture applied, see the :surflight-key:`_surflight_group` key.
|
|
|
|
.. surflight-key:: "_surface_offset" "n"
|
|
|
|
Controls the offset lights are placed above surfaces for :surflight-key:`_surface`.
|
|
Default 2.
|
|
|
|
.. surflight-key:: "_surface_spotlight" "n"
|
|
|
|
For a surface light template (i.e. a light with :surflight-key:`_surface` set),
|
|
setting this to "1" makes each instance into a spotlight, with the
|
|
direction of light pointing along the surface normal. In other words,
|
|
it automatically sets "mangle" on each of the generated lights.
|
|
|
|
.. surflight-key:: "_surface_radiosity" "n"
|
|
|
|
Whether to use Q1-style surface subdivision (0) or Q2-style
|
|
surface radiosity (1) on this light specifically.
|
|
|
|
Use in conjunction with :surflight-key:`_surface`.
|
|
|
|
The default can be changed for all surface lights in a map with
|
|
worldspawn key :worldspawn-key:`_surflight_radiosity`.
|
|
|
|
.. surflight-key:: "_surflight_group" "n"
|
|
|
|
Integer, default 0.
|
|
|
|
For use with :surflight-key:`_surface` lights.
|
|
|
|
Can be set to a nonzero value to restrict
|
|
this surface light template to only emit from brushes with a matching
|
|
:bmodel-key:`_surflight_group` value.
|
|
|
|
|
|
Projected Texture Lights
|
|
------------------------
|
|
|
|
.. projlight-key:: "_project_texture" "texture"
|
|
|
|
Specifies that a light should project this texture. The texture must
|
|
be used in the map somewhere.
|
|
|
|
.. todo:: This is a qbsp limitation which could be fixed
|
|
|
|
.. projlight-key:: "_project_mangle" "yaw pitch roll"
|
|
|
|
Specifies the yaw/pitch/roll angles for a texture projection
|
|
(overriding mangle).
|
|
|
|
.. projlight-key:: "_project_fov" "n"
|
|
|
|
Specifies the fov angle for a texture projection. Default 90.
|
|
|
|
|
|
Sun Light
|
|
---------
|
|
|
|
Also called directional light. Emitted from sky faces.
|
|
|
|
.. sunlight-key:: "_sun" "n"
|
|
|
|
Set to 1 to make this entity a sun, as an alternative to using the
|
|
sunlight worldspawn keys.
|
|
|
|
.. sunlight-key:: "target" "t"
|
|
|
|
If the light targets an info_null entity,
|
|
the direction towards that entity sets sun direction. The light
|
|
itself is disabled, so it can be placed anywhere in the map.
|
|
|
|
.. sunlight-key:: "mangle" "yaw pitch roll"
|
|
|
|
Alternate way of specifying sunlight direction.
|
|
|
|
Equivalent to worldspawn key :worldspawn-key:`_sunlight_mangle`.
|
|
|
|
.. sunlight-key:: "light" "n"
|
|
|
|
Equivalent to worldspawn key :worldspawn-key:`_sunlight`.
|
|
|
|
.. sunlight-key:: "_color" "r g b"
|
|
|
|
Equivalent to worldspawn key :worldspawn-key:`_sunlight_color`.
|
|
|
|
.. sunlight-key:: "deviance" "n"
|
|
|
|
Equivalent to worldspawn key :worldspawn-key:`_sunlight_penumbra`.
|
|
|
|
.. sunlight-key:: "_dirt" "n"
|
|
|
|
Equivalent to worldspawn key :worldspawn-key:`_sunlight_dirt`.
|
|
|
|
.. sunlight-key:: "_anglescale" "n"
|
|
|
|
Equivalent to worldspawn key :worldspawn-key:`_anglescale`.
|
|
|
|
.. sunlight-key:: "style" "n"
|
|
|
|
Flicker style for styled sunlight.
|
|
|
|
.. sunlight-key:: "targetname" "name"
|
|
|
|
Targetname for switchable sunlight.
|
|
|
|
.. sunlight-key:: "_suntexture" "texname"
|
|
|
|
This sunlight is only emitted from faces with this texture name. Default is to be emitted from all sky textures.
|
|
|
|
|
|
Sky Light
|
|
---------
|
|
|
|
Hemisphere shaped light emitted from sky faces.
|
|
|
|
.. skylight-key:: "_sunlight2" "n"
|
|
|
|
Set to 1 to make this entity control the upper dome lighting emitted
|
|
from sky faces, as an alternative to the worldspawn key :worldspawn-key:`_sunlight2`.
|
|
The light entity itself is disabled, so it can be placed anywhere in
|
|
the map.
|
|
|
|
.. skylight-key:: "_sunlight3" "n"
|
|
|
|
Same as :skylight-key:`_sunlight2`, but makes this sky light come from the lower hemisphere.
|
|
|
|
.. skylight-key:: "light" "n"
|
|
|
|
Sets the dome light brightness. Equivalent to worldspawn key :worldspawn-key:`_sunlight2`.
|
|
|
|
.. skylight-key:: "_color" "r g b"
|
|
|
|
Sets the dome light color. Equivalent to worldspawn key :worldspawn-key:`_sunlight2_color`.
|
|
|
|
.. skylight-key:: "_dirt" "n"
|
|
|
|
Equivalent to worldspawn key :worldspawn-key:`_sunlight2_dirt`.
|
|
|
|
.. skylight-key:: "_anglescale" "n"
|
|
|
|
Equivalent to worldspawn key :worldspawn-key:`_anglescale`.
|
|
|
|
.. skylight-key:: "style" "n"
|
|
|
|
Flicker style for styled sky light.
|
|
|
|
.. skylight-key:: "targetname" "name"
|
|
|
|
Targetname for switchable skylight.
|
|
|
|
.. skylight-key:: "_suntexture" "texname"
|
|
|
|
This sky light is only emitted from faces with this texture name. Default is to be emitted from all sky textures.
|
|
|
|
|
|
Lighting Channels
|
|
=================
|
|
|
|
Lighting channels allow custom lighting setups where certain light entities only affect certain bmodels. Useful
|
|
for lighting rotators, doors, etc.
|
|
|
|
.. note:: Currently, bounced light, surface lights, and sunlight are always on channel 1.
|
|
|
|
Light Keys
|
|
----------
|
|
|
|
.. light-key:: "_light_channel_mask" "n"
|
|
|
|
Mask of lighting channels that the light casts on.
|
|
|
|
In order for this light to cast light on a bmodel, there needs to be a least 1 bit in common between
|
|
:light-key:`_light_channel_mask` and the receiving bmodel's :bmodel-key:`_object_channel_mask` (i.e. the bitwise AND must be nonzero).
|
|
|
|
Default 1.
|
|
|
|
.. light-key:: "_shadow_channel_mask" "n"
|
|
|
|
This is the mask of lighting channels that will block this entity's light rays. If the the bitwise AND of this
|
|
and another bmodel's :bmodel-key:`_object_channel_mask` is nonzero, the light ray is stopped.
|
|
|
|
This is an advanced option, for making bmodels only cast shadows for specific lights (but not others).
|
|
|
|
Defaults to :light-key:`_light_channel_mask`
|
|
|
|
Model Keys
|
|
----------
|
|
|
|
.. bmodel-key:: "_object_channel_mask" "n"
|
|
|
|
Mask of lighting channels that this bmodel receives light on, blocks light on, and tests for AO on.
|
|
|
|
Default 1.
|
|
|
|
.. note:: Changing this from 1 will disable bouncing light off of this bmodel.
|
|
|
|
.. note:: Changing this from 1 implicitly enables :bmodel-key:`_shadow`.
|
|
|
|
.. note::
|
|
|
|
Changing to 2, for example, will cause the bmodel to initially be solid black. You'll need to add minlight or lights
|
|
with :light-key:`_light_channel_mask` ``2``.
|
|
|
|
Other Information
|
|
=================
|
|
|
|
The ``\b`` escape sequence toggles red text on/off, you can use this in
|
|
any strings in the map file. e.g. ``"message" "Here is \bsome red
|
|
text\b..."``
|
|
|
|
Author
|
|
======
|
|
|
|
| Eric Wasylishen
|
|
| Kevin Shanahan (aka Tyrann) - http://disenchant.net
|
|
| David Walton (aka spike)
|
|
| Based on source provided by id Software
|
|
|
|
Reporting Bugs
|
|
==============
|
|
|
|
| Please post bug reports at
|
|
https://github.com/ericwa/ericw-tools/issues.
|
|
| Improvements to the documentation are welcome and encouraged.
|
|
|
|
Copyright
|
|
=========
|
|
|
|
| Copyright (C) 2017 Eric Wasylishen
|
|
| Copyright (C) 2013 Kevin Shanahan
|
|
| Copyright (C) 1997 id Software
|
|
| License GPLv2+: GNU GPL version 2 or later
|
|
| <http://gnu.org/licenses/gpl2.html>.
|
|
|
|
This is free software: you are free to change and redistribute it. There
|
|
is NO WARRANTY, to the extent permitted by law.
|