What's your opinion on shader replacement on the driver by the IHVs? Always good, always bad, only good if the output is mathematically equivalent?

Generally, I'm very allergic if driver changes the output behind my back. However, if all pixels end up in the right spots, no problemo - let the driver replace whatever it wants! So, 3rd option would be my choice.

But let’s not be too naive about all that shader-replacement witch-hunting... (Going back thru time...) Yes, on one side you had NV playing unfair, because at that time all they have was FX-no-good series and they desperately needed something in order to get closer to Radeon 9700 and 9800. This was not cool move, and everyone knows that.

However, lots of press-guys omitted the fact that replacing the shaders can be a good thing if output quality stays the same. And why they did that? Mostly because of ATI marketing hype. ATI was so confident (and they had the rights to be confident) about their R300, that they didn't have the need for shader replacement. But at the same time they felt the urge to kick NV some more, so they started hunting NV for each and every pixel on screen. Not fair in my book. :(

Click for a bigger version
Do you think it's important for 3D engines to have a big checklist of features that must be implemented even if they are not used by the primary game, or do you believe there's a virtue in having a lean engine dedicated solely to supporting the primary game?

At Croteam we are definitely for the first option! The main reason is that we licence the engine, so it makes sense to make it more general, covering somewhat different game genres.

So, apart from some things that we're not eager to do (like stencil shadows, for example :), the general idea is that engine should have tons of features. It needs to be "above" the game, not just integrated part of it. So I would say that it's not wise (at least in our case) to tailor the engine around one specific game.

An example: we've stated working on the new engine and "Serious Sam 2" the game at the same time (yes, not very smart idea, now we know :). In that case we made sure that our engine is designed as a very open system, but started implementing only those features that will be utilized by SSam2. Later on, we'll just continue our work on the engine, making it more powerful and usable for "other games".

In your comments posted with our Sapphire Hybrid Radeon X800XL 512MB review it was clear more video memory is very important to you. How has 3Dc been changing that aspect of development?

3Dc, although generally good, is missing one rather important feature - sampling of 3rd component directly from texture unit. Without this you need to derive third component in the shader, which makes it pretty unusable for PS1.x (especially when it comes to non-trivial shaders).

Yeah, I know that IHVs (both ATI and NV) want to ditch the old stuff ASAP, but game developers needs to support a wide variety of platforms, which is not an easy task. And 3Dc blew a chance to make it easier for us. :(

This way, we need to sacrifice ~4 extra instructions in pixel shaders (2.0)... OK, I admit - it doesn't look that much considering power of today’s GPUs. But... if you take into account that there are lots of low-end GPUs out there, and they really have issues with running 2.0 shaders. And on top of that, when your optimized shader has ~10 instructions, 4 more is starting to look pretty scary, isn't it? :( So, looking from this angle, 3Dc might not look like a big step forward, especially when compared with two-component DXT5 format (as an alternative for normal-map compression).