bottleneck fillrate

Started by
11 comments, last by MARS_999 19 years, 5 months ago
Hi, everybody. I recently boosted my drawing procedures by using DrawElements and VBOs. I was overwhelmed by the raw triangle force my graphics card actually has. I got more than 12 MTris/s fully vertex lightened, blended, and textured. However, today I started thinking about how to create Nebula Effects, and numerous approaches showed me that all geometric detail potentials are worthless when it comes to fill rate questions. My 12Mtris/s scene was a bunch of spheres rotating about a star like center filling up about 50% of the screen. Then, today I simply rendered 20 cubes(!) with alpha 0.1 all together filling up just 25% of the screen. Using about 500 Trianlges was enough to get the same fps as with my 100.000 Trianlges scene before. How come? 50 million transitors-and they can only render 20 cubes! Obviously, my approach was a little ... stupid. But still... What do you think is a good compatible way to draw nebulas, volume lights, fog, haze, etc. by taking advantage of the incredible geometric power of todays graphics crads? Or do you say, there is no possible way to render a big nice looking nebula filling the entire screen and still get frame rates around 100 fps?
Advertisement
Well, the frame rate depends on your card somewhat, however Freespace 2 had some wonderfull nebula effects in it, if you do a google for its source code you can spend some time picking that apart to see how they did it, and keep in mind they were getting ~30fps @ 1024*768*32 on a TNT2 Ultra (with a 350Mhz cpu iirc)
I'm going to do a guess here, and say they might be doing it the same way as homeworld; by using vertex-colors only. No texture, no lighting, just plain vertex position + color.
yes as youve discovered normally the amount of pixels drawn has more of a beariung on the fps, than number of vertices,
hell even my gf2mx200 could do 20million tris/sec.

>>Or do you say, there is no possible way to render a big nice looking nebula filling the entire screen and still get frame rates around 100 fps<<

some possible methods,
*do u need blending? if not disable it.
if u do, enable alphatesting as well.
*use texture compression if possible
*check the internal formats of your textures, some are faster than others
*disable depthwrites if unnecessary
etc
Just out of curosity, what video card do you have? If it's an ATi card, you might be experiencing the same fillrate problems I'm having. :\
___________________________________Digital Paint: Paintball 2.0jitspoe's joint
Yes, it's an ATI 9600 Mob.

rick_appleton, what do you mean by vertex-colors?
billboards? but not textured...?
Quote:Original post by Viper173
Yes, it's an ATI 9600 Mob.

rick_appleton, what do you mean by vertex-colors?
billboards? but not textured...?


Vertex colors as in each vertex has a color value. glColor3f or glColor4f for each vertex. And if you are using lighting you may want to use glSecondaryColor3/4f... Not sure if you figured this out or were told yet...
Just do not fill entire screen over and over, that the key. Do not draw 500 potentially fullscreen billboards. (because, fillrate of cards is around gigapixels per second. That is, you can 1000, maybe 2000 or 3000 times fill your screen.)

I'm sure you can achieve desired effect without doing all that.
I have some esperience with such things..clickster (may not run on ATI),

screen0

screen1

screen2
(12..15 FPS mainly because my FeGorceFX 5200 64bit bus is slow. But even with such card, it almost never gets below 12..15 fps)

My particles that form "sum light" of stars is just particles with textures with single-color circle painted on it. And i'm not filling entire screen over and over. I'm not getting high FPS but i know that i can fix that.

[Edited by - Dmytry on October 24, 2004 3:53:51 AM]
Quote:Original post by MARS_999
Quote:Original post by Viper173
Yes, it's an ATI 9600 Mob.

rick_appleton, what do you mean by vertex-colors?
billboards? but not textured...?


Vertex colors as in each vertex has a color value. glColor3f or glColor4f for each vertex. And if you are using lighting you may want to use glSecondaryColor3/4f... Not sure if you figured this out or were told yet...


Yep, that's it. The idea is to use the processing power of the videocard not to look up texture colors, but to assign them your self.

Imagine a large sphere with yourself on the inside. Now just create vertices on the sphere where you want to show the nebula and color the vertices themselves in a nice pattern.

Here's a page that explains how the backgrounds in Homeworld are made.
why use sphere? why not use cubemap???

This topic is closed to new replies.

Advertisement