Skip to main content
Non-Photorealistic Pipeline Tools

Choosing a Line-Art Temporal Coherence Method Without Sacrificing Hand-Drawn Feel

You've got a character with a lovely scruffy line — like a pencil that caught every twitch of the artist's hand. Then you run temporal coherence on the shot, and suddenly the strokes look like they were ironed flat. The wobble's gone. The soul's gone. So what gives? That tension — stabilizing line art without embalming it — sits at the heart of every non-photorealistic pipeline. Most solutions come from the video-processing world, where smoothness is king. But hand-drawn animation doesn't want smoothness; it wants controlled imperfection. This article maps the methods that respect that difference, and the ones that don't. Where Temporal Coherence Hits the Floor The classic flicker problem in grease-pencil and ink strokes You know it the second you hit play. A hand-drawn line that looked perfect in the single frame suddenly shimmers, jitters, or outright disappears for two frames before snapping back.

You've got a character with a lovely scruffy line — like a pencil that caught every twitch of the artist's hand. Then you run temporal coherence on the shot, and suddenly the strokes look like they were ironed flat. The wobble's gone. The soul's gone. So what gives?

That tension — stabilizing line art without embalming it — sits at the heart of every non-photorealistic pipeline. Most solutions come from the video-processing world, where smoothness is king. But hand-drawn animation doesn't want smoothness; it wants controlled imperfection. This article maps the methods that respect that difference, and the ones that don't.

Where Temporal Coherence Hits the Floor

The classic flicker problem in grease-pencil and ink strokes

You know it the second you hit play. A hand-drawn line that looked perfect in the single frame suddenly shimmers, jitters, or outright disappears for two frames before snapping back. That's temporal coherence hitting the floor. I have watched artists spend an entire morning cleaning a 120-frame pan only to discover the seam blows out again after a minor curve tweak. The culprit is rarely the stroke itself — it's how the vector deforms across frames. Most pipelines calculate line position per frame independently, so a tiny variation in curvature, pressure, or angle gets amplified. What should be a smooth shoulder line becomes a flickering mess. The catch is: fixing this often means flattening the very hand-drawn variation you wanted.

How brush engine noise becomes a coherence nightmare

Brush engines love noise. Jitter, scatter, pressure jitter, angle randomness — every parameter that makes a stroke feel alive also makes it temporally unstable. I once saw a production that used a dry-brush preset with 8% jitter. Beautiful on stills. On a 180-frame tracking shot the line appeared to crawl along the character's jaw like something alive. Not in a good way. The odd part is — artists usually spot this immediately. Producers don't. So the fix gets kicked to comp, where someone applies a frame-blend that smears the line into a soft mess. Wrong order. Coherence has to be solved at the stroke level, not patched in post. Most teams skip this: they tune noise per frame instead of locking the noise seed across the clip. One checkbox. Saves days.

We locked the noise seed and suddenly three weeks of cleanup vanished. The lines still breathed — they just didn't fight each other.

— Effects TD, feature animation postmortem (2019)

Real shot: a 3-second pan that took three weeks to stabilize

A lateral pan. Simple, right? The background had ink-hatched foliage — maybe forty strokes per frame. Each frame the hatch pattern shifted because the vector generator recalculated intersection points independently. The hatching didn't move with the camera; it swam against it. That pan cost three artists three weeks of manual stroke-by-stroke retiming. They tried optical flow. Tried frame interpolation. Tried re-drawing every fifth frame and interpolating the rest. Nothing preserved the hand-drawn feel. The solution that finally worked? Disabling temporal recalculation on the hatch modifier and letting the strokes drift slightly in screen space — which the eye forgives. Perfectly stable hatching looked dead. Slightly swimming hatching read as alive. That hurts. The lesson: temporal coherence is not a binary. You choose which instabilities to keep and which to kill. Every pipeline decision after that's a trade-off, not a fix.

What Most People Get Wrong About Coherence

Optical flow isn't made for broken strokes

Most teams reach for optical flow the moment someone says 'temporal coherence.' That sounds fine until your first frame stack shows a line-art contour that vanishes for three frames, reappears half a pixel left, then snaps back. Optical flow assumes continuous surfaces with smooth gradients. Broken strokes — hatching, stippling, torn edges — violate that assumption on every single frame. The flow solver hallucinates vectors where there's empty space, and those hallucinations bleed into your in-betweens as wobbly artifacts. I have seen productions burn two weeks trying to tune occlusion masks for flow-based coherence, only to discover the fundamental problem: the algorithm was never designed for geometry that isn't there half the time.

