]> de.git.xonotic.org Git - xonotic/netradiant.git/blob - tools/quake3/q3map2/changelog.q3map2.txt
eol
[xonotic/netradiant.git] / tools / quake3 / q3map2 / changelog.q3map2.txt
1 Q3Map2 Version History + Changelog (Reverse Chronological Order)
2
3 2.5.11 (2003-12-01)
4
5 - New: added support for _skybox entities to generate "portal sky"
6   surfaces in games w/o native support (Quake 3). _skybox entities have
7   3 keys: _scale (default 64), and angle/angles (for rotation of the
8   skybox relative to the map)
9 - New: added -skyfix switch to BSP phase as a workaround hack for
10   the black GL_CLAMP border on skybox edges on ATI (and newer nvidia)
11   video cards. Note: unnecessary in ET or JA
12 - New: Added _anglescale to light entities for scaling angle attenuation.
13   Use a small value (< 1.0) to lessen the angle attenuation, and a high
14   value (> 1.0) for sharper, more faceted lighting
15 - New: Added _lightmapscale support to misc_model entities
16 - Custom shaders (external lightmaps, styles) will not be generated
17   if the find/replace text cannot be found
18 - Tightened up light culling epsilon from 1.0 to 0.125 to stop certain
19   surface lights from being incorrectly culled (thanks RasputiN!)
20 - Fixed bug where small 3 and 4 sided brush faces were getting fanned,
21   adding triangle/vertex counts
22 - Moved to Visual Studio .NET, with aggressive optimizations enabled
23 - Cleaned up missing image warnings
24 - Parsing images out of shader stages if not found explicit/implicitly
25 - Loads Enemy Territory implicitMap images if editor/light image not found
26
27
28 2.5.10 (2003-10-22)
29
30 - New: Lightwave model support (beta) courtesy of RR2DO2
31 - New: Heretic 2 FM model support courtesy of Nurail
32 - Re-enabled vertex cache friendly triangle reordering with fix
33 - Disabled triangle reordering on certain surfaces, including autosprite
34   shaders due to visual errors
35 - Fixed bug in radiosity where sorting of lights by style took forever.
36   Thanks ReBoOT!
37 - Fixed bug in sun lighting code where maps too far off the origin would
38   not be properly it by sun or sky light. Thanks MindLink!
39 - Entity causing a leak will be printed and selected in Radiant if BSP
40   monitoring is enabled. Requested by heeen
41 - Fixed odd bug causing 10x slowdown in lighting in some maps. Should
42   be back to 2.5.7 performance. Also fixed a couple old bugs related to
43   autosprite shader (point) lights and backsplash lights not being styled
44   or setup correctly
45
46
47 2.5.9 (2003-10-12)
48
49 - Disabled triangle reordering for now (crashing on some maps)
50
51
52 2.5.8 (2003-10-02)
53
54 - New: Added two new sun parameters: angular deviation (width of the sun in
55   degrees) and sampling count (jitters). This allows for decent approximation
56   of penumbra "half-shadow" effects from sunlight with 16+ samples. These
57   parameters are accessible for entity lights (including spots and suns) via
58   these entity keys: _deviance and _samples. To use in shaders, use the new
59   q3map_sunExt <r> <g> <b> <brightness> <angle> <elevation> <deviance> <samples>
60 - New: q3map_lightmapFilterRadius <self> <other> for light-emitting shaders.
61   Put *after* any q3map_sun directives or else your sun will be filtered. This
62   is good for eliminating the "stadium lighting" effect from q3map_skyLight.
63   Also usable as an entity key: _filterradius or _filter
64 - New: Quake 2 MD2 model support in PicoModel for misc_model entities
65   (thanks to Nurail!)
66 - Re-enabled vertex-cache-aware triangle reordering. Will probably have a
67   negligible effect on rendering performance, but can't hurt
68 - Added short-circuit to raytracer: any empty nodes (including children) are
69   ignored on sun traces
70 - Added BSP file size printout
71 - Filtering of any kind now disables adaptive supersampling on a per-light,
72   per-ightmap basis
73 - Fixed another _minlight <-> styled light interaction bug (thanks pjw!)
74
75
76 2.5.7 (2003-08-31)
77
78 - New: Jedi Academy support via -game ja
79 - New: DDS (DXT1/3/5) texture support for future games
80 - Re-enabled q3map_surfaceModel support, and the 'oriented' flag works as well
81 - Re-enabled (fixed, really) large external lightmap support
82 - Fixed a bug in the model code that would cause a crash if an uninvertable
83   matrix was created
84 - Fixed a bug in Mathlib m4x4_t code where the tolerance for a singular matrix
85   was too low and crapping out on small (scaled down) matrices
86 - Fixed bug in divide-by-zero on lightmap efficiency calculation
87 - Added -force switch, allows unsupported BSP formats to (try) to be loaded
88
89
90 2.5.6 (2003-08-15)
91
92 - New: can convert BSP files to MAP files via -convert -format map. Note: not
93   perfect by any means, as certain pieces of data are irretrievably lost, such
94   as func_group entities (including terrain specifics), brush face texturing
95   info, and light/misc_model entities with Q3Map2-generated BSPs
96
97
98 2.5.5
99
100 - New: -scale N.N mode to scale the BSP
101 - New: -light -lomem switch to supress trace BSP optimization. This
102   feature trades lighting performance for decreased memory usage
103 - New: Added negative light support (note: will not darken below _minlight value)
104   might screw up radiosity, haven't tested much. Should work with entity
105   lights, shader lights, sun/sky lights and radiosity. Lightfilter shadows
106   tint negative lights too, so the end effect is subtraction of the color
107 - New: Lightstyle support for non-Raven (JK2/SOF2) games, including Quake 3,
108   RTCW, ET, EF. Only works with lightmapped surfaces, use with care
109 - Fixed long standing terrain texturing bug, should produce exact desired
110   results all of the time now. May require fixing alphamaps that were
111   kludged together to accomodate this bug on existing maps
112 - Fixed bug (huh, wtf) causing misc_model surfaces to not be fogged
113 - Fixed bug where fog brushes wouldn't fog surfaces if a global map fog
114   shader was present
115 - Fixed bug where -patchmeta surfaces were being ignored for raytracing
116 - Fixed long-standing bug where twosided surfaces were not correctly
117   bouncing light. You can now have a foggy glass window that re-emits
118   bright light with q3map_bounce 3.0 or so
119 - Fixed really stupid bug in radiosity with bouncing styled lights
120 - Stripping .map and appending .bsp in -info mode
121 - Fixed bug where tesselated brush face surfaces were not being fogged
122 - Twosided surfaces (using cull disable/twosided/none) are now lit twosided
123 - Added tighter tolerance for alphashadow/lightfilter shadowing to raytracer
124   which fixed problem with double shadows from tracing near triangle seams
125 - Brush entities should now be properly fogged. Really.
126 - Styled lightmaps are no longer affected by _minlight (doh)
127
128
129 2.5.4 (2003-04-01)
130
131 - New: q3map_tessSize support for JK2/SOF2
132 - New: -lightmapsize N argument
133 - Fixed bug where switched styled lights weren't working correctly in SOF2/JK2
134 - Fixed bug where external lightmaps with generated shaders were referencing
135   the wrong lightmap
136 - Fixed bug causing lightgrid brushes to be ignored
137 - Added variable sphere around trace sample points to inhibit occluder geometry
138
139
140 2.5.3 (2003-03-06)
141
142 - New: SOF2/JK2 light styles now supported
143 - New: q3map_lightStyle N to set shader lightstyles
144 - New: Tenebrae 2 support via -game tenebrae
145 - New: -light -deluxe and -debugdeluxe for Tenebrae "deluxemap" static
146   lighting algorithm
147 - Light envelopes now properly clipped to the PVS
148 - q3map_vertexScale re-enabled (scales vertex lighting per-shader)
149 - Minor bug in brush bevel code corrected
150 - Brushes from func_group entities are correctly sorted on insertion
151 - Fixed a couple misc warnings to print "percent" instead of "%"
152 - Added -custinfoparms support to -light mode to suppress warnings
153 - _minlight, _minvertexlight and _mingridlight order independent, and now
154   allow for values of 0
155
156
157 2.5.2 (2003-02-17)
158
159 - Fixed crash bugs with global map fog
160 - Model loading really only warns once now
161
162
163 2.5.1 (2003-02-17) (Splash Damage internal release)
164
165 - Added more Hella-Fast juice to light code. Overall should be 35% faster
166 - Refactored surface portion of raytracer code for less memory usage
167 - Changed UVW epsilon in raytracer to catch more edge cases
168 - Removed bounds check on occluded luxel finding, was causing more problems
169   than it was solving
170 - Adaptive antialiasing code now ignores unmapped luxels for better shadow
171   edges and higher performance
172 - Brushes in the BSP are now sorted opaque first
173 - Fixed Really Stupid bug causing MapRawLightmap to take about 4x as long
174 - Added optimization to make MapRawLightmap 2x as fast
175 - New non-sucky quadrilateral subdivision of patches for MapRawLightmap
176 - Patches with < 90 degrees of curvature are now box-lightmapped
177 - Patch vertex normals now correctly stored, fixing bug in 2.5.0
178 - Prints warning if map with < 10% detail brushes is detected
179
180
181 2.5.0 (2003-02-14) (Splash Damage internal release)
182
183 RAYTRACING AND SHADOW CALCULATION
184 - New raytracing code. Rewrote the raytracer to maximize efficiency on modern
185   "caulk-hull" maps. Uses triangle intercept code written by SPoG, based on code
186   by Tomas Moller and Ben Trumbore (Journal of Graphics Tools, 2(1):21-28, 1997)
187   and a biased octree leaf subdivision scheme by Y.T.
188 - Shadows (casting and receiving) are now controllable per-entity
189   New entity keys: "_castShadows" or "_cs" and "_receiveShadows" or "_rc"
190   Values: 0 = no shadows, 1 = worldspawn shadows, > 1 explicit shadow group,
191   negative values imply no worldspawn shadow interation.
192   *Entities, including model2 and RTCW misc_gamemodels can now cast shadows*
193
194 RADIOSITY
195 - Bumped up default and smallest radiosity patch size. Performance should be
196   approximately 4x with a small quality tradeoff
197 - Radiosity patches now trace to centroid of triangle, and not bounds center
198 - Radiosity and surface lights are now nudged around a bit if in solid
199 - Radiosity light generation code is now thread-safe
200 - Radiosity -dump files now .map instead of .pfb
201 - Poorly worded "q3map_bounce" renamed to "q3map_bounceScale" (old still works)
202 - New -bounceonly switch to store only bounced light in the BSP (for Tenebrae)
203
204 MISC LIGHTING
205 - Optimized case where light and sample are coplanar
206 - Forcing nudged luxels to stay within lightmap surfaces' bounds
207
208 CURVED SURFACES
209 - New -subdivisions N argument, works with -patchmeta and -light for setting
210   patch level-of-detail. Default value is 8, use 4 to simulate default Q3
211 - All patch tesselation code changed to create x-patterned tesselation for
212   better lighting
213 - Storing patch LOD info in the .srf file for better patch light/shadows
214
215 FOG
216 - Reworked fog code to fix bad interation with fog and clipped models
217
218 MODELS
219 - Entities with attached MD3/ASE misc_models now have their bounds correctly set
220 - Attached misc_models now support q3map_clipModel for solidity
221 - Missing models will only warn once, rather than spew errors
222
223 MISC
224 - Metasurface merging no longer folds nonplanar triangles into planar surfaces
225   and vice-versa *
226 - Fixed Really Stupid Bug where entity numbering was not loaded by lighting code
227   resulting in lightmaps merging across entity boundaries *
228
229 * Might result in slightly larger BSP. For maximum efficiency, ungroup
230   func_group entities before doing a final compile
231
232 TODO
233 + Document new shadow stuff
234 + Merge adjacent light-casting triangles into convex windings
235
236
237 2.3.38 (2003-02-07)
238
239 - New lighting code, return of Smoove-B. Intelligently antialises shadow edges
240   when you use the new -samples N switch. Get -extra quality in 1/3 the time
241 - New lightmap filtering code. Now using a proper 0.25/0.5/1.0 filter kernel.
242   Also operates on individual lightsources, so per-lightsource filter/kernel
243   settings are now possible
244 - New -patchmeta fixes, now does stitching and adaptive subdivision.
245   Thanks Sock!
246 - Nonsolid patches will no longer be in the BSP when run with -patchmeta
247 - Misc fog fixes, including q3map_noFog support in maps with global _fog
248   support (SOF2/JK2)
249 - Now stripping misc_model entities from the BSP
250 - Fixed disappearing face bug that's been present since 2.3.36.
251   Thanks Shadowspawn!
252
253
254 2.3.37 (2003-01-24)
255
256 - Building from GtkRadiant CVS trunk
257 - Added new brush bevel code by MrElusive to fix lingering aas problems (sweet!)
258 - Added -snap N arg to BSP phase for axial bevel plane snapping to reduce
259   clipped model plane count (note: will muck with above, use with care)
260 - Patches in terrain entities should now have proper vertex alpha set
261 - Fixed bug in fur code where fur was being limited to 2 layers (thanks pazur)
262 - Reduced vertexlight search area to a reasonable size to keep vertex lighting
263   times down
264
265
266 2.3.36 (2003-01-15)
267
268 - Plane hashing re-enabled (I suck)
269 - Plane hashing optimized (faster parsing of larger maps)
270 - Plane finding accuracy code enabled
271 - New ASE clipping code
272   + With above should be 10-50% faster
273   + Should generate 33% fewer planes
274   + Generates mostly-axial 5-sided polyhedra instead of pyramids,
275     for tighter 2-sided clipping
276 - New -light args:
277   + -scale N -- scales all lightsources (area, radiosity, point, sky)
278   + -sky[scale] N -- scales sky lights (q3map_skylight, q3map_sunlight)
279 - Changed fur code to scale fur offset based on original vertex alpha
280
281
282 2.3.35 (2003-01-14)
283
284 - PicoModel now inverts ASE T coordinate
285 - BSP to ASE converter now inverts T coordinate
286 - Disabling 2.3.34 triangle optimization code until I find out why it crashes
287 - Fixed Conscript-q3map2 to use stack_size ld flags directly on Darwin/OS X
288 - Added Conscript-q3map2 to q3map2.dsp for easier Win32 edit, *nix target
289
290
291 2.3.34 (2003-01-08)
292
293 - Building from merged GtkRadiant 1.2 -> 1.3 merged codebase
294 - IMPORTANT NEW CHANGE: Light entities are now STRIPPED from the BSP file.
295   They are re-read in by -light from the MAP file. This has two consequences:
296   + It is no longer necessary to re-BSP & re-vis a map in order to change
297     lighting. You can just change lights in the map file and run -light.
298   + Slightly smaller BSP file, due to fewer entities
299   + Faster loading time, as the game code doesn't have to deal with them
300 - Added new -ne (normal epsilon) and -de (distance epsilon) for tuning precision
301   of plane snapping to correct potential AAS/BSP issues
302 - Using latest PicoModel, with support for RTCW MDC models
303 - Surfaces per raw lightmap are now sorted by shader name, which should give
304   slightly better lightmap efficiency and lower in-game shader counts
305 - Adjusted model code to use correct m4x4_t code & angles key
306 - Minor bugfix in patch color gradient calculation code
307 - Silenced erroneous areaportal warning spew
308 - q3map_tcGen now works on model surfaces
309 - Using default radiosity subdivide of 256 again (should make radiosity faster)
310 - Enabled byte-swapping code so Q3Map2 can be compiled/run on little-endian
311   architectures (Mac OS X)
312
313
314 2.3.33 (2002-12-08)
315
316 - Added new -bouncescale argument for radiosity scaling
317 - Added -pointscale and -areascale for consistent naming
318 - Radiosity patch subdivision code enhanced
319 - Hint portals split the BSP first (higher priority)
320 - Antiportal and areaportal faces split the BSP last, to minimize errors
321 - Areaportals work internally like hint and antiportals, so they no longer need
322   to be full brushes (the other sides can be skip)
323 - External lightmaps are now named "lm_NNNN.tga" in the maps/mapname dir
324 - Cleaned up some of -light argument processing
325 - Planar surfaces w/o lightmaps will no longer be tagged as MST_TRIANGLE_SOUP
326   (this fixes problems with Particle Studio particles dropping out of view)
327
328
329 2.3.32 (2002-11-30)
330
331 - GtkRadiant (1.2.11) integration
332 - Added epsilon to texture plane choose code to eliminate numerical
333   inconsistencies on brush faces slanted at 45 degree angles (bug 637)
334 - Fixed bug in lightmap export after lighting when map contains 0 BSP lightmaps
335 - Adjusted some light tracing constants to fix certain brush/patch seam shadows
336 - Tinkered with skylight code again
337 - Fixed bug where lightgrid would be black if level was compiled with -nogrid
338 - Fixed -approx code to work in floating-point space, using _minlight
339 - Fixed bug where vertex light code was using invalid pvs data to create
340   light list for surface, leading to incorrect vertex lighting
341 - Fixed related bug in anti-light-leak code that was causing brush faces to go
342   black (bug 694)
343 - New: _minlight sets _minvertexlight and (new) _mingridlight automatically
344 - New: _mingridlight key to set minimum grid lighting
345
346
347 2.3.31 (2002-11-21)
348
349 - Stitching the edges of lightmaps on patches that wrap around (cyls and cones)
350   so the seam is no longer visible
351 - The -patchmeta switch works better now, the patches are still stored in the
352   BSP for collision, but are pre-tesselated into nonplanar meta surfaces for
353   more efficient rendering
354 - Better, more uniform lightmap sample position finding on patch meshes
355 - Moved q3map_tcMod and q3map_alphaMod processing to the final phase
356 - New: q3map_skylight AMOUNT ITERATIONS to replace surfacelight on sky surfaces
357   for much faster and more uniform sky illumination
358
359
360 2.3.30 (Splash Damage internal release)
361
362 - Fixed bug in PicoModel ASE material parsing code
363 - Fixed a few seam/lightmap precision/projection errors
364 - Increased MAX_SHADER FILES to 1024 and fixed overrun error when more than that
365   number of shaders was listed in shaderlist.txt
366 - Increased a few compiler maximums for larger maps
367 - New: -np N switch on BSP phase, works like -shadeangle, in that it forces all
368   planar shaders to be nonplanar with the shading angle specified
369 - New: -nohint switch on BSP phase, omits hint brushes from compile for testing
370 - New: -debugaxis switch on light mode. Colors lightmaps based on their lightmap
371   axis (which direction the lightmap was projected on)
372 - New: -debugorigin switch on light mode. Colors lightmaps based on the luxel
373   origin relative to the raw lightmap's bounding box
374 - New: -debugcluster switch on light mode. Colors lightmaps based on the pvs
375   cluster the luxel falls into
376 - New: -convert switch to convert BSP to ASE file (experimental)
377 - New: q3map_lightmapmergable directive to allow terrain to be mapped onto a
378   single lightmap page for seamless terrain shadows
379
380
381 2.3.29 (2002-11-03)
382
383 - Merged with latest CVS, fixed minor issues with matrix order
384 - Fixed minor Sys_FPrintf/Sys_Printf substitution typo in Q3Map2
385 - Expanded debug colors to 12 for debugging surface meshes
386 - PicoModel: fixed ASE loader to support > 1 texture coordinate per-vertex,
387   so more models supported correctly, also loading vertex normals
388 - PicoModel: md3 shader names are now cleaned. Suffixes (such as .tga or .jpg)
389   are stripped, and \ path separators are changed to /
390 - New: Add :q3map to the end of any shader name, and it will be interpreted as
391   the named shader minus :q3map. Example:
392   textures/shaderlab/concrete:q3map -> textures/shaderlab/concrete
393   One potential use is the -approx feature to collapse lightmapped  surfaces
394   into vertexlit surfaces, saving lightmap space/memory
395 - New: q3map_clipModel -- does what you think it does, sort of. This code ix
396   really experimental, and should *only* be used on large models such as terrain
397   (not small decorative models). This code will be evolving. Note: the shader's
398   surfaceparms are inherited by the magic clip brush, so if you have nonsolid
399   in your model's shader that uses q3map_clipModel, then the brush will also
400   be nonsolid
401
402
403 2.3.28 (2002-11-01)
404
405 - Bug 654 (http://zerowing.idsoftware.com/bugzilla/show_bug.cgi?id=654):
406   Fixed problem where brush faces, drawsurfaces, and surfaceparms weren't living
407   together in perfect harmony (terrain surfaceparms now inherited by brushes)
408 - Nodraw fog works now, albeit when you're underneath, surfaces above don't get
409   fogged properly. Could be good for foggy water where you want the above-water
410   portions to only be occluded by the water surface
411 - Bug 656 (http://zerowing.idsoftware.com/bugzilla/show_bug.cgi?id=656):
412   Number of lightgrid points displayed (byte size is currently out of proportion
413   due to internal storage format) when Q3Map is called with the -info switch
414 - Fixed wack surface merging bug where code would attempt to merge triangles not
415   adjacent to the current set, causing bad lightmap projections on nonplanar
416   surfaces
417 - Fixed tiny 1-character bug in 2d lightmap texture allocator where adjacent
418   luxels were being checked for occlusion rather than the actual source luxel
419
420
421 2.3.27 (2002-10-31) Happy Halloween!
422
423 - Fixed minor bug in scriplib bugfix where the last character in a file wasn't
424   being read.
425 - Fixed bug where 0-area or bogus triangles were causing crash in MapRawLightmap
426   if they used a shader with a normalmap (thanks ShadowSpawn)
427 - Fixed bug where lightmaps were getting hosed levelwide on a prerelease version
428   of 2.3.27
429 - Fixed bug where lightmaps were getting knackered on models and certain patches
430 - Merged latest PicoModel version from seaw0lf, adding support for ASE and WF OBJ
431   models (preliminary)
432 - Increased MAX_MAP_PLANES to 0x40000 (~256k)
433
434 Known issues:
435 - Lightmap projection and surface merging on large ASE models sometimes flakes
436 - Surface to brush surfaceparm propogation doesn't work properly with large
437   metasurfaces: http://zerowing.idsoftware.com/bugzilla/show_bug.cgi?id=654
438
439
440 2.3.26 (2002-10-27)
441
442 - Now using GtkRadiant's libpng and zlib config (linked as DLLs)
443 - Fixed bug in script parser where repeat calls to GetToken() were causing
444   memory corruption
445 - Fixed SOF2 -rename bug
446 - When using -game sof2 or -game jk2, the -flares argument is implied
447 - Added -noflares argument to disable the above behavior
448 - Added support for flares on entities. Use one of the following keys:
449   "_flare" "1" -- use default flare (different for each game)
450   "_flareshader" "path/to/flareshader" -- use a specific flare shader
451   Note: This only matters in SOF2/JK2 now. Make a light targetted (a spotlight)
452   to get it to aim the correct direction, otherwise it defaults to pointing 
453   downward. You cannot have omnidirectional flares
454 - Lightgrid size is automatically increased to accomodate large maps. The
455   MAX_MAP_LIGHTGRID error will never happen again
456
457
458 2.3.25 (2002-10-22)
459
460 - Go Giants!
461 - Fixed bug where Q3Map would crash on writing the BSP after the light stage.
462   Thanks to Rap7or (#q3map) and loon8 (Q3W forums) [bug 641]
463 - Fixed bug where surface lights were not affecting the light grid properly.
464   Thanks to Shadowspawn and djbob [bug 642]
465 - NEW: Added -faster support to lightgrid calculations while fixing previous bug
466 - NEW: Changed it so the BSP file is written to a temp file first, then renamed.
467   This should prevent BSP file corruption on crashes during writes
468
469
470 2.3.24 (2002-10-20)
471
472 - Fixed numerous outstanding bugs and issues.
473 - Normal interpolation is now improved. It's slightly slower, but more 'correct'
474   in cases where you have 10 triangles in one plane and 1 triangle in another
475   meeting up and the 10 triangles were over-affecting the average. Only new
476   identical normals are averaged now. This change affects phong shading, meta
477   surfaces, and PicoModel
478 - PicoModel up to version 0.7.6, BSD license, better 3DS model support
479 - PicoModel library now fixes broken normals on MD3 and 3DS models
480 - Bumpmapping code is improved. The correct tangent vectors per-triangle are
481   now calculated so the bumpmaps are consistent with regards to light direction
482 - Metasurface merging code optimized. Should be about 100x as fast on complex
483   maps or maps using models with high triangle counts
484 - Vertexlight code tweaked a bit
485 - Triangle/winding orders now more consistent. Tesselated surfaces will have
486   a uniform triangle ordering (thanks RR2DO2)
487 - NEW: "vertexDeform move" now parsed and surfaces are merged into the
488   appropriate  BSP leaves they may enter into (thanks to Bart Vrijkorte)
489 - NEW: shader command: q3map_alphaMod. Currently takes a single form:
490   q3map_alphaMod dotproduct ( NX NY NZ )
491   where NX NY NZ are a unit normal (length of 1.0) specifying direction.
492   An example use would be snow in a shader's 2nd pass, using alphaFunc or
493   blendFunc:
494   q3map_alphaMod dotproduct ( 0 0 1 ) // surfaces facing upwards have snow
495   (idea contributed by RR2DO2)
496
497
498 2.3.23 (2002-10-18)
499
500 - In my haste to release the previous version, I neglected to give credit where
501   it was due. Seaw0lf had as much (probably more) to do with the new model
502   loading library (PicoModel). Because of his efforts, you can load 3DS models
503   and use them in misc_model entities.
504 - PicoModel model library up to version 0.7. Improved 3DS support, more stable.
505 - Surface models still not reenabled. Soon. :)
506 - You can now remap a misc_model's shaders like this:
507   Key "_remapNN" "the/model/shader;the/real/shader"
508   This works just like TA terrain vertexRemapShader key. You can also supply a
509   * glob for the source shader if you want all your model's shaders to use the
510   specified shader:
511   "_remap" "*;models/mapobjects/tree/bark"
512
513
514 2.3.22 (2002-10-16)
515
516 - Moving to sensible Linux-style versioning.
517 - The misc_model code has been completely rewritten, breaking surface models.
518   Surface models will reappear in the next release, once the new model API has
519   stablized.
520 - New: MD3 and 3D Studio 3DS models now natively supported.
521 - The misc_model "angles" key now supported. Values: "pitch yaw roll" in keeping
522   with standard Quake 3 angles order.
523 - Models scaled with "modelscale_vec" now have proper normal scaling/rotation
524   (thanks SPOG).
525 - Models can now be lightmapped.
526 - Models can now have > 1000 vertexes per surface.
527 - For best results for above, add the following to models' shaders:
528   q3map_splotchfix
529   q3map_nonplanar
530 - 3DS models' MATERIAL NAMES ARE THE FINAL Q3 SHADER NAMES. YOU HAVE BEEN WARNED.
531 - Models are generally 13373R. :)
532
533
534 2.3.0-a21 (2002-10-02)
535
536 - Fixed a stack of really stupid bugs in the lightgrid code. Should be faster
537   and more predictable now.
538 - SOF2/JK2 lightgrid now compiled. This is the first version of Q3Map2 that can
539   compile full, release-worthy SOF2 and JK2 maps.
540 - SOF2/JK2 damageshader and damagable brush faces should work correctly now.
541
542
543 2.3.0-a20 (2002-09-26)
544
545 - SOF2/JK2 worldspawn "fog" (and "_fog") shader key support for levelwide fog
546 - SOF2/JK2 light "scale" key to scale light brightness
547 - SOF2/JK2 -rename function for _bsp and _rmg_bsp shader renaming
548
549
550 2.3.0-a19 (2002-09-24)
551
552 - Shaders can now be subclassed (Q3Map relavant portions only, such as
553   surfaceparms, lighting, texture projection, etc). To subclass an existing
554   shader, add "q3map_baseshader X" where X is the name of the base shader.
555 - Preliminary auto-model distribution over surfaces. You can now have things
556   like grass and tree models automatically distributed across your terrain
557   or other surfaces. To wit:
558
559   q3map_surfacemodel models/mapobjects/tree2/tree2.md3 64 0.001 0.5 4.0 0 360 1
560
561   q3map_surfacemodel <path to md3> <density in units> <odds of appearing>
562       <min scale> <max scale> <min angle> <max angle> <oriented>
563   
564   The last flag is 1 or 0, and sets whether the model gets fitted to the
565   orientation of the surface. Not functional yet. See screenshots page for
566   shots of this in action.
567
568
569 2.3.0-a18 (2002-09-21)
570
571 - misc_models can now be attached to any brush model entity. Just target the
572   brush entity with the misc_model (select model, then entity, hit Ctrl+K)
573 - q3map_tcMod translate (or shift or offset) <s offset> <t offset>
574 - q3map_tcMod rotate <degrees> (rotates around origin, not center)
575 - q3map_tcMod scale <s scale> <t scale>
576 - Metasurface merging now much, much better. Merges into roughly rectangular or
577   square areas wherever possible
578 - q3map_terrain no longer sets Z-axis lightmap projection. It must be set in
579   the terrain layer shaders if you want previous behavior
580 - Worlspawn _blocksize key now supports 3 elements for setting X Y and Z splits
581   independently of each other (use a value of 0 for no splits on that axis)
582 - Misc bugfixes
583
584
585 2.3.0-a1 through 2.3.0-a17 (2002-07 through 2002-09-20)
586
587 - Elite Force support (via -game ef)
588 - SOF2 and JK2 support (via -game sof2 or -game jk2)
589 - All new image handling with PNG support
590 - q3map_lightimage specifies image for radiosity and lighting
591 - External lightmaps, set using q3map_lightmapsize <width> <height>. Up to
592   1024 x 1024 supported.
593 - q3map_lightmapGamma <value> sets the brightness scale of a lightmap
594 - q3map_lightmapsampleoffset <distance> to fix glitches in lightmapped terrain
595 - Tons more features and bugfixes. See the forum threads for details/screenshots
596 - Two new surfaceparms, "antiportal" and "skip," and associated shaders, for
597   allowing the mapper to more cleanly set up visibility data
598 - Lightmaps will always have square texels now (no more stretching)
599 - Vertex light improvements
600 - Light grid improvements
601 - q3map_lightrgb support for RTCW
602
603
604
605
606
607