I think the biggest argument against this is how much it would be used. I'd be very surprised if many people used the feature to any great extent. I mean, ZDoom has supported 16 angle sprites for many years and yet there are only a tiny number of mods that ever used them. The resource production implications are enormous for this suggestion.

Models (be that MD2/MD3/Unreal format or Voxels) do pretty much what is required here and, because they are designed for a true 3D view, would probably do it better too.

Arctangent wrote:

Actor sprites require a very specific naming scheme, which isn't expandable at all. Like, how would you add a top view of BAL1A0? BOSSE3? POSSF2F8? That's already up to eight characters, the max amount in the .wad format. Even if we make this feature .pk3-only, though, how would we add information for vertical viewing angle without confusing the parser?

Not that I think this feature is viable, but that's actually one of the things that probably could be solved reasonably easily. There is already something similar in principle to what I'm thinking about in the player sprites. PLAY* are the regular player sprites but PLYC* is used for crouching. The engine knows to use PLYC when the player is crouched and there has to be a PLYC sprite for every equivalent PLAY sprite. A character definition in ZScript could be given additional properties to specify which sprite set to use when the actor is seen from upper/lower angles. Of course, it would get messy for actors that use a variety of different sprite names in different states.

If this was done it would have to be additional rotations that automatically get selected by the renderer. So wait: What letters can we use here? A-G are already taken, that'd leave us with 19 remaining ones, we need 32 to have equivalents for all 16 regular rotations.

I'm confused. Does it need to match the number of rotations? I'd think there only needs to be one additional top sprite per frame (maybe share one for walking) and then the rotation be handle engine-side (optionally interpolated).Edit: I'm thinking for walking and idle animations it could be done with a bobbing effect via uniform scaling.

Hypersonic wrote:With voxels you can make the monsters/items look exactly as they do now.

Sorry, got to disagree. You might be able to make it look exactly as it does from one angle (e.g. dead front on) but as soon as you move, you'll see the 3D lego-brick nature of the voxel models, especially on shapes with a curve.

In game, their edges are also sharper than the sprites would be in default OpenGL (and so can look very harsh) and they don't seem to alter and blend in the same way with distance as a sprite does.

On top of that, the Doom enemy sprites aren't consistent from one angle to the next, so making a model that looks exactly the same as the sprite from all angles is impossible.

I'm not saying that voxels don't have their place. Even though I really don't like them much at all, I get why people think they tie in well with the pixelly Doom world, but they certainly do not look exactly like sprites.

Look like they do now from the angles given, obviously the hidden sides of 1 angle objects would have to be a reasonable guess at what the original artist intended. Many objects only have 1 angle. Monsters have 8. If the monster artists didn't accurately render each angle to a single common 3D model, I'm sure a voxel model could be made that isn't too far off from any of the angles.

Too bad there's no voxel acceleration like there is texture painted polygonal acceleration. It would be neat to see each of the voxel pixels smoothly blend together like 2D textures do.

Enjay wrote:Sorry, got to disagree. You might be able to make it look exactly as it does from one angle (e.g. dead front on) but as soon as you move, you'll see the 3D lego-brick nature of the voxel models, especially on shapes with a curve.

To be fair, the lego-brick nature of voxel models is just 2D pixelization taken to 3D.

As an aside, there are ways to "smooth out" voxels, with techniques like marching cubes. Rather than just treat each individual voxel as its own little self-contained cube, it tries to connect neighboring voxels together, which helps blend both the color and geometry. Whether or not it would look good, however, is up in the air (I imagine it would be dependent on the particular voxel).

If your goal is to get a good looking 3D object, a proper model would almost certainly be the best option. Although a voxel may understandably be easier to create from a preexisting (static) sprite since you basically stretch the existing 2D image into a 3rd dimension and fill in the necessary gaps. High-end computer graphics have employed similar tricks (take a 2D matte painting and "paste" it onto a 3D backdrop, though it only works for limited movement).

Graf Zahl wrote:If this was done it would have to be additional rotations that automatically get selected by the renderer. So wait: What letters can we use here? A-G are already taken, that'd leave us with 19 remaining ones, we need 32 to have equivalents for all 16 regular rotations.

I'd use only 18 rotations.8 for 45° pitch above, 8° for 45° pitch below, and one for top (rotate it with actor angle) and one for bottom (same).