Commentary for ATW1
This
map was started as a techdemo to try out a big well-lit outdoor area
with 3D skyboxes and with reflective water in the DOOM 3 engine.
The map did end up severely CPU-bound, however, mostly because of the
geometry throughput and batch counts.
The design of the map
started with a first sketch of the canal and a gameplay flow overview.
The choice of contemporary, rundown city look was inspired by both
Half-Life 2 and a desire to do a custom DOOM 3 map that didn’t use the
extensive base/metal textures created by id Software.
The
gameplay of the map is pretty straightforward with two main avenues of
passage between both ends of the map. The canal provides a different
(but sometimes frustrating) gameplay hazard that tends to make players
watch where they step. Having said that, gameplay was at best an
afterthought to the prime objective of this map.
Performance-wise,
this map turned out very poor which is not surprising because I set out
to make a techdemo, however, I quickly hit against DOOM 3’s compiler
limits so I had to use very unorthodox visportal placing and group
pieces of geometry into func_statics to get the map to even compile.
Another
problem I faced was that I couldn’t put any visportal in contact with
the water surface which means the big water area is all batched and
culled together.
By creating many func_static entities where
there was no inherent need caused two problems: first it worsened the
batching performance and secondly these triangles wouldn’t be able to
take advantage of DOOM 3’s static shadow pre-calc optimisation but it
was inevitable if I wanted to get the map to compile.
So, the
bottle-neck is either in the batching throughput or CPU-based culling
(it’s hard to know exactly because DOOM 3 has limited profiling
capabilities) because turning off the mirror effect of the water
instantly doubles framerates in the worst case scenario which follows,
because we’re nearly halving the triangles rendered.