A Brief History Of NVIDIA And SEGA
Alan writes: "FiringSquad just posted an article on the history of NVIDIA. What makes this interesting is that they include a little bit about the NV2 chip which was developed originally for the Dreamcast. It was using quadratic texture maps (a derivative of NURBS) rather than polygons! The article is over here."
What makes this interesting is that they include a little bit about the NV2 chip which was developed originally for the Dreamcast. It was using quadratic texture maps (a derivative of NURBS) rather than polygons!
I'm sorry but this makes no sense. NV2 chip used qudratic surfaces and not quadratic texture maps. This is like comparing apples and oranges.
The article hints that the NV1's quadratic surfaces might have actually been a good thing, and it was held back by Microsoft's push to conformity with triangles.
:-)
Er, no.
For several years now, Nvidia has been kicking ass like no other graphics company, but lets not romanticize the early days. The NV1 sucked bad, and it would have been damaging to the development of 3D accelerators if it had gotten more widespread success. Microsoft did a good thing by standing firm against Nvidia's pressure to add quadratic surfaces to the initial version of D3D.
There is an intuitive notion that curved surfaces are "better" than triangles, because it takes lots of triangles to aproximate a curved surface.
In their most general form, they can be degenerated to perform the same functions as triangles, just at a huge waste in specification traffic.
Unfortunately, there have been a long string of products that miss the "most general form" part, and implement some form of patch surface that requires textures to be aligned with the patch isoparms. This seems to stem from a background in 2D graphics, where the natural progression from sliding sprites around goes to scaling them, then rotating them, then projecting them, then curving them.
3DO did it. Saturn did it. NV1 did it. Some people are probably working on displacement mapping schemes right now that are making the same mistake.
Without the ability to separate the texturing from the geometry, you can't clip any geometry in a general way (not even mentioning the fact that clipping a curve along anything but an isoparm will raise it's order), and you either live with texel density varying wildly and degenerating to points, or you have texture seams between every change in density. No ability to rotate a texture on a surface, project a texture across multiple surfaces, etc. You can't replace the generality if a triangle with primitives like that.
Even aside from the theoretical issues, NV1 didn't have any form of hidden surface removal, and the curve subdivision didn't stitch, frustum clip or do perspective. It was a gimmick, not a tool.
All water under the bridge now, of course. NV20 rocks.
John Carmack
What I am supprised to see is the lack of mention in the article to NVidia and SGI. The new SGI Intel boxes are running a variation of the nv15 chipset (and do a good job of it). Also, NVidia, if I remember right, has a ton of ex-SGI employees.
-I just work here... how am I supposed to know?
NVidia does not have a monopoly in any market right now. What they do offer is the best (IMHO) consumer-level graphics card on the market. As well as the second-best. And the third-best. (I'm talking GeForce2 Ultra, GeForce2 Pro, and GeForce 2 here.) That is very different from having a monopoly.
The ATI Radeon is also a reasonably good card, especially if you get the all-in-wonder version. EvilKyro, or whatever it is called, looks interesting, but I don't know all the details about it yet. The point is, NVidia does not have a monopoly.
If you think about it, NVidia is now at the point that 3dfx was at a few years back. A year ahead of the competition. However, unlike 3dfx, NVidia is not encouraging people to use a proprietary API that only works with their own hardware. The best way to access an NVidia card is via OpenGL (even on Windows), which is the most open, cross-platform 3D API starndard out there. NVidia has implemented proprietary extensions to OpenGL, but the extensions are purposely laid out such that it is easy to write software which only uses the extensions if they are available, and uses GL standard calls otherwise. (I know this from experience...)
Furthermore, unlike some well-known monopolistic companies, NVidia is still innovating at an alarming rate. As long as they keep doing so, and their prices stay where they are (GeForce 2 for $130, anyone?), I'm happy.
------
Tiling and the quadratic stuff are completely different. The quadratic stuff is to have a curved primitive. While that's a good thing, most surfaces you'll want to draw won't be quadratic, so you're just slightly better off than if you had triangles. There were also problems in how to do the texturing (well, actually, texturing wasn't too important back then so it didn't go into NV2.) Note that the new DirectX 8 has cubic splines in it, which ought to be better than quadratic primitives.
The modern approach to drawing these curved primitives is to tesselate them into many triangles. If you had to draw a cubic spline using some quadratic primitive, you would have to "tesselate" your cubic primitive into smaller quadratic ones.
Tiling is where you divide your screen into tiles (say, 16x16 pixels per tile). The hardware buffers all your glTriangles (or whatever), doesn't draw a thing until you glSwapBuffers (which would normally display the picture). At that point, it will sort all the triangles into the tiles (some triangles stradle several tiles). Then, each tile is drawn one after the other. The main advantage is that this per-tile work can all be done on-chip instead of doing it in frame buffer memory. Frame buffer bandwidth is one of the most limiting aspects of modern graphics chip design.
The Kyro also uses a scan-line algorithm (if I understand correctly). In particular, it actually sort all the surfaces from front to back (or maybe back to front) to get transparencies correctly (or at least, its Sega incarnation in the DreamCast does this). Unfortunately, this great feature will run against 3d API's (both DirectX and OpenGL) which don't sit easily with that kind of business. Nevertheless, I do believe that such an extension will go into the API's in the near future; the developers are asking for it and the chip designers are trying to get it working.
I design 3d chips for an important graphics company but because of my company's culture, I'd better stay anonymous and not even say whom I work for.