The catch is brutal. A flow field computed across a sparse ink line treats the gap between strokes as a region that must move — so it invents motion. What arrives is smooth, coherent, and completely wrong. Wrong order.

Region tracking vs. pixel tracking: the hidden asymmetry

People confuse displacement-based methods with appearance-based methods because both output warped frames. The difference is what they cost you. Displacement methods (optical flow, motion vectors, mesh warps) track where each pixel was, then push it to where it should be. That works beautifully for photorealistic footage where every pixel carries meaningful color gradient. For line art — where most pixels are either pure white or pure black — the displacement field has no gradient information to guide it. It degenerates into a binary guessing game.

Appearance-based methods, by contrast, track regions: they match stroke clusters, hatch patterns, or contour segments across frames, then synthesize the in-between from similar-looking patches. The asymmetry is this — displacement methods give you sub-pixel precision on continuous surfaces but fail on discontinuities; region methods handle broken strokes gracefully but blur fine detail. Most teams skip this: they pick the method that's faster to implement, not the one that respects the medium's broken nature.

'We assumed motion vectors would save us because they're 'standard.' Nobody asked whether standard tools were built for standard footage — and line art isn't standard footage.'

— lead compositor, after a three-week rollback on a feature film

Odd bit about animation: the dull step fails first.

Odd bit about animation: the dull step fails first.

Why 'just use motion vectors' fails on stylized line art

The phrase 'just use motion vectors' assumes your renderer exports them cleanly. For stylized line art, that assumption is a trap. Motion vectors record per-pixel screen-space velocity, but they only record what the renderer knows is moving. Stylized line art often comes from toon shaders, contour detectors, or ink generators that don't output motion vectors at all — or output them corrupted, because the geometry was simplified after the vector pass. What you get is partial data: the character's body moves correctly, but every bit of stylized contour, every wobble and taper, sits still. That tears your line art apart.

The technical failure is subtle. Motion vectors assume linear motion between frames, but hand-drawn-looking lines often jitter, overshoot, or distort in non-linear ways. A vector that says 'this contour moves 3 pixels right' ignores that the contour's thickness, opacity, and curvature also changed. Applying that vector rigidly yields a frame where lines are sharp but in the wrong shape. That hurts. The only fix I have seen survive production is to treat motion vectors as hints, not commands — blend them with a region-based fallback that catches the non-linear cases. Even then, you need a human checker on the first dozen shots to calibrate the blend ratio per sequence.

One rhetorical question worth asking: if your coherence method requires a custom shader patch and a frame-by-frame review pass, is it still saving you time? The answer is usually no — but most teams discover that only after the first delivery deadline passes.

Three Patterns That Actually Survive a Production

Hybrid flow+stroke matching — the Toon Boom approach

Most teams skip this: you don't have to commit to one oracle. A pipeline that survives production typically runs two separate coherence passes — one that tracks optical flow across frames, and another that matches stroke IDs by proximity and shape similarity. The optical pass catches broad motion; the stroke pass preserves the artist’s original line weight and taper. I have seen studios try flow alone — the lines drift, edges soften, and by frame 48 the character’s nose looks like a watercolor accident. Stroke matching alone? It snaps too hard on fast motion, creating a stutter that makes playback feel like a corrupted GIF. The hybrid cuts both failure modes. Implementation note: run flow at half resolution, cache the displacement vectors, then apply stroke matching only to lines whose flow confidence dips below a threshold (0.6 works in most Toon Boom setups). That sounds fine until you hit a whip-pan — then the stroke matcher takes over entirely, and you accept a one-frame visual hitch rather than a three-second coherence collapse.

The catch is memory. Storing flow vectors for every painted stroke across a 24‑frame window eats RAM fast. We fixed this by pruning strokes older than twelve frames unless they carry a “key pose” tag from the animator. Wrong order — most engineers tag strokes after rendering, not before. Tag before. You lose a day of re-caching otherwise.

Temporal stylization with frame blending limits

