Shadow mapping on legacy or fixed-function hardware

Within the graphics engine I’m working on, the engine automatically switches between a fixed-function renderer and a glsl based renderer depending on the capabilities of the hardware. I can perform hardware shadow mapping in both versions (since depth textures were added in GL 1.3). However, with fixed-function I can only apply shadows from one light at a time whereas in glsl I can do ~3-4 if I wanted to.

I’m wondering if it’s best to choose a single light to do shadow mapping on in ffp mode, or to do an iterative algorithm that renders into a shadow map, applies that light’s shadows to the final rendering and then moves to the next light. Do you think the performance hit outweighs the visual improvements from having multiple shadow casting lights?

Thanks,

Is the target aud. large enough to even worry about?

I have no idea, of course I have grand plans to make millions with this, but the audience will probably be small. I was designing the engine to be as flexible as possible, but it’s always interested me more to do a shader-driven engine than ffp.

Besides, with the way hardware is going, I should probably just do a single light for ffp. Anything that’s that old wouldn’t run fast enough with more than one shadow map anyway. I think I have my answer, but opinions are still appreciated.

the problem is not pre 2001 graphics cards but the modern intel crapsets that are installed into every laptop, most of them don’t support shaders or do it on software performance level.

I know what you mean and it is even a problem when using vertex arrays sometimes. A developer who was saying my game is slow almost insulted me recently because I answered him the cheap graphic chips of Intel for laptop are really inefficient.

Yeah, I did forget about integrated intel chips. So the questions becomes: Do I care enough about this segment to add a huge amount of work to support it or do I spend my time on other features?

Integrated chipsets are the bane of our existence. My personal feeling is to support the better cards first, if people really become interested in running nice graphics on their crappy laptops, they’ll either demand a better driver or upgrade (or they won’t run the game).

If they’re not interested in upgrading to something powerful enough to do what I want it to do, then I’m much less interested in supporting them. Sure it’s a large market segment, but for the things I’m interested in, I’d rather not reward users who are complacent in not moving the hardware level forward.

It is more a problem of reliability than a problem of power in my case. Even some ATI chips designed in 2003 can rival with some modern Intel crapsets. I agree with making an effort for old but reliable chips, I disagree with fixing driver bugs in my own code except if it requires only a tiny change that does not impact the whole program.

On my view, if you don’t succeed in implementing shadow mapping with fixed-function hardware, only turn it off on unsupported machines.

Problem is, that integrated chipsets (and especially Intel) are pretty common. I can share some numbers from those people who agreed to let Robombs (see signature) talk back to my server. This is the data collected in about 11 month:


