Snaccoon Devlog 03
This month was centered around a lot of character lookdev/tech tests. I put together a template NPC (whom my daughter named Jeffrey) as a primer for the procedural characters system, did some morph target tests with Snaccoon, and worked on a bunch of secret stuff that I can't write about until the next devlog for secret reasons that I'll divulge in the next devlog.
Generative NPC System
I'm one person, working on this game in whatever free time I can find between my day job, giving my wife/kids/dog the time/attention they deserve, and, occasionally, sleeping. As such, I need to maximize my time when it comes to content creation, and because I have some pretty big ambitions regarding the scale & density of the city, as well as the variety in people/places filling it, I need to rely pretty heavily on procedural systems. In the scope of NPCs, this means creating flexible base character meshes that can have a lot of variety added to them by parameterizing a lot of their physical attributes. I started in on exploring some of these concepts this month with my new homie Jeffrey.
Jeffrey started off as a character model in a Synty Studios asset pack. I've heard whispers about some goofballs out there on the internet who think that using marketplace assets is somehow cheap or lazy. I think that's a pretty lame blanket statement; video games are difficult, time consuming, and expensive to make. I have a pretty broad range of development skills, but I am a slow character artist and an even slower animator, and I don't have the kind of money or time needed to hire/manage an animator/character artist. I could spend a completely impractical amount of time building, rigging, and animating a base character model from scratch, so that everything in my project can be 100% authentic, but at the end of the day, that just costs me a tremendous amount of time and energy that could be applied to other important things by dropping some cash on character/animation asset packs (which supports other developers btw) and ending up with something that does exactly what I need in way less time. If the use of pre-made assets ruins someone's perception of a game, I think that's less of an issue for the developer and more of an issue of the consumer focusing on a very weird facet of the game instead of just playing it. Obviously there are blatant asset flips out there, but that shouldn't render the use of any marketplace assets some kind of taboo. I was guilty of this mindset at one point until I dug into making games myself, and quickly understood why marketplace assets are awesome and super useful. I'd love for there to be less of a stigma around leveraging marketplace assets & tools, so I'm going to be pretty forward-facing with talking about which ones I use and why and how I use them.
Okay, that blurb aside - Jeffrey has some pretty neat features in service of modularity that are afforded by stylized visuals. Each section on Jeffrey's body is (a bit crudely) UV mapped to a section on a 3x3 grid texture that scales up in Value from 0 to 1. With a basic material function to unpack those sections as masks, I can give Jeffrey different base clothing combos with any colors I'd like, or I can mask parts of the body to mitigate clipping when adding exterior geo clothing items like coats, among other things.
Jeffrey also has a separate face material that is composed of a buuuuunch of UV math that generates shapes for the different facial features like eyes, eyebrows, mouth etc. I tested out building eyes & eyebrows this month and did some work on head & eye tracking for points of interest. This resulted in an awesome bug montage.
Jeffrey still has a ways to go before being put into a proper, usable state, but I plan to leverage morph targets to add some variance to things like body shape, as well as controls for things like skin-tone, clothing options, facial features etc. Using data structures & controls, as well as a library of character assets like clothes/shoes/hair types/accessories etc, I should be able to turn Jeffrey into several hundred different people spanning genders, age groups, and body types.
Speaking of marketplace assets & morph targets - I think I talked briefly in the original Snaccoon post about Snaccoon's character model coming from an asset pack by MalberS Animations. Similarly to Jeffrey, Snaccoon's base model from that asset pack had to undergo some adjustments in order to fit the art style I'd like to achieve. This included smoothing out the faceted edges, applying some additional geo to give a more round shape, and adding some additional morph target controls. The pack came with a lot of great morph target presets, but sadly Blender doesn't maintain those as shape keys when importing as FBX by default, so while I could bring the model in for some geo adjustments, that meant losing out on all those sweet controls. Luckily, I found a plugin called Better FBX Importer & Exporter for Blender that does maintain morph target info as Shape Keys, and also makes exporting characters from Blender a bit easier in general, especially when working with Root bone hierarchies. After a couple hours of reading & testing, I was able to pair all the sweet higher-res/smooth Snaccoon model changes with all the awesome morph targets, including some new custom ones. Here are some screenshots of some facial adjustments that can be applied with a slider. Neat!
While this runs completely antithetically to my goal of posting all facets of development for Snaccoon, good and bad, weird and otherwise, I spent the biggest chunk of time this month on stuff that I can't reveal yet. In next month's blog post I'll go over it in detail, but what I will say for now is: what it's in service of is pretty rad, but the minutia of it is not very exciting. That's all for July! Thanks again to everyone for the support & encouragement. Snaccoon's Twitter page has nearly 900 followers at the time of writing this, and the number of awesome messages/questions/requests etc has been amazing to read through. I appreciate y'all! ❤ Cheers!