I met with Peter and Caitlin yesterday and they had a number of suggestions for improving the editor. In this essay I hope to redefine the face architecture. Old values are shown in plain text, new values in italics.
Name # points closure new points gradation?
Eye 10 loop 14 no
EyeUpperLine 6 line 8 no
EyeLowerLine 5 line 7 no
OrbLine 4 line 6 yes
BrowLine 4 line 6 yes
UpperJowl 4 line 6 yes
LowerJowl 4 line 6 yes
Eyebrow 10 line 14 no
UpperLip 6 line* 8 no
LowerLip 5 line* 7 no
Pupil 1 point 1 no
TeethSeparation 1 distance 1 no
ForeheadLine line 8 yes
Chinline line 6 yes
The new facepart struct will dispense with the switch and instead use a LineWeight parameter ranging from 0 to 10, with 0 indicating complete disappearance of the line, and 10 indicating the darkest skin tone.
Gradation tapers the strength of the line at its ends.
The facepart struct then looks like this:
#define PARTSIZE 14
struct FacePart {
short LineWeight;
short PointCount;
short RightX[PARTSIZE];
short RightY[PARTSIZE];
short LeftX[PARTSIZE];
short LeftY[PARTSIZE];
};
The next question I must tackle is the architecture of the face as a whole. The main question is whether to establish it as a set of FaceParts or an array of FaceParts. I think that I shall go with the second, but I'll try to set it up so that the array handling is a little easier. I will also tack on the pupil and teeth separation elements as separate values in the expression record, rather than just sticking them onto the end of one of the other face part structs.
Now I have to face the problem, once and for all, of the size of the face. Earlier I had settled upon 330h x 440v. However, this creates a new problem with editing. Using the same ratios as the earlier face, the interior rectangle for the face parts will end up at 192h x 213v. However, the addition of the new ForeheadLine will require us to expand this vertically to perhaps 240v. Doubling this for the face editor yields 384h x 480v. Yes, this fits.
Peter and Caitlin wanted a bit more horizontal margin available, so I'll have to increase the horizontal dimension of the face to 356h. However, they also counsel some shrinkage in the overall dimensions, primarily for aesthetic reasons.
Egad! I just got off the phone with Caitlin and she had a bunch of new suggestions. The idea here is to allow customizable characters in a variety of dimensions. One of these is clothing: we can provide characters in three standard sizes and then allow the storybuilder to assign various items of clothing to the character. Even more curious is the possibility of making this a runtime option. We can have Jessica wear her evening gown for the grand ball, her grubbies while painting the house, her business suit in the office, etc. This is like the dressable David; I wonder if this might not be particularly appealling to the female personality?
We also considered the possibility of variable hats and even variable hair or hairdos. Good lord, this could become a major sideshow!
It also seems to me that we could have assignable skin tones; you could start with a standard character and show him/her darker or lighter.
Technically, this system would require four layers: an underlayer of base face, a feature layer that's drawn algorithmically, a hair layer, and lastly a clothing/hat layer. It could be done &emdash; but would it appeal?
Getting back on topic, I think that we're set on 356h x 440v, with an interior features boundsrect of 220h x 260v. Let's work with that.