Intel 945GM:                        1526
S3G UniChrome Pro IGP:              679
GeForce 8600(M) GT/GS:              607
GeForce 6100/6150SE:                579
Intel 965/963 GMA:                  556
GeForce 7300 GT/7200 GS:            533
Intel Bear Lake B:                  408
GeForce 6200(M)/6200 SE:            353
GeForce 8400(M) G/GS:               326
GeForce FX 5200:                    317
ATI Radeon 9000:                    276
S3 Graphics Deltachrome:            232
ATI Radeon X1900 Series:            228
GeForce 9400:                       227
Intel 915GM:                        226
Intel 865GM:                        213
GeForce 7000/7025/7050:             206
ATI HD 2600 PRO/XT:                 187
Intel GMA X3100:                    180
GeForce 8500 GT:                    177
Intel 950 GMA:                      175
GeForce4 MX 420/440:                153
GeForce 7100/7150 GS:               147
GeForce 7600 GT/GS:                 135
GeForce 8800 GT/GTS/GTX:            133
SiS-Compatible VGA:                 131
SiS Mirage 3 Graphics:              126
ATI Radeon 9200/9200SE:             124
ATI Radeon X1600 Series:            119
Intel Cantiga:                      116
ATI HD 3800 Series:                 109
GeForce FX 5500:                    109
GeForce 9600(M)/GT:                 98
GeForce 6600 GT:                    92
DRI Radeon/R300:                    92
ATI Radeon X550:                    91
ATI Radeon X1550:                   90
ATI Xpress Series:                  90
GeForce 9500(M)/GS/GT:              89
Intel 845G:                         87
ATI HD 2400 XT:                     83
ATI HD 3200:                        81
S3 Graphics-KM400:                  75
ATI 9550/1050/X1050:                74
ATI Radeon X2300:                   71
DRI Radeon/R200:                    66
S3 ProSavage:                       59
GeForce2 MX:                        59
Geforce 9800 GT:                    55
ATI HD 4800 Series:                 55
Intel Brookdale-G:                  54
ATI Radeon X1200/X1250:             54
ATI 9600 PRO/XT/9600SE:             51
Intel Broadwater-G:                 48
GeForce FX 5600:                    46
SiS-741:                            36
GeForce 8200:                       34
ATI Radeon X600:                    32
Mesa GLX:                           31
ATI Radeon X300:                    31
Intel 855GM:                        30
ATI Radeon X700:                    29
Mesa Software:                      28
ATI Radeon X800/X850 XL:            26
GeForce4 Ti 4200/4400:              24
ATI HD 3470:                        23
ATI HD 3600 Series:                 23
S3 Graphics-K8M800:                 22
NVidia Quadro FX 370:               22
GeForce 7350/7400:                  21
GeForce 7900 GS:                    21
GeForce 9300(M):                    21
ATI Radeon 7500:                    20
ATI Radeon 7000:                    20
SiS-650:                            20
Intel Springdale-G:                 20
GeForce 6800 (GT):                  16
Intel G33:                          16
ATI HD 3450:                        15
NVidia Quadro NVS 110M:             15
NVidia Quadro NVS 140M:             15
SiS-760:                            14
GeForce 9200(M):                    14
ATI Radeon X1300/X1350:             13
GeForce 7500:                       13
GeForce 6500:                       13
ATI Radeon X1400:                   13
ATI 9800 PRO/SE:                    12
GeForce 7800 GT:                    12
NVidia RIVA TNT2:                   11
ATI Radeon X1950:                   11
ATI Rage 128 PRO:                   9
ATI HD 3850:                        8
ATI HD 3400:                        7
GeForce FX 5700:                    7
GeForce3:                           6
Intel Montara-GM:                   6
Intel 810:                          5
SiS-661:                            4
GeForce 8300:                       3
GeForce2 GTS:                       3
SiS-Xabre:                          2
Intel Integrated:                   2
ATI Radeon X1100:                   2
ATI 9700 PRO:                       2
NVidia Quadro NVS 210S:             2
Intel Solano:                       2
ATI RV250:                          2
GeForce 7950 GX2:                   2
ATI HD 3100:                        1
DRI Radeon:                         1
GeForce 8700(M):                    1
GeForce G92-200:                    1
ATI Radeon X200:                    1
Matrox G400:                        1
NVidia Quadro NVS 290:              1


CPUs:                               
2:                                  7251
1:                                  4448
4:                                  303
3:                                  50
8:                                  26


Each system is only counted once. You may wonder why S3 Unichrome comes second place and i do too…and i have no idea. Robombs is most popular in brasil (don’t know why…), so maybe S3 is pretty popular there…i don’t know.

I realize that those Intel chips are quite common, it’s what’s stuck in all of the economy laptops that the majority of people buy. But as a programmer who is interested in making games that look beautiful in 3D, I have to make the choice to ignore or limit that user base.

IMO building products that don’t work on the baseline is the only way of forcing the bar higher for the baseline (or of going out of business, but since I’m not making any money anyway, this isn’t an issue).

Interesting numbers, but how does “willingness to pay for a game” relate to the graphics card the user has? This ratio may be also important factor in deciding the minimum requirements for a game.