iPhone X vs Mixamo: Blend Shapes Smackdown

iPhone XMixamo
0 :  browInnerUp 
1 :  browDown_L 
2 :  browDown_R 
3 :  browOuterUp_L 
4 :  browOuterUp_R 


5 :  eyeLookUp_L 
6 :  eyeLookUp_R 
7 :  eyeLookDown_L 
8 :  eyeLookDown_R 
9 :  eyeLookIn_L 
10 :  eyeLookIn_R 
11 :  eyeLookOut_L 
12 :  eyeLookOut_R 


13 :  eyeBlink_L 
14 :  eyeBlink_R 
15 :  eyeSquint_L 
16 :  eyeSquint_R 
17 :  eyeWide_L 
18 :  eyeWide_R 


19 :  cheekPuff 
20 :  cheekSquint_L 
21 :  cheekSquint_R 
22 :  noseSneer_L 
23 :  noseSneer_R 


24 :  jawOpen 
25 :  jawForward 
26 :  jawLeft
27 :  jawRight 


28 :  mouthFunnel 
29 :  mouthPucker 


30 :  mouthLeft 
31 :  mouthRight 
32 :  mouthRollUpper 
33 :  mouthRollLower 
34 :  mouthShrugUpper 
35 :  mouthShrugLower 


36 :  mouthClose 


37 :  mouthSmile_L 
38 :  mouthSmile_R 
39 :  mouthFrown_L 
40 :  mouthFrown_R 
41 :  mouthDimple_L
 42 :  mouthDimple_R 


43 :  mouthUpperUp_L 
44 :  mouthUpperUp_R 
45 :  mouthLowerDown_L 
46 :  mouthLowerDown_R 


47 :  mouthPress_L 
48 :  mouthPress_R 
49 :  mouthStretch_L
50 :  mouthStretch_R 


51 :  tongueOut 





0 :  Blink_Left 
1 :  Blink_Right 


2 :  BrowsDown_Left 
3 :  BrowsDown_Right 
4 :  BrowsIn_Left 
5 :  BrowsIn_Right 
6 :  BrowsOuterLower_Left 
7 :  BrowsOuterLower_Right 
8 :  BrowsUp_Left 
9 :  BrowsUp_Right 


10 :  CheekPuff_Left 
11 :  CheekPuff_Right 


12 :  EyesWide_Left 
13 :  EyesWide_Right 


14 :  Frown_Left 
15 :  Frown_Right 


16 :  JawBackward 
17 :  JawForeward 
18 :  JawRotateY_Left
19 :  JawRotateY_Right 
20 :  JawRotateZ_Left
21 :  JawRotateZ_Right 
22 :  Jaw_Down 
23 :  Jaw_Left 
24 :  Jaw_Right 
25 :  Jaw_Up 


26 :  LowerLipDown_Left 
27 :  LowerLipDown_Right 
28 :  LowerLipIn 
29 :  LowerLipOut 


30 :  Midmouth_Left 
31 :  Midmouth_Right 
32 :  MouthDown 


33 :  MouthNarrow_Left 
34 :  MouthNarrow_Right 


35 :  MouthOpen 


36 :  MouthUp 


37 :  MouthWhistle_NarrowAdjust_Left 
38 :  MouthWhistle_NarrowAdjust_Right 


39 :  NoseScrunch_Left 
40 :  NoseScrunch_Right 


41 :  Smile_Left 
42 :  Smile_Right 


43 :  Squint_Left 
44 :  Squint_Right 


45 :  TongueUp 


46 :  UpperLipIn 
47 :  UpperLipOut 
48 :  UpperLipUp_Left 
49 :  UpperLipUp_Right 





Writing with Ink – Lists with an Oxford Comma

The guys at Inkle Studios have shared their method for printing a list using a recursion function on their Patreon page, but I found an easier method to insert an Oxford Comma when printing a list.

{LIST_COUNT(IsPresent):
   - 0: No one is here. 
   - 1: Only {IsPresent} is here. 
   - 2: {LIST_MIN(IsPresent)} and {LIST_MAX(IsPresent)} are here. 
   - else: {IsPresent-LIST_MAX(IsPresent)}, and {LIST_MAX(IsPresent)} are here. 
}

In this example I’m grabbing the LIST_COUNT of IsPresent, and printing the contents  according to how many items there are.

With 3 or more in the list I subtract the LIST_MAX (the last item in the list) from the full list before printing, then insert a comma before printing the LIST_MAX.

Writing with Ink – Runtime Loop

I’ve written an old knock-knock joke into an Ink script to show a basic runtime loop. The logic here is simple: tell a joke three times, but the third time with a different ending.

I define the loop start with an index: joke.

The loop gate has two settings: closed diverts the runtime to the start of the loop, open (or unlocked) allows the runtime to proceed. My start state is closed. On the third try it will open.

CONST punchline = 3 

- (joke) Knock knock! 
+ Who is there? 
- {joke<punchline: 
   Banana. 
   + Banana Who? 
      -> joke 
   - else: 
   Orange. 
   * Orange Who? 
      Orange you glad I didn't say banana? 
}

My conditional test doesn’t use variables, although the loop gate looks as if joke and punchline are variables. Ink is counting how many times the index joke has been seen and comparing it against a constant value called punchline. When joke is less than punchline the loop is closed.

joke<punchline

Things to know:

  • A constant looks like a variable in Ink script, but it isn’t dynamic. At runtime it is replaced with the value it represents. Constants are for scripting convenience.
  • The index cannot be addressed from outside this knot, but leaving and coming back to the knot will preserve the seen count.