id Software programmer Brian Hook made an update to
his .plan talking about adding a new way of approximating lightmaps on
lower-end accelerators to make them more capable of acceptable performance (if not visual
quality) in Quake III Arena. Here's the update:
John had been nagging me to implement our vertex lit approximation of lightmaps
for lower end cards. This has several key benefits. The obvious one is better performance
-- single pass instead of two pass lighting, effectively halving the number of triangles
tossed down the API on non-multitexture hardware. The second, and biggest (to me), benefit
is enhanced compatibility with lower end hardware.
A couple cards have sort of been nagging at the back of our minds when it comes to market
saturation, compatibility, and performance. While working on Quake3 we've primarily tested
and worried about the real high performance, high quality accelerators such as ATI Rage128
and NVidia RivaTNT, and we know other accelerators such as Permedia3 and Savage4 and
Voodoo3 will run our stuff just great. But there are a few cards that have been
problematic for us because A.) they don't have all the features or performance we need and
B.) there are about a zillion of them out there in our customer base.
While differences in fill rate are a source of concern, it's easy enough to scale for fill
rate by moving down video modes (320x240 has 1/4 the pixel fill rate requirements of
640x480). Triangle throughput, however, is much more difficult to compensate for since we
don't do level-of-detail on the world, and we only do a very coarse LOD on models. Going
to a vertex lit model halves the number of triangles rendered in the world compared to
lightmapping, which helps both slower graphics cards and slower CPUs.
The other problem is the Permedia2's lack of src*dst blending. This has been a sticking
point for quite some time, where we've been tempted to say "Well, screw the
Permedia2, it's the odd man out and it's in workstations anyway, not consumer
machines". By doing the vertex lighting we've removed this problem AND given the P2 a
little performance boost.
So I'm now very confident that we'll run reliably and fairly quickly on fairly low end
hardware, i.e. hardware that has not been our conscious target platform.
The vertex lit model has one major drawback -- it's not exactly attractive. It's not
horrible -- Jedi Knight and Descent both used vertex lighting -- but it's not very
competitive in terms of image quality with, say, Quake3's native rendering method. But I
take some comfort knowing that no matter what, those early cards had some serious image
quality issues (lack of proper MIP mapping, cracks/gaps/sparkles, missing blend modes), so
this isn't a huge loss.
The current angle of attack is that on Permedia2 we'll automatically turn on vertex
lighting. For Rage Pro and Rendition V2200 we'll probably recommend it. All users will
have the option of going for the "fast and ugly" path, and I'm sure you hardcore
players out there will do just that so you can hit your 390fps on a TNT at 320x240 with no
lightmaps. :-)
Quake3's range of scalability is going to be very good. My hope is that we can get fairly
consistent performance from a PII/233 with a Rage Pro all the way up to a PIII/550 w/
Rage128/TNT2/Voodoo3.