Give painting the surface it has to fit
A character can look finished from the front and still have an unpainted underside, a smeared nose or a highlight that stays stuck when the scene light moves. Those defects look related in the final render, but changing the image model is not the right response to all of them.
We separate the shape from its appearance. An existing mesh supplies the surface; the selected character still supplies the intended colours and markings. The current MV-Adapter path renders normals and positions from that mesh. Normals say which way each patch faces. Positions say where it belongs on the body.
The model receives those aligned controls and proposes six paint views: four around the body, one above and one below. These are fixed cameras. The generated images are typically 768 pixels across, while the assembled texture atlas is 4096. A larger atlas has room for more samples; it does not invent an unseen stripe.
These are different images from the four-view reference packs used for reconstruction. The mesh already exists, and the geometry controls now tell painting which surface each camera must fit.
A surface gives painting something to fit
Geometry controls fix the surface and camera. The image model proposes appearance. Projection and finishing decide how those proposals become a texture.
Generate the paint views
Assemble the surface colour
The generated front owns the facial region as a unit. Empty atlas background is not a missing surface sample.
Decide which view owns each face
Projection turns an image pixel into surface colour by using the recorded camera. A face seen nearly edge-on offers fewer useful pixels. A hidden face has no visible evidence from that camera. Even a visible patch can lose its source when the ownership policy rejects that view.
We keep the generated front responsible for the facial region as a unit. Combining one eye from a side view with a muzzle from the front can splice together drawings that disagree. A coherent owner is a useful constraint, although it cannot make a bad generated face correct.
The bake records ownership separately from colour. That lets us ask whether a dark pixel is intended paint or whether the surface has no accepted source. We also keep a surface-occupancy mask: unused background in the flat atlas is not a hole to fill.
Find the surface with no colour source
A texel is one pixel in the texture. The coverage check first asks whether it represents a real point on the mesh, then whether any view owns it. Only the valid, unowned surface samples need the fallback. Filling every black atlas pixel would confuse empty layout space with missing paint.
A retained fox study counted 71,414 valid surface texels without an owner, including recessed and unseen areas. That historical count identifies the problem; the little paper example below explains the method. It is not a replay of that fox result.
The distinction also gives us a useful debugging question. Does the patch exist in geometry? Does it have texture space? Does it have an accepted image source? We answer those before asking a model to redraw anything.
Fill along the body, across the UV seam
UVs lay a curved surface out in a flat image. Cutting that layout into islands helps pack it, but breaks the relationship between image proximity and surface proximity. Two adjacent body samples may sit on opposite sides of the atlas; an unrelated patch may sit one pixel away.
The fallback follows a graph of neighbours on the surface, including connections across UV seams. Known colour stays fixed while the solver finds a smooth continuation through the missing region. In the little model below, each unknown sample settles at the average of its surface neighbours. Repeated updates carry the two boundary colours across the gap.
On the six-sample strip below, the endpoints are 0.2 and 0.8. Equal neighbour weights give the four missing samples 0.32, 0.44, 0.56 and 0.68. Moving island B changes where we store those samples, not which points touch on the body. Recolouring the nearby triangle should have no effect.
This is inferred colour. A stripe that disappears behind an arm cannot be recovered from a smooth average. If a disconnected component has no known boundary at all, the teaching solver refuses to pretend it has evidence. A new reference, an artist decision or an explicitly different fallback is needed.
Move the UVs. Keep the surface neighbours.
Four samples on this sheet have no paint source. Fill them, then move the atlas island or recolour its nearby triangle. Those atlas changes must not change the colour inferred along the sheet.
Four colour samples inferred from the two known boundaries. Inferred scalar samples: 0.32, 0.44, 0.56, 0.68.
One surface strip, six samples and uniform neighbour weights. Squares mark known colour; the four middle circles are inferred only after fill. A and B are UV islands of that same strip; the triangle is unrelated. This scalar teaching model cannot recover a hidden stripe or reproduce the full painter.
Why this little strip blends linearly
function fillStrip(left, right = 0.8) {
return Array.from({ length: 6 }, (_, i) =>
left + (right - left) * i / 5
);
} On this equally spaced chain, the harmonic solution is a straight blend between fixed endpoints. The live figure checks that result with the shared neighbour-averaging solver. General surface graphs need their actual connectivity and boundary conditions.
Give the nose enough texture space
Another mouse defect looked like a painting failure: several painters smeared the nose. Part of the head had very little atlas area for the surface it represented. A detailed generated view still loses detail when many surface points collapse into a few texture pixels.
The retained UV repair re-unwrapped one island. Under that study’s density test, starved faces fell from 3,670, covering 2.54% of the whole mesh’s area, to zero. The separate 8.2% figure used head area as its denominator. Keeping the denominator beside the result prevents a much larger-looking claim.
That was an allocation repair, not a new appearance source. Increasing atlas size can help a correctly allocated surface; it cannot reliably compensate for one tiny island receiving almost none of that space.
Inspect the paint under a different light
A generated view can include a convincing highlight that the bake treats as colour. Move the scene light and the pale mark remains. Painted strand detail can cause a similar double description when a later groom adds its own fibres.
The Cleanbot detail below shows the symptom clearly. The left uses procedural enamel; the right uses MV-Adapter paint, with the same code-built additions. Pale smears stay in the painted shell. This is a historical r5 comparison, not a corrected output or a contest between two mesh models.
The current paint path also fits orientation-dependent light across the generated views, then aligns material colours to the still before baking. The source records a gecko test where the fitted light pointed toward the pale belly and the patterned back came out lighter. A naturally darker back and lighter belly can resemble a lighting gradient. Removing the unwanted light therefore needs a separate check that the character’s real colour survived.
An extra camera solves a different part of the problem
We also investigated choosing a camera from the gaps. In separate labelling research, candidate cameras were scored by the area of entirely unlabelled segments they could expose. Another clear view of an already-covered cheek added no new coverage.
On one retained chipmunk test, adding a planned fourth view reduced blind segment area from 2.614% to zero. That was a small two-subject investigation; the default stayed unchanged. Seeing every segment did not establish that every part name was right.
The diagram shows the visibility question only. This work was not an adaptive paint-repair loop: the current painter still generates its six fixed views. Choosing a new camera, generating compatible appearance and admitting its colour would each need a checked handoff.
An upright fold blocks the camera
Camera A cannot see the marked patch behind the fold. Its solid sight lines stop at the occluder; dashed lines show where the hidden samples would lie.
A different camera sees the same patch
Camera B moves to the other side. Its three sight lines reach the same sample points. The surface, fold and marked patch have not moved, and no new geometry has been created.
Check coverage, continuity and character separately
A smoother texture is not automatically a better character. One historical cleanup study improved seam continuity while moving the mouse face further from the reference. Those previews were held for face work. A coverage metric had improved while the thing we cared about had worsened.
Keep those inspections separate: missing geometry needs shape work; poor UV allocation needs layout work; an ownerless surface needs a source or an explicit fill; a missing part name needs semantic evidence. The same black or blurred area can lead to very different next actions.
The reference article explains how we prepare the visual evidence. The model comparison explains what arrives from reconstruction. Painting carries that design onto a known surface, with the inferred portions and remaining uncertainties kept visible.