Following is a copy of my news post on
patreon.
One thing I've been wishy washy about for a while now is how I will show all of your dwarfs in a 3d world.
The two options have always been either 3D, or 2D billboard sprites, and the problem plaguing both options has been the fact that Dwarf Fortress has around 700 different unique creatures in the raws, plus any number of procedural ones. This is... not feasible, to say the least, to provide artwork for all of them.
Till now, my solution has been to have detailed sprites for a few commonly seen stuff, like dwarfs, while everything else gets some very low resolution sprites ripped from graphical tilesets that people have made for DF. This results in a lot of glaring inconsistency between creatures that have proper art, and those using placeholders. Then there's the issue that 2D sprites floating around in a 3D world takes care to make it fit in, without looking like, well, floating carboard cutouts.
Going for proper 3D models brings with it similar issues with consistency, since good artists don't work for free, and having a 3D modeled dwarf standing next to a floating 32x32 stylized sprite will look very strange.
Which is what brought me to my current solution, which is a mix of procedural and semi-procedural models.
It's still a work in progress, so I don't yet have any pictures I feel comfortable showing, but the general workflow will be like this:
1: Have a generator that can make passable models for any creature in the game. It doesn't need to look fantastic, but a user should be able to look at the model that it spits out and go "Yup, that's a tiger."
2: Take the models for important creatures, such as dwarfs, made by the generator, and refine them manually, where needed, while keeping the art style as similar to the generated creatures as possible.
3: While running the game, AV will first check for an existing creature model, use it if found, and generate a model on the fly if not.
The models will have a separate 3D object (most likely a rectangular block) for each part defined in the raw files from DF, so that missing limbs, etc, can be shown properly.
These body parts are initially being represented by blocks, but once I have them working correctly, I'll start going through each part and refining the general model for it, to make it look more like the part it's supposed to represent (nose, eye, shin, etc). I will try to make it all as generic as possible, and if something needs to be customized (dwarfs and tigers don't have the same head) I'll use as much contextual information as I can get from the raws themselves, before even looking at the names of the creatures. Easiest example of something I can use is how many stance body parts it has, and what they're connected to. If it's got two stance parts that are both connected to the lower body, with no stance parts directly connected to the upper body, then the creature is humanoid, and can be treated as such; while if there's two stance parts connected to the lower body, and two stance parts connected to the upper body, it can be treated as being a quadruped, and use a different set of models where needed.
Only when the contextual info is used up will I start looking at names and descriptions to gain insight on what models to use. This will most likely be necessary for heads, because they vary the most between different animals, animal people, and were-animals. So a wolf, wolf-man, were-wolf, and wolf-demon, can all use the same wolf head model, just from the name and/or description having the word wolf in it.
Only when all that is exhausted will I go over individual models and see what I need to change for specific creatures. Hopefully it's nothing that needs to be changed at all.
...
Okay, I lied, here's a work in progress picture:
Keep in mind this is a very early work in progress. There's no textures, or even shapes beyond boxes, and the head is not touched at all, but it's a decent work in process picture, and shows where I'm going with this.
For this model, each part type has a manually defined proportions, set by me, the size set by the Dwarf Fortress raw files, and the positioning relative to the parent set by me.