Digital Being - Modeling the Head 1

Today, we tried to model the head using the stick-figure-stroke-width approach discussed in Anatomy v1 document (https://blog.sprited.ai/digital-being-anatomy-v1).
Trial 1 - Stroke-Width Approach
Results
Resulting head look something like this:
Here is the definition used.
being:
name: being1
version: 0.0.1
description: Head only organism for testing purpose.
texture:
size: 16
patchSize: 16
patches:
- name: head
cell_type: |-
, , , , , , , , , , , , , , ,
, , , , , , , , 1, , , , , , ,
, , , , , , , , 1, , , , , , ,
, , , , , , , , 1, , , , , , ,
, , , , , , , , 1, , , , , , ,
, , , , , , , , 1, , , , , , ,
, , , , , , , , 1, , , , , , ,
, , , , , , , , 1, , , , , , ,
, , , , , , , , 1, , , , , , ,
, , , , , , , , 1, , , , , , ,
, , , , , , , , 1, , , , , , ,
, , , , , , , , 1, , , , , , ,
, , , , , , , , 1, , , , , , ,
, , , , , , , , 1, , , , , , ,
, , , , , , , , 1, , , , , , ,
, , , , , , , , 1, , , , , , ,
stroke_radius: |-
, , , , , , , , , , , , , , ,
, , , , , , , , 2, , , , , , ,
, , , , , , , , 5, , , , , , ,
, , , , , , , , 6, , , , , , ,
, , , , , , , , 6.7, , , , , , ,
, , , , , , , , 7, , , , , , ,
, , , , , , , , 7, , , , , , ,
, , , , , , , , 7, , , , , , ,
, , , , , , , , 7, , , , , , ,
, , , , , , , , 6.9, , , , , , ,
, , , , , , , , 6.74, , , , , , ,
, , , , , , , , 6.5, , , , , , ,
, , , , , , , , 6.2, , , , , , ,
, , , , , , , , 5.8, , , , , , ,
, , , , , , , , 5, , , , , , ,
, , , , , , , , 2, , , , , , ,
stroke_z: |-
, , , , , , , , , , , , , , ,
, , , , , , , , 0, , , , , , ,
, , , , , , , , 0, , , , , , ,
, , , , , , , , 0, , , , , , ,
, , , , , , , , 0, , , , , , ,
, , , , , , , , 0, , , , , , ,
, , , , , , , , 0, , , , , , ,
, , , , , , , , 0, , , , , , ,
, , , , , , , , 0, , , , , , ,
, , , , , , , ,-0.05, , , , , , ,
, , , , , , , ,-0.15, , , , , , ,
, , , , , , , ,-0.35, , , , , , ,
, , , , , , , ,-0.61, , , , , , ,
, , , , , , , ,-1.00, , , , , , ,
, , , , , , , ,-1.77, , , , , , ,
, , , , , , , ,-4.05, , , , , , ,
Cell Type is 1 when stroke node is present.
Stroke Radius denotes the distance to the skin from the centroid.
Stroke Z denote the amount of offsets in z-dimension.
Analysis
Hard To Model Cheeks: Stroke width produces some level of desired shape but one of the main problem is that it ignores lots of curves.
While stoke-width approach provide easy way to grow an organism from single pixel, it does not produce the curvatures we desire such as cheeks.
We can try to fit it better to produce cheeks but when creating cheeks, it likely cause other places to not fit properly.
One possible fix is that we add "z-thickness" such that we allow some level of extrusion of the face surface.
Noses: Noses will be even more difficult to model though. This is because every cross section is modeled as a circle. Unless we allow for voxel stroke, this seems to be hard problem to solve.
One potential solution is to model the nose not as part of face but as a separate node on top of the face. Like Potato Head in Toy Story.
Same width looking from side and looking from front: One other issue is that when looking at this character, we have a very spherical face where side view has about the same head width as the front view. In real life scenario, the front-view should have smaller width.
Possible approaches to fixing them is that we could add aspect ratio parameter for these heads to make them fit better.
What does it mean for this approach? I would like to think that this approach may still work for primarily a pixel art character. In pixel art case, we want to render this mesh into 16x16 pixels. So, as long as it fits the projection in signature angles, we shouldn't notice too much issues.
Alternative: Spherical Displacement Map
A fun alternative idea is to do displacement map on top of a sphere. This could go against the idea of growing organism from single pixel, but if you think about it, it may not be such a bad idea to add "subdivide" as one of the actions that agent can perform to evolve itself. If we consider every part as some sphere, this provides a very flexible solution that can fit various curves.
This will be tricky to create such displacement map out of the blue. So, if I do this, I will need to get a sample head model then fit this displacement map on that model to produce a sample. Then, later, we will have to learn sequence of simple steps (permutation of displace steps, subdivide steps) to generate it.
That's it for today. I ate a bad cake today. My stomach isn't feeling well.
-- Sprited Dev




