ZDRay baking utility for GZDoom
Find a file
2021-11-16 02:15:14 +01:00
src Limit the number of lights per trace to 50 2021-11-16 02:15:14 +01:00
thirdparty Replace zlib with miniz as that is much easier to link with and removes a linker warning 2021-11-16 00:04:05 +01:00
.gitignore Initial import 2017-08-03 20:25:54 +02:00
CMakeLists.txt Minor file structure cleanup 2021-11-16 00:30:54 +01:00
COPYING Initial import 2017-08-03 20:25:54 +02:00
README.md Update README.md 2021-11-11 05:58:48 +01:00

ZDRay baking utility for GZDoom

ZDRay is a node and lightmap generator for GZDoom. ZDRay is intended as a drop-in replacement for zdbsp, with the additional feature that it can also bake lights. Once ZDRay has processed the level WAD it is ready to be used by GZDoom.

ZDRay is based on zdbsp for the node generation and originally used dlight for the lightmap generation. Special thanks to Randi Heit, Samuel Villarreal, Christoph Oelckers and anyone else involved in creating or maintaining those tools.

The ray tracing code has been completely rewritten since. It now supports bounces and can do the ray tracing on the GPU.

ZDRay Usage

Usage: zdray [options] sourcefile.wad
  -m, --map=MAP            Only affect the specified map
  -o, --output=FILE        Write output to FILE instead of tmp.wad
  -c, --comments           Write UDMF index comments
  -q, --no-prune           Keep unused sidedefs and sectors
  -N, --no-nodes           Do not rebuild nodes
  -g, --gl                 Build GL-friendly nodes
  -G, --gl-matching        Build GL-friendly nodes that match normal nodes
  -x, --gl-only            Only build GL-friendly nodes
  -5, --gl-v5              Create v5 GL-friendly nodes (overriden by -z and -X)
  -X, --extended           Create extended nodes (including GL nodes, if built)
  -z, --compress           Compress the nodes (including GL nodes, if built)
  -Z, --compress-normal    Compress normal nodes but not GL nodes
  -b, --empty-blockmap     Create an empty blockmap
  -r, --empty-reject       Create an empty reject table
  -R, --zero-reject        Create a reject table of all zeroes
  -E, --no-reject          Leave reject table untouched
  -p, --partition=NNN      Maximum segs to consider at each node (default 64)
  -s, --split-cost=NNN     Cost for splitting segs (default 8)
  -d, --diagonal-cost=NNN  Cost for avoiding diagonal splitters (default 16)
  -P, --no-polyobjs        Do not check for polyobject subsector splits
  -j, --threads=NNN        Number of threads used for raytracing (default 64)
  -S, --size=NNN           lightmap texture dimensions for width and height must
                           be in powers of two (1, 2, 4, 8, 16, etc)
  -C, --cpu-raytrace       Use the CPU for ray tracing
  -D, --vkdebug            Print messages from the vulkan validation layer
  -w, --warn               Show warning messages
  -t, --no-timing          Suppress timing information
  -V, --version            Display version information
      --help               Display this usage information

ZDRay UDMF properties

thing // ZDRayInfo (zdray properties for the map)
{
	type = 9890;
	suncolor = <int> (color)
	sundirx = <float> (X direction for the sun)
	sundiry = <float> (Y direction for the sun)
	sundirz = <float> (Z direction for the sun)
	sampledistance = <int> (default: 8, map units each lightmap texel covers, must be in powers of two)
	bounces = <int> (default: 1, how many times light bounces off walls)
	gridsize = <float> (default: 32, grid density for the automatic light probes)
}

thing // StaticLight (point or spot light to be baked into the lightmap)
{
	lightcolor = <int> (color)
	lightintensity = <float> (default: 1)
	lightdistance = <float> (default: 0, no light)
	lightinnerangle = <float> (default: 180)
	lightouterangle = <float> (default: 180)
}

thing // LightProbe (light sampling point for actors)
{
	type = 9875;
}

linedef // Line emissive surface
{
	lightcolor = <int> (color, default: white)
	lightintensity = <float> (default: 1)
	lightdistance = <float> (default: 0, no light)
}

sector // Sector plane emissive surface
{
	lightcolorfloor = <int> (color, default: white)
	lightintensityfloor = <float> (default: 1)
	lightdistancefloor = <float> (default: 0, no light)

	lightcolorceiling = <int> (color, default: white)
	lightintensityceiling = <float> (default: 1)
	lightdistanceceiling = <float> (default: 0, no light)
}