Chargen fixes and improvements
I've had to fix a few more issues with the character generation system, but also added some improvements.
One of the main problems was with the poly reduction (the
Decimate modifier), which can make some interactions between clothing and the character body unpredictable. Basically when clothes is close to the body and you have the character in different animations/poses, sometimes the underlying body can clip through the clothes. If the clothes conform to the body's geometry this is less of an issue because you won't, for example, have pointy geometry that can poke through more rounded geometry.
MakeClothes handles this is with its delete groups, where you basically flag specific vertices to be deleted when wearing a particular clothing item. The underlying vertices are redundant because they're covered by the clothes, and no vertices there means no clipping.
Decimate modifier complicates this in two ways:
- It may modify the body and clothing geometry in different ways, such that two surfaces that conformed are now shaped differently, so now the surface underneath may poke out through the surface above (consider that a smooth rounded surface has a higher poly count than a pointy pyramid-like surface; decimate converts these rounded surfaces into pointier ones.
- It may modify the geometry such that delete groups end up deleting too much of the mesh.
So far these haven't caused major problems; I've been able to solve them by adjusting delete groups or by slightly scaling up clothing/hair so there's margin for pointy surfaces to stay concealed.
Aside from this I made a few minor quality-of-life improvements. I added a "Quick Preview" option which only converts the first frame of each character animation, cutting down character generation time by 30 seconds or so (really useful when tweaking things). I also added a way to generate clothing previews from within Blender and see them from within the character generator:
I also added a way to colorize clothing. Solid-colored clothes are made using a base forest green texture, (
#1e3b2f), generated using the texture painting algorithm I described a few posts back:
In the UI you can pick a color and then that forest green is replaced in that texture:
This lets me squeeze a bit more mileage out of clothes meshes without needing to make different textures for every solid color I might want to use. The system is flexible enough that I can create more complicated textures that also use this system to re-colorize them, so long as they're based around that same forest green.
And I finally figured out why my
webpack builds were taking so long. They took anywhere from 5-10min for the initial build, now it's just a few seconds1.
Screen shader tweaking
I'm trying to settle on screen shader settings for the game. There is already some downsampling happening here (well, the max resolution is set to 720p, so pixel cruchiness is more visible when rendering to higher resolutions than that), and I also had the color depth reduced to 4 for awhile. It's a nice visual effect but might get fatiguing, so I played around with some other settings.
Common settings across these renders:
resolution=1, saturation=1.1, dithering=false, brightness=1.
(I did do some comparisons with
dithering=true but this didn't make much of a difference except introducing some artifacts at lower resolutions.)
I think I'll probably stick to
depth=6 (since it still introduces some interesting banding on the wall, but not too aggressive like it is with a color depth of 4) and
contrast=1.2 for now. It may change as more environments and characters are created.
I started making more use out of the character generation system to see if anything else needs improving. Part of this trial run required creating more clothing and hairstyles to try out. These characters are all randomly generated (except for the clothing/hair, which are added afterwards):
I'll likely leave the character generation system here for now, though I'll need to make a lot more clothes and hairstyles eventually. The priority now is to figure out the story and game mechanics since those influence everything else moving forward.
The main change was that the
typescript-loaderis very slow unless it's set to
transpileOnly: true, I don't fully understand why. ↩