The only “problem” is the enormous inertia built into the industry when it comes to knowledge and technology (do you think nVidia and AMD/ATI would like to see their precious IP and know-how going down the drain?) about polygonial engines. All this stuff with shadows and “dumb” lightning models is because of the polygon based (or maybe rather “raster based”) roots of current 3D tech, that all goes away if you change the basics. Raytracing gives perfect shadows, and as good lighting as you can spend cycles on, every time.
I thought I’d mention a game where this did happen – where a developer just ignored all current 3d trends and struck out on their own. Outcast came out in 1999, so the game is about eight years old now. Keep that in mind when looking at the screenshots below.
The game uses voxels for rendering instead of polygons. (Actually, I think it uses voxels for scenery, and polygons for characters.) Voxels are sort of a strange technology that never really caught on. Voxels are really, really good at making nice, round terrain that doesn’t have the pixelization or tiling you get with polygon-based terrain. However, voxels kind of suck for making square objects or things with hard edges.
If you look at the screenshot below, you’ll see a lot of what I’m talking about. The line of grey jaggies to the left of the main character (the guy in the orange shirt) is the top of a set of stairs. This hard, square edge looks like terrible from this angle. This is the drawback of using voxels.
The game was software-only – it couldn’t make use of a 3d card. It didn’t have the advantages of 3d acceleration, but it didn’t have any of the limitations, either. This means that a lot of the rendering effects in the game were well ahead of their time. It had normal-mapping – then called bump-mapping – which takes a flat textured surface and alters the way light strikes it to make it look like it is “bumpy”.
You can see how the folds of clothing really look like creased surfaces and not like a flat texture with areas of light and dark on it. The folds of clothing on the different characters all agree on which way the light source is aiming. Without bump / normal mapping, different characters (or different parts of the same character) will all be doing their own thing, each one suggesting that the light is coming from a different direction. The result is the the eye stops falling for the faux-bumpyness and recognizes them all as flat surfaces.
Note also that your character casts a real shadow, instead of just projecting a blob of circular darkness onto the ground at his feet, which is how other games were doing shadows in 1999.
It had depth-of-field, which even today is one of those features that is usually only available for people with high-end graphics hardware. I forgot to enable it for this screenshot, but the effect is a bit subtle. It just made stuff in the distance look blurry. This is great for simulating the way movies look (stuff in the foreground is sharp, stuff in the background is out of focus) as well as covering the voxel jaggies on buildings in the distance.
The game had other breakthroughs as well, such as expansive outdoor areas without walls or load screens.
It had bump-mapped water with environment mapping, which even today looks fantastic.
The fact that the game depended on the CPU for rendering meant that it was very fill-rate sensitive. The screenshots you see here are taken from the game in the super-extra-high resolution of 512×384, which is as high as it will go. In 1999, that was about the size of “low resolution mode” in other games, and today most games can’t go that low. Still, I’ve always believed that making better pixels is more important than making more pixels.
Quite an interesting game, technology-wise. I never saw anything else like it, and indeed a lot of the effects – like bump-mapping on characters – I didn’t see again until Thief 3.
The Best of 2017
My picks for what was important, awesome, or worth talking about in 2017.
So what happens when a SOFTWARE engineer tries to review hardware? This. This happens.
Good Robot Dev Blog
An ongoing series where I work on making a 2D action game from scratch.
Marvel's Civil War
Team Cap or Team Iron Man? More importantly, what basis would you use for making that decision?
A programming project where I set out to make a Minecraft-style world so I can experiment with Octree data.