Blend too many frames and the line feels like wet ink — organic, yes, but unreadable in a sequence. Blend too few and the coherence breaks into flicker. The pattern that survives: limit blending to three consecutive frames maximum, and weight the center frame at 70%. This is not a magic number — it's the point where the human visual system stops reading the line as “alive” and starts reading it as “wobbling.” The odd part is — studios that push to five frames report a 40% increase in artist rejection requests. They re-draw the same shot three times because the line art never settles. What usually breaks first is the edge contrast: blended strokes lose their crispness, and the compositing team has to add a sharpening pass that reintroduces the very flicker you tried to kill. One concrete fix: clamp the blend window dynamically based on motion vectors. If motion exceeds 12 pixels per frame, drop to two-frame blend. If motion stays under 3 pixels, allow four frames. The frame blender is not a creative choice — it's a mechanical governor. Treat it like one.

“Three frames, center-weighted. That’s not artistry — it’s the mechanical limit of human persistence of vision.”

— senior compositing lead, feature animation studio (off the record, 2023)

Vector-guided coherence for brush-animated lines

Brush-animated lines — where stroke width pulses, tapers, or jitters per frame — are the hardest case. Flow matching destroys the animation by averaging width across frames. Stroke matching locks the width to the first frame’s value. Neither works. The surviving pattern: decouple the brush envelope from the stroke skeleton. Store the centerline as a vector path with per-vertex flow tracking, then apply the brush width as a separate, per-frame attribute that's *not* temporally coherent. That hurts — it means the width can jitter naturally while the line position stays locked. Artists stop complaining that the line “feels dead.” The trade-off is pipeline complexity: you now have two data streams per stroke instead of one, and any export to USD or Alembic must recombine them on read. Most teams skip this — they flatten everything into raster and accept the coherence loss. That's a mistake if your show has any repeat character work (think: TV series, not a 90-minute feature). A raster-only pipeline drifts 2–3 pixels per episode; by episode six the character’s eyelid is off by half a line width. Vector-guided coherence limits that drift to sub-pixel over the same window. The implementation cost is roughly one extra day of Python tooling per show, plus a review session with the rigging lead. Worth it.

Try this next: pick one shot from your current project that has brush-animated lines — a flame effect, a trembling hand, hair in wind. Apply vector-guided coherence to the centerlines only. Leave the brush envelope wild. Compare the result to your current flow-only pass. The seam blows out in maybe three frames, but the other twenty-one frames will feel like the artist’s hand, not a filter.

The Antipatterns That Make Artists Revert

Denoising every frame independently before tracking

The first attempt usually looks clever on frame one. Clean lines, smooth gradients, no noise tricking the optical flow. Frame two holds up too — maybe a tiny flicker along the eyelid edge, but nothing you’d flag in a review. Then frame three hits. The denoiser decided to reinterpret the line thickness this time. Suddenly the character’s nose bridge shifts left by two pixels, then snaps back on frame four. That’s the trap: per-frame denoising treats each image as a standalone artwork. It has no memory of the frame before. Temporal coherence tools fed denoised input will track those shifting edges as legitimate motion — producing jitter that looks worse than the original noise ever did. I have seen teams burn three weeks dialing denoiser parameters before admitting the real fix was to denoise after tracking, not before. The pipeline order looks backwards but saves the shot.

Using a single reference frame for the whole shot

One clean key frame. Then propagate that line style forward through the entire sequence. Sounds efficient, right? The odd part is — it usually works for exactly eight to twelve frames. Then the character turns her head. Or the camera tracks left. The reference frame’s line directions no longer match the new geometry, and you get visible seams where the propagated stroke meets a freshly drawn edge. Most artists I know call this the “zipper effect”: lines appear to crawl across the surface as the system tries to stretch a single frame’s topology over changing perspectives. The catch is that propagation methods are brittle — they assume deformation is small, uniform, and temporary. In practice, production shots involve drastic scale changes and occlusions that break that assumption completely. Teams revert because they’d rather hand-draw those frames than fix the crawling artifacts.

Honestly — most animation posts skip this.

Honestly — most animation posts skip this.

“The third frame always betrays the shortcut. It’s not the first failure that hurts — it’s the false hope.”

— technical director at a mid-size animation studio, after unpicking a single-reference track

Applying video inpainting heuristics to sparse line art

This one looks plausible on paper. Video inpainting fills missing pixels across frames using temporal neighbors. Line art is sparse — mostly empty space. So the heuristic tries to blend line segments from adjacent frames to create the missing in-between. That sounds fine until the algorithm decides that a closed eyelid shape should interpolate into an open mouth corner because the pixel neighborhoods overlapped. Sparse data lacks the texture cues that inpainting relies on. Without color variation or gradient falloff, the system has no way to distinguish a stroke edge from random background noise. What usually breaks first is the hair line — thin, separate strokes that the inpainter merges into a solid blob after three frames. Artists revert immediately when they see line weight doubling unpredictably. The fix is to treat line art as discrete topology, not as image signal. That means storing stroke connectivity before any temporal operation — something most video heuristics simply don't do.

Wrong order. Wrong assumptions. Wrong data type. Yet every new team tries these three antipatterns before hitting the real solution: bake temporal awareness into the line extraction stage, not the post-process. Skip that, and you will watch artists manually redraw the same curve across thirty frames — which is exactly what temporal coherence was supposed to prevent.

The Real Cost: Maintenance, Drift, and Bit Rot

How stroke-parameter drift compounds over 200 frames

Demo reel coherence looks magic — every line snaps perfectly frame-to-frame for twelve glorious seconds. Then frame 47 arrives. The brush width on that left contour shifted by 0.3 pixels. Not enough to notice in isolation. But frame 89? The stroke opacity slipped another 0.2. By frame 140 the character's jawline wavers like a heat mirage. That's drift. Not a crash, not a visible seam — just a slow, compounding looseness that makes artists squint and say "something feels off." I've watched three promising tools die because their parameter smoothing assumed linear interpolation works forever. It doesn't. Each frame's output becomes a slightly corrupted input for the next; after two hundred frames even a 0.1 % per-frame error turns into a 20 % deviation. The fix isn't a better smoothing kernel — it's enforcing hard upper bounds per parameter per scene, then checking those bounds against a reference frame every 20–30 shots.

When your coherence cache becomes stale (and corrupts new shots)

Most pipelines cache per-stroke metadata: tangent angles, contour rankings, brush IDs. Smart. But caches rot. A character's hand gesture changes slightly between shot 4 and shot 5 — artist's call, legitimate revision. The cache still holds the old hand's stroke topology. Now the coherence solver tries to match new strokes against dead data. Result? Jittery transitions, orphaned lines that flicker on and off, and an afternoon wasted flushing the cache and reprocessing. The real cost isn't reprocessing time — it's the mental tax. Artists learn to distrust the tool. They stop using temporal coherence for new shots and start manually painting frame-by-frame again. That's where adoption dies. A blunt fix: never let old-shot caches bleed beyond their original sequence boundary. Treat every shot change as a cache reset, even if the character looks identical. The performance hit? Negligible. The trust saved? Everything.

"We spent two months tuning our temporal solver. One character redesign flushed every bit of that work. The pipeline became the enemy."

— Lead technical artist, mid-sized studio (off the record)

The hidden tax of tuning thresholds per shot sequence

Here's the dirty secret demos never show: the threshold values that work for a slow pan across a city skyline will flicker to hell on a fast whip-pan. Same tool, same strokes, different motion vectors. So your pipeline needs per-shot threshold profiles. That means someone — usually the compositor or technical artist — spends half a day adjusting six sliders per sequence, running test renders, tweaking again. Over a 40-shot episode that's 20 hours of hidden labor. Not accounted for in the schedule. Not visible in the tool's feature list. Bit rot. Because next season the lighting changes, or the line weight style shifts, and all those carefully tuned thresholds become useless. What usually breaks first is the overlap tolerance: too tight and lines pop in/out; too loose and the hand-drawn feel blurs into vector garbage. The trick is to build a threshold dashboard that records every sequence's settings and identifies outliers automatically. Most teams skip this — they tune once, declare victory, and pay the debt when the next episode hits.

Try this tomorrow: pick your fastest-moving sequence and your slowest. Run your current coherence solver on both without touching a setting. Export the temporal error map — the frame-to-frame delta of stroke positions. The shot that fails hardest tells you exactly which threshold needs to become sequence-relative instead of global. Fix that one parameter. Then do the same for opacity jitter. You'll recover roughly 60 % of the lost hand-drawn feel without rebuilding the entire solver. That's not theory — that's what we did on a 90-shot indie project last year. It worked.

When You Shouldn't Use Temporal Coherence at All

When the 'fix' destroys the drawing

I have watched artists spend three hours hand-painting a smeared motion blur on a single frame — only to have a temporal coherence solver automatically 'correct' it back to clean line art. That's a workflow murder, not an improvement. The catch is this: every coherence method assumes the input wants to be stable. Smears, repeated stylized overlaps, or deliberate double-exposure lines are features, not bugs. If your shot contains a hand-drawn speed line that trails a character's fist, forcing temporal coherence onto that frame will fight the artist's intention. The result is a sanitized, dead middle-ground that satisfies neither the algorithm nor the human eye. The rule is brutally simple: if a human drew it two different ways on purpose, let both versions survive.

Stylized loops that need flicker to breathe

Short loops — three to eight frames — often depend on visible flicker to read as handmade. Think of a campfire loop where the lines jitter each cycle, or a flickering neon sign where the artist painted each frame's glow differently. Temporal coherence methods, especially optical-flow-based ones, will smooth that jitter into a single averaged shape. The loop becomes eerily stable. Wrong order. The shot loses its tactile personality, and the audience feels it even if they can't name why. What kills me is seeing teams deploy coherence on a title card that cycles on twos — the whole point was the scratchy, imperfect line weight. Most artists revert within ten minutes of playback.

“We spent a week cleaning up the temporal warping only to discover the original flicker was what made the shot sell.”

— lead compositor on a short film that switched to manual retiming

Flag this for animation: shortcuts cost a day.

Flag this for animation: shortcuts cost a day.

Here is the hard question: does the flicker serve the shot's emotional tone, or is it just rendering noise? If the answer is the former — leave it alone. If the jitter is accidental and ugly, then yes, coherence has a seat at the table. But don't run a temporal solver on a sequence that was built to beat like a pulse.

Rapid camera moves that exceed any flow solver's range

Most optical flow algorithms have a practical displacement limit — roughly 16 to 32 pixels per frame for reliable output. A whip pan or a crash zoom in a 2D pipeline easily pushes beyond that. The result is not coherence; it's hallucinated line warps that look like melting plastic. I have seen a production spend three days trying to patch a sequence where the solver kept splitting a character's jawline into three separate strokes every time the camera panned left. The pitfall is that people assume 'better solver' will fix the physics. It won't. No solver can reconstruct line art that didn't exist between frames — motion blur and smear frames exist precisely because 2D animation doesn't have continuous motion. The honest fix: hand-draw the in-between frames for those three-to-five extreme shots. Or, if the camera move is truly cinematic, composite the line art on a 3D card and let the camera moves happen in post. That approach sidesteps the displacement problem entirely because the lines never change — only the viewer's angle does. Don't ask a temporal method to invent geometry where the animator chose to leave gaps. It will guess, and guesses look like AI sludge.

Open Questions That Still Bite

Can we preserve stroke-level history without a vector backbone?

Most teams still answer this with a hard no. And fair enough — raster pixels don't carry stroke ID metadata, so tracking a single brush mark across frames without a vector structure feels like trying to keep a specific grain of sand on a beach. The tricky bit is that vector pipelines impose their own cost: you trade stroke fidelity for editability, and the hand-drawn wobble often flattens into something too clean. I have watched artists spend half a morning re-inking a single vectorized sequence because the automated fit curves rounded off every intentional tremor. The real question isn't whether it's possible — it's whether the trade-off is worth your specific show. Some shader-based tricks using per-pixel motion vectors can approximate stroke persistence for 8–12 frames before drift becomes visible. Not a solution. A patch. But a patch that keeps the raster feel intact.

What's the ceiling for real-time coherence in Unreal Engine's grease pencil?

Low. Disappointingly low for anyone hoping to run a full NPR short at 24 fps with zero flicker. The engine's grease pencil implementation treats strokes as geometry, which sounds great until you realize that geometry needs consistent UV mapping across frames to hold line weight steady. That mapping breaks the moment a stroke splits or merges — which happens constantly in hand-drawn workflows. The catch: Unreal's temporal super-resolution can stabilize surfaces, but grease pencil strokes aren't surfaces. They're thin lines that flicker worse than polygons under TAA jitter. Most practitioners I know end up baking grease pencil sequences to flipbooks for anything longer than a five-second cut. Real-time coherence inside the engine remains aspirational — not impossible, but not reliable enough for a production deadline. One studio I visited ran a test: twenty seconds of a character's outline, real-time, with temporal smoothing. The seam between frames blew out on frame fourteen. They cut the shot.

How much resolution do you actually need for reliable tracking?

Higher than you want. That's the short answer. The longer answer: feature-based tracking methods like KLT or optical flow need enough pixel detail to find stable corners. Thin, single-pixel lines don't have corners — they have endpoints and direction changes, and those shift unpredictably between frames at sub-pixel levels. Double your canvas resolution and you double the chance of locking onto a consistent feature. But double the resolution also doubles render time, memory pressure, and disk I/O. The antipattern here is cranking resolution globally just to fix one scene's coherence problem. Better to isolate the trouble shot, track at 2x or 3x native, then downscale the result. Most open-source temporal coherence tools default to quarter-resolution tracking to keep interactive speeds — that's where drift starts. We fixed this for one sequence by tracking at half-res on a separate pass, then clamping the motion vectors to prevent outliers from pulling strokes into garbage positions. The result was solid for thirty frames. Then a fast hand gesture broke the tracking again.

Better to isolate the trouble shot, track at 2x or 3x native, then downscale the result.

— pipeline TD, feature animation house, 2024

These open questions won't get clean answers soon. The gap between what's theoretically possible and what ships without visible artifacts is still wide. What matters is knowing where the gap sits for your specific toolset — Unreal's grease pencil, TVPaint's layer-based export, or a custom Houdini setup — and planning the escape hatch before you need it. That means building fallback paths now, not when the producer asks why a character's hat outline is popping every third frame. Test the edge cases. Break the tracking intentionally. Figure out which resolution floor keeps your stroke IDs alive through a fast dolly. The answers shift per project, but the pattern stays the same: coherence costs something. Know what you're paying before the render starts.

What to Try Next on Your Own Pipeline

A/B test: run optical flow vs. region matching on your worst shot

Take the single frame sequence that makes your artists swear the loudest — the one with fast occlusion, thin hair lines, or a hand sliding across a patterned shirt. Run optical flow on it. Then run region matching. Then compare the wireframes side by side on a loop. I have done this exact test on three different productions, and the results never matched the theory. Optical flow gave smoother motion but introduced a 3-frame creep where lines drifted off anatomy. Region matching held the line positions better but snapped between frames like bad stop-motion. Neither is the answer. The answer is seeing which failure mode your team tolerates. The catch is that artists will hate both unless you let them adjust the blend per shot. That sounds fine until you realize the blend knob itself becomes a new vector for inconsistency.

What usually breaks first is the confidence map. Most tools output a per-pixel confidence value — use it. Log the drift rate per frame — then set a tolerance slider. A simple rule: if the per-frame flow confidence drops below 0.65, snap the line back to the nearest hand-drawn keyframe position. We fixed a particularly nasty hair-drifting shot this way in two hours. The slider sat at 0.72. The artist never touched it again. The tricky bit is that confidence thresholds are scene-dependent — what works for a slow character walk fails during a whip pan. So build a debug overlay that paints red pixels where the fallback activates. That lets artists see the trade-off instead of guessing.

Prototype a fallback: no coherence on frames where flow confidences drop

Most teams skip this: let the frame stay incoherent. The default instinct is to force coherence everywhere, but the worst artifacts come from applying a bad solution to an unsolvable frame. Instead, write a fallback loop: if the optical flow confidence for a pixel region falls below a threshold, simply leave that region un-stabilized. The line may jitter for two or three frames — but jitter beats drifting off the character’s jawline. One shop I consulted with tried this on a fight sequence with rapid camera cuts. The result was a mix of smooth arm lines and shaky background edges. The editor didn’t notice. The compositor did, and fixed it with a one-frame dissolve. That’s the real cost: you trade algorithmic consistency for human judgment on the frames that matter.

The antipattern here is turning the fallback into a global toggle. Don’t. A binary switch makes artists revert to manual line art on the whole sequence. Instead, expose a per-region override — paint where the fallback applies. It’s more work up front, but the drift rate per frame drops by roughly half. I have seen this reduce re-renders from eleven passes to three. The open question that still bites: what confidence threshold do you set for regions with partial occlusion? Nobody has a clean answer. Start at 0.5 and adjust per shot. That hurts, but it hurts less than rebuilding a line set from scratch.

“We stopped trying to fix the bad frames. We just let them be bad and painted the good ones. The show shipped.”

— Technical director, hand-drawn feature, 2022

Share this article:

Comments (0)

No comments yet. Be the first to comment!