The Future of the Cartoon Feature Film, David Mitchell
Important yet interesting to note: this thesis is from 2002, and investigates without the benefit of contemporary hindsight how he thinks it will impact the animation industry
Author frequently reminds us that all tools are just implementations of a human’s own work. Starts with a quote from John Lasseter, “The term CGI is a misnomer- the computer doesn’t generate the images. That would be like calling traditional animation Pencil-Generated Imagery. No matter what the tool is, it requires an artist to create art.”
discusses how modeling, texturing, particle effects and raytracing works, etc.
“Final Fantasy is perhaps the most ambitious CGI feature to date. The film, which took four years to make, put synthetic human actors into roles that could easily have been played by real humans and placed them incompletely synthetic sets. The film, based on a series of hugely popular, interactive, role-playing computer games, was produced by Square, the company that produces the games, and co-directed by Sakaguchi, the game’s originator. With world-wide sales of the nine-part game series totaling more than 26 million units,Square must have thought it had a ready-made potential audience of game-players familiar with the fantasy themes, comfortable with computer graphics characters, and eager to see the next installment. The CGI animation has been rightly regarded as a technical triumph, so why was FinalFantasy such a commercial failure? The answer, at least as far as western audiences and critics were concerned, (54)was the weakness of the story and the lack of pace in the way it was told. Lacking a compelling plot, the glamour that human stars can bring to a film, and without much humour, the film had little but its special effects to hold the attention of the audience.” [p.11]
that being said….. worth discussing how to use hyperrealism in a way that isnt just the boring version of live action. It must contain some elements of surrealism that necessitate it being animated despite the fact that the style is realistic. For example, the zombies, trippy ghosts and monsters in Love Death + Robots
Author notes a clear reduction in gross box office takings for Disney’s traditional offerings after the success of Toy Story
cites these tables:
[p. 16] “If the CGI cartoons we have seen so far have been fantasies, their success has surely come from the fact that they are fantasies designed to appeal not just to children, but to families. As Lasseter says:
Now will Pixar do a film for adults? We already have – we’ve done four of them, they happen to include kids too. And that’s something I believe in very, very strongly. We can make a film that is fantastic for adults, is truly entertaining for teenagers, adults without kids as well as families. …. I think the work at Pixar fulfils a need in the world for this type of film. I also go to family films really just for kids and I’m bored silly, and I don’t want to go back a second time, even if the kids do. I love the idea that adults love our films as much as kids do. (71)
This one was very difficult. I’ve come pretty far since I made it, and I had a very cursory knowledge of how to use a rig when I first started. The graph editor was frankly all over the place and it was hard to untangle those wires. Not only that, but this rig still, to the best of my knowledge, has no toe roll ability, so I often ran into the issue of having to set several keys on each foot impact. This forces the legs to be a bit more jolty than I’d prefer. Even polished up for my showreel I wouldn’t say this is my best work and if I had time I would rather pick a different rig to start over on in order to showcase my walk cycle ability. Nevertheless I worked on this for quite a while and I’d now consider it to be …..acceptable.
Fixes include making footfall more realistic/fixing feet touching the ground or glitching under it errors, cleaning up graph editor on the spine and hip swing, smoothing motion at the end in the final pose, bringing the root down in the middle so that the legs are never too outstretched, getting the fabric to fall a little bit more naturally at the end, and re-examining the head bob.
During feedback, I was told that two things were serious faults in my original animation: footwork- feet sometimes not touching the floor or not landing for long enough to give a plausible feeling of weight- and limbs stretching too far. I was reminded that when the legs are outstretched the knee will always be bent a little, and another classmate was told that in midair, poses will always be a little softer, which was very relevant to my work too.
I needed to take a break from the gymnast, but I’m glad that I came back with more knowledge and more motivation to fix her.
I started with the midair splits that were far too exaggerated, and found they were worse than I remember.
I can’t believe I actually let it look like this before. I went in and softened that pose:
And then I went on to the next split:
Before vs After
As I tackled the footwork, I found a whole mess of issues.
In a lot of these, not only was the foot not touching the ground, but it was also not landing flat enough or long enough to be plausible in order to carry her weight, and oftentimes I found that the knees weren’t bending enough, which also makes the weight look a little bit less believable as she must bend her legs somewhat to catch herself after a high jump.
Before vs After
I found quite a few in which the feet simply were bending unnaturally:
Before vs After
Before vs After
After working on all of these, the only issue that I had left to deal with was this constant issue that’s been plaguing me of the skin on her neck moving outwards along with the ponytail.
This has prevented me from making the hair animation as dramatic as I want it to be. I searched the outliner and found many parent constraints on that top ponytail controller, but unfortunately they were labelled complicatedly and I could not hide or delete any of them. So I simply solved the issue by lessening the exaggeration of the ponytail’s movement, as much as it pained me. I really wanted to make it even more dramatic than before.
Rewatching it, I went back and added in a lot of head motion that wasn’t there before. I had originally made her simply look up or down, but this time I spend a lot more energy conveying her emotion as well as making the head bob, conveying gravity. I then added in some more expression on her face at the end, an eyebrow twitch, a slight smile, and the jaw opening and closing a little bit on her last landing to show some exhaustion.
I rendered and only found a couple small issues. One being that the camera doesn’t account for the height of her leap on the second split, another that her arms seem to whirl wildly a bit on the first jump, and third that she lurches forward clumsily going into her twirl. I accounted for all these things and re-rendered.
Before vs After
….And now I’m happy with it! I feel that weight and expression are both conveyed a lot better. I’m also happy with the decision to use only one camera this time, it was too confusing in such a short clip to use two. I feel confident putting this on my showreel now.
I finished blocking the “shush” at the end, and got ready to start polishing everyone. At this point I was feeling pretty confident in my animation already and was excited to polish it up.
0-104 block (left) vs polish (right)
I worked 100 frames at a time. My method was to go into the graph editor and delete keyframes that were unnecessary, jolty, or confusing- in that they interfered with the key pose. I also adjusted the curves to make sure that the now-simplified keyframes paused on each gesture.
102-194 block (left ) vs polish (right)
This gesture was my weakest. In this segment Janine says, “for another half an hour” with great malice. I felt that my original version somehow looked unrealistic, like maybe her abs were incredibly strong, and that her body wasn’t moving correctly, as well as the gesture simply not expressing enough emotion. I spent several hours on my polish and was happy with its smoothing as well as the way I had changed the pose a little bit. I’ve centered her spine quite a lot and made sure to allow her feet to adjust to the weight shifting, as well as given her a more dynamic hand gesture. This segment has gone from one of my least favorite parts of my animation to what I feel is one of my strongest.
191-330 block vs polish
And here’s the end of the animation. I was already pretty happy with her expressive body movement in the block and felt that it was already rather smooth, so I struggled in polishing with smoothing out her movement while also keeping the emotionally erratic nature of her gestures.
0-194 footwork
191-330 footwork
As I didn’t pay enough attention to the feet in my last polish, I made sure that they would be extensively studied this time around. I made sure that her shoes never dip beneath the floor nor rest above it, and caught a lot of mistakes this way.
full polish 1
Here is the full polish, as well as a comparison of the block vs the polish.
0-194 block (left) vs polish (right)
The only thing I could find left to fix, more apparent to me now with the texture hidden, was that her body turns a bit too aggressively at the end, like it’s snapping.
Once again I was very careful not to remove the dynamic expressiveness in this motion while smoothing. Next I moved on to polishing the extras. Despite the fact that all of them only had a couple frames of animation, I intended to go through and make sure nothing stood out to me as blatantly incorrect.
Here’s Lou- fixed some hair flip timing to feel a little bit more like it obeyed the laws of physics, and adjusted her left arm to move a little bit more realistically with her spine. I also gave her more facial animation than she originally had.
Franklin was mostly just a case of making sure his hips and legs moved with his body. However, he reminded me to go back and make sure that Janine’s wine glass was moving correctly, as I’d changed her arm position.
Sure enough, it wasn’t, which i fixed in the same way as before: parent constraining the wrist control to the glass, keying movement every 2-3 frames, then deleting the parent constraint when glass is let go of. Then I move the glass to its final position offscreen as if thrown and make sure to add rotation as the base is heavier than the top.
Satisfied, I moved on.
I’m proud of the David polish, and believe that the finger and toe movements really bring this one home.
With Bonnie, most of her polish involved touching up the timing on her hair. I also gave her some more left arm motion and finger animation.
Here is the first test render. I couldn’t find any mistakes off the bat except for the head jolting weirdly at the word “study”, so I deleted the unnecessary keyframes and re-rendered. Oftentimes I am unable to really notice something until I look at the project rendered, and that’s where the render farm really comes in handy when working on finishing touches. I also decided that the camera doesn’t need to take that long to pan around, so I let it move a little quicker. I originally thought if it was too fast it would give viewers whiplash, but I actually think faster may be better as there is less time to absorb visual cues in the background and try to analyze them. I had toyed with the idea of putting something alarming in the corner there, but as I’ve said before, I’m already unsure if the blood is too much.
I was feeling pretty proud of this, and unable to find any glaring mistakes myself, but I was unsure. So I reached out for feedback on (I know) the internet. I got very poor reception and an overwhelming response that a 14 second animation is way out of my skill level and that all of it is jittery, causing the viewer only to focus on the joltiness of the movement and distracting from the actual narrative. This caused me to spend 3 days away from the project in abject frustration, as I can’t seem to see these issues myself, making me question my ability to animate well at all. But I’ll return to the project shortly, and work as hard as I can at making it the best it can be.
Note: This timespan includes roughly 7-12 days of light work spaced out over the holiday period, rather than a continuous week of heavy work.
Blocked
Over the holidays, I let myself breathe a little bit, seeing my project less as a 9-5 job and more of a fun way to channel my energy when I had nothing else to do. I was excited to start blocking, and got the first three seconds done in one sitting.
I began noticing as I worked that the arm motion looked a little bit janky. The left arm seems to jolt quickly and unnaturally on its way down.
As I continued on I kept running into this problem, where the hands and arms seem to be moving faster than would be natural, distracting the viewer from the emotion in her gestures and the inflection of her speech. This technically is something that can be addressed in the splining stage, but I felt that issues like this are such a big deal that I don’t want to go on animating without first understanding what the problem is and how to address it.
I tried deleting unnecessary keyframes- by unnecessary I mean frames that don’t need to be keyed; the arm would be in that spot without the key- but that didn’t do the trick. So, with trepidation, I decided to try completely deleting gestures that were less important, ones that didn’t contribute to the key pose and were causing it to look unnatural, even though I did do them in real life for my reference. I found that, though I considered this method controversial (amongst myself), the effect was much better. Below you can see the difference caused by deleting a pose in which she outstretches her arms in front of her on the way down. When I allow the arms to come down naturally instead of making that gesture, it gives the second key pose (hands to the side of her head, fingers splayed facing out) and third key pose (fists clenched by herwaist) more time and meaning. Although I sacrificed a gesture, these first three seconds of work are some of my strongest in the scene.
Difference in deleting a gesture
I continued on in this way, completing about 3 seconds per day, and deleting gestures that I found to look unnatural.
6 seconds- I later decided this squat was too pronounced and softened it a bit
At the end of each 3 second day, I added facial expressions. I found that part to be quite easy and enjoyable, and realized that only one expression change per 2-3 seconds should be the maximum. Even though my character is meant to appear hysterical, this really is enough to do the trick without being over the top.
When I finished blocking, I threw Janine into the scene I had constructed last week.
I kept in the area lights that I’d used before introducing her to the scene, and found that they provided a nice spotlight in a dark, eerie space. The interior of the mansion was originally quite bright and yellow, and, being an artist, I spend some time fiddling with the composition and adding shadow mattes to bright areas to create a nice dramatic color and light balance. My goal was to provide an ominous aura without teetering on scary, whilst simultaneously isolating Janine’s movement as the focus of attention in a relatively busy background.
I like that the stairs are framed and reflected, as it gives Janine a nice spotlight while drawing attention to the blood, amplified by her red shirt and lips. Again, not sure if that’s too grotesque for some viewers, but I personally like it.
Here’s the block. Feeling positive about it overall, but I can see already a couple fixes that need to be made. I can spot a foot phasing through the floor, and she still feels a little jolty. The work I did in removing distracting gestures was not an overall joltiness fix, just an effort to take care of the basics. I have high hopes for this.
My next step, before splining, is to add in what I call “extras”. These are the characters that will shush Janine. I plan to have the camera whip around to them right after the close-up, giving some exposition and drawing curiosity back into the narrative as well as putting some essential lightheartedness back into the atmosphere with nonthreatening, colorful characters and more party debris.
Well, turns out I was wrong to think of these characters as extras, because as I dressed them up for the occasion, so to speak, I actually found myself instilling personality into them and imagining their place in the story. As I posed them I liked them even more, and now they’re as near and dear to my heart as Janine. I’m very excited to animate them first thing tomorrow.
I had the idea straight away to use audio from the 1985 black comedy Clue, which if you haven’t seen it, is based on the board game Clue (or Cluedo depending on where you’re from), so you can probably guess the basic plot.
In the specific audio segment I chose, a motorist had just knocked on the door asking to use the telephone, and the butler instinctively locked him in the room in order to prevent him from exploring the house and stumbling upon the crime scene that the characters are trying desperately to solve so that they themselves can avoid the mysterious murderer as well as being implicated. Miss Scarlett and Professor Plum are debating whether it would be more suspicious to leave him locked up or ask him to get out of the house. Abruptly, Mrs. Peacock stands up and begins screaming hysterically, “Oh, who cares, that guy doesn’t matter! Let him stay locked up for another half an hour! The police will be here by then and there are two dead bodies in the study!” She is then shushed by everyone else.
This moment is actually very funny in the movie, not only because Mrs. Peacock looks like this-
-but also because of the actress’s incredible campy performance, shrieking and waving her arms wildly. Despite how funny the movie is, though, I of course can’t expect that to come through with just this one audio segment, but that’s not why I chose it. I chose it firstly because it’s intriguing, and secondly it’s very expressive, allowing me to make the most of an over-the-top, dynamic scene that’ll stand out as a performance animation.
I recorded my reference footage, acting out the audio as dramatically as I could, differently every time to compare. I felt inspired to break a wine glass for effect.
Then I split my reference footage into frames in Photoshop, intending to refer to every third image to help me get a good idea of what the pose should look like. I originally planned to delete the ones that are in between keyframes, but decided ultimately to leave them as a guide if I end up needing it.
Next I went into GarageBand and tried to get the audio a little bit clearer, since it’s from an older movie. I succeeded, although the difference is not remarkable.
Then I started looking around for a good rig to use. This was actually trickier than I thought, despite the number of rigs available to us. My specifications were that the rig must be a female human character, ideally older looking to match the audio, more cartoonish rather than hyper-realistic (as I plan my animation to be very stylized) and one obviously with a good control system. There were very few rigs I found that fit all of these criteria. Ultimately I decided on Luna, which I downloaded from Gumroad.
Luna seemed perfect, but as soon as I started trying it out I noticed that her unique looking facial controls were annoyingly visible in every render. Every single one of them had all of its render stats turned on so I had to go through and uncheck all of them.
I created the wine glass, which I’m very proud of, and I was so excited with my ability to make glass that I also gave her glasses, in order to make her appear a little bit older. I then gave her a hair texture with a little bit of gray.
I slid her glasses onto her face, taking care to adjust them as needed so that the mesh would appear realistic with her hair. I added a parent constraint to the top head control and the glasses and got them to move around just fine.
Then I found myself an environment. I knew that I obviously didn’t have to remake Clue, but this specific audio requires the speaker to be a) inside a large older house that would have a “study”, and b) speaking to a group of people who are c) trying to cover up a murder. And so I did loosely base my setting on it. I chose the Victorian Manor and added bottles and cans littering the floor to give the impression that a party may mysteriously have gotten out of hand. Then I added the debris and blood in the background to correlate to the audio and catch the viewer’s interest. Although I’m proud of this blood splatter effect, I’m a little nervous that it’s slightly too grotesque and will give the shot an unpleasant energy that may put off some viewers. But the time for deciding yes or no on the blood is after I’ve finished the actual animation.
I decided that I would do the lip sync before any of the rest of the work, because looking at the face straight on and unmoving when I work on it usually ends in a better result for me. It allows me to get a better idea of how well it’s working.
However, as I started working with Luna, I had a hard time even getting past the second key frame. I couldn’t figure out why, but the mesh would move unpredictably without being keyed and certain keyframes would change when I touched that control again later on, even if I didn’t set another keyframe. For example, I’d key the mouth to be slightly open, and then a few frames later it would completely unhinge itself when I touched another control, and then stay that way when I deleted the new key or hit undo. I tried keying the entire rig each time I made even the slightest adjustment but the same thing was happening regardless. I opened up the completely untouched Luna I’d downloaded and her facial controls were also janky. And so I decided not to waste more time trying to force Luna to work. It would be better not to even start with her and get my work done on a more reliable rig.
And so I went to Janine.
For purely aesthetic reasons I didn’t like the Janine rig, and that’s why I didn’t choose it in the first place. I feel that this character is not only ugly but almost fringing on amateurish. Pointy helmet hair, super shiny solid color blinn all over, barely distinguishable lips, absolutely no nostrils of any kind, really just a seriously terrible nose. She looks like an N64 Majora’s Mask NPC. On her web page she clearly has been given a new texture and significant facial work, because when downloaded as is and rendered she looks just like a shiny haunted doll. Not only did I personally think she was unimpressive, but I felt like any work that I made with her would look would clash with the semi-realistic scene I’ve built.
That being said, Janine has wonderful facial controls. She is by Truong CG Artist so I really didn’t expect less than perfection in her rigging system. Therefore, I wanted to reserve my judgement of her appearance as much as possible because she has the controls that’ll help me succeed in animating this project, and that’s what’s most important. Janine is going to be my buddy over the next several weeks so it’s not my place to criticize her appearance.
I started trying out my phonemes with her and, although it’s not like Frankline’s phoneme system, it really is the next best thing. She’s got a separate jaw and chin control, guides for the corners of the mouth, full top lip and bottom lip controls as well as all the separate points on each lip, a control that just moves the whole mouth up and down, cheeks that move along with the jaw, a full set of tongue controls, and several different deformation controls for the mesh around the mouth, not to mention the lip stretch, squeeze, and pucker controls in the channel box editor. And so I decided that it was time to get to work with Janine.
The phonemes with Janine took longer than Franklin. The audio itself is almost four times as long, and I do have to shape each mouth pose myself. By the time I was done I’d completely burned myself out for the day, but I’m happy with the results and feel ready to proceed to the rest of the animation.
But being burned out from animation didn’t mean I was going to take the rest of the day off. I decided to use that time to give Janine a makeover, which I was going to end up doing sooner or later. I had a lot of fun with it. I’m not entirely confident yet in the Maya 3D texture brush, so what I did is I went into her texture files and I opened her skin document up in Photoshop. I composited HD skin textures onto it and I spent a while hand painting her eyes, lips, nose, and cheeks to give them some lifelike color. For her arms and legs I merely uploaded the same skin texture without hand painting. I composited an HD scan of green human eyes onto the eye texture file. For the hair, I wasn’t surprised to find that the mesh was editable, but I didn’t want to change it so much that the controls wouldn’t work, so I just made it a little bit less angular and helmet-like and I gave it a brown texture (which I also used for the eyebrows). I turned down the shine on every blinn shader. I didn’t edit the mesh of the clothes but gave them texture as well, keeping them similar but making the fabric look like something one might wear to a party in a mansion.
Now she looks less like a haunted doll and more like a suspicious, upper class party guest. I’m proudest of the nose.
The phonemes exercise was my cup of tea. Although I’ve had some light practice with lip sync before, I’ve never had the experience of getting to work with a phoneme rigging system, and it was wonderful to be able to breeze through it like that. The speech itself only took me about an hour to complete. I found the below diagram extremely useful in helping me get a feel for which consonants have a similar shape.
Diagram I utilized heavily.
I also spent a lot of time staring at myself in the mirror speaking along with the words, checking back every few minutes like I was painting a self portrait.
I psyched myself out a little bit though, wondering if the mouth sounds I was making were natural or if I was trying to fit the shapes that I knew how to make. The rig did not have an option for “R”, and I watched myself say “longer”, making that “er” shape over and over before realizing that it didn’t matter anyway; the speaker is British and I am American and so I can’t necessarily rely on myself as a reference in that specific instance- the rig would not actually be making the “R” pose if it is to be accurate to the audio (this small complication gave me a lot of sympathy toward anyone doing a lip sync for a language that they do not speak or may not be their first language). Regardless, if I had needed the “R” I would’ve just used the “T/D” pose and gone in manually to tweak it a bit, or in the case of the Franklin rig I could’ve added a little bit of the “O” in there.
I finished the phoneme work wanting to do more with Franklin, I couldn’t just leave it like that, like some kind of unnerving robotic rap battle.
Playblast of the finished phoneme work.
And so I gave Franklin some movement. Despite intending to film from the torso up, I animated the hips and legs, as I’m coming to realize is absolutely essential for believable motion. I actually animated every single piece of the rig, albeit minimally, as it’s only a 70 frame animation I only meant to give Franklin a little added emphasis to his words. I decided for whatever reason to make his body language just a little bit untrustworthy.
So much more satisfying to watch.
Satisfied with my work, I spent a long, long time adding in an environment and festive sweater for absolutely no reason other than my own enjoyment of the project. And I did certainly enjoy the project very much. Looking forward to working on phonemes more in my performance animation project!
His cheerful sweater says “trust me” but his body language says “I know something you don’t”.
Polishing the gymnast was not necessarily difficult, nor did it take nearly as long as almost any of the other animation exercises I have done thus far in the term. mainly came down to fixing errors pointed out during our feedback session and smoothing out the graph editor through the means of tracking my motion curves.
The first matter of business was to go through my feedback and fix every incorrect pose according to suggestion. Rather than list my process with every single one of these, I’ve included a thoroughly documented example of the a hip motion curve I was advised to fix, in order to give you a good idea of my procedure throughout the fixing stage.
Here is a screenshot of given feedback indicating the way in which I should fix said motion curve of the hip movement.
Hips fix feedback
Observe the below image on the left, and you’ll see that my original motion curve was a jolty, up-and-down movement. On the right is my adjustment to the hip motion curve, and as you can see it is already much better- the body leans into that upward movement more and comes back down more gradually and gracefully as well. The curve now resembles more of a soft peak.
Hip adjustment
I’ve also included for your reference the way in which I did this. Keeping in mind our ball-bounce exercise and the arc principle, I’ve taken that peak and prolonged the time in which the gymnast hangs in the air, while shortening her liftoff and landing. I also deleted any keyframes which I deemed unnecessary and instead altered the graph editor to resemble the curve as it was with said keys, making sure to check back often to certify that I didn’t accidentally make a serious mistake.
Hip adjustment graph
After making sure that I was happy with the new way in which the hips moved during that specific jump, I went through the entire hip animation and repeated the process- motion tracking, smoothing, and editing the curve on the graph editor. Below is a look at the hip movement during my blocking pass:
Hip movement during blocking pass (before fixes)
And here is the remarkable difference visible in the polish pass:
Hip movement polish pass
Just the hip movement alone did so much to add realism and gracefulness to the gymnast’s movement, making her feel less jolty and robotic and more human, more dependent on gravity. I do think that specific mini-jump I smoothed out first is my best work; I feel that it gives her a lot more weight, which is hard to do when the character is completing such impressive acrobatic stunts.
Pleased with my work on the hip motion curve, after having fixed all of the issues mentioned in our feedback session, I went in and edited the motion curve on each limb. I focused on smoothness and weight. Of course, with the hip motion curve already done, a lot of the joltiness had already been resolved, as the limb position is so dependent on the hip movement in mid-air flight. Here’s an example of my work with the motion trail on her foot. Below is the motion curve during my blocking pass:
Motion trail before (foot)
-and during my polish pass:
Motion trail after (foot)
Here’s a playblast of my finished work polishing the gymnast’s performance. Note the fluidity and more realistic body movement.
In conclusion, I would like to say that my work on the gymnast was my best yet. It was a very good idea for me to work with a character who wears minimal clothing, as it helped me advance my understanding of body mechanics considerably. It was also beneficial for me to use a hyperrealistic rig as I think that it helped me pinpoint unnatural moments. Not only was the blocking incredibly easier with my more proficient knowledge of rig mechanisms, but the polish pass was fun and painless now that I’m more comfortable with the graph editor. I feel that I now have a sharper eye for detail and know what to look out for. Although I may not have an innate understanding of what the body position would necessarily look like at all times, I’m able to spot a mistake when I see one and correct it independently. This work is so far the highlight of what will be my demo reel, and I’m confident in its representation of my skills. This work is a far cry from my early hard hours of frustration producing convoluted, messy attempts. As I said before, if you had told me that I had made this a month ago I wouldn’t have believed you, so great is my progress, but I now must add that the unbelievability is softened now that I’ve stared at my work what feels like hundreds of times.