Practical creative workflows

Sprite Pivot Alignment: Pad Frames Without Redrawing

Three upright graphite forms on an ivory base aligned with a small amber marker
Abstract editorial artwork; the walkthrough below uses actual product captures.

A courier’s foot jumps when differently cropped animation frames share the same centre position. Changing the drawing can create another problem. The useful preparation is a consistent frame and an explicitly chosen contact point that your engine can interpret.

We built three fictional pixel sprites in Ciyo’s file workspace and padded them into common frames. Their foot anchors were supplied coordinates, not discovered engine pivots. The downloaded files preserve their source rectangles exactly; engine import and animation playback still need a separate check.

Record the anchor before adding padding

Choose a consistent semantic point, such as the sole touching the ground. Record its coordinates from a stated origin. A sprite’s visual centre, bounding-box centre and foot contact point are different concepts; let the game’s requirement decide.

Our source PNGs are tightly cropped RGBA drawings with binary transparency. Frame A is 18×22 with local anchor (9,21), B is 20×20 with (10,19), and C is 16×24 with (8,23). Coordinates use a top-left pixel origin.

Full Ciyo viewport showing three tightly cropped courier sprites and their labelled source anchor board
Actual procedural test sprites. Magenta marks identify the supplied foot contact pixels; they are not engine measurements.

Choose one frame and one common contact point

We selected a transparent 32×32 frame and common anchor (16,28). Each source must fit after translation. If the computed placement clips any source edge, enlarge the frame or choose another common point before writing the output.

Compute offset as common anchor minus local anchor. This is integer translation without scaling. Do not ask for a new pose or a smoother silhouette when the goal is preserving approved frames.

Actual placement plan: top-left pixel origin
FrameSourceLocal anchorPaste offsetCommon anchor
A18×22(9,21)(7,7)(16,28)
B20×20(10,19)(6,9)(16,28)
C16×24(8,23)(8,5)(16,28)

Copy pixels directly into a transparent frame

Ciyo copied each complete RGBA source rectangle into the output. Using the alpha channel as a paste mask can blend pixels instead of copying them directly; specify the operation clearly if partially transparent edges must survive.

The source files here contain only clear or opaque alpha, but the requested direct-copy method also avoids unnecessary blending. Keep the unmodified sources beside the prepared frames so you can repeat the comparison.

Copy this file-workspace request
Pad these existing RGBA sprites into transparent 32×32 frames. Use common anchor (16,28) and local anchors A (9,21), B (10,19), C (8,23), all top-left origin. Paste at A (7,7), B (6,9), C (8,5) with direct RGBA copy, without resizing or redrawing. Reopen outputs; compare source rectangles exactly and assert outside alpha is 0. Return files and an anchor manifest.

Verify the saved rectangles and empty margins

We independently downloaded and decoded all three prepared frames. Each source rectangle matched every RGBA pixel, every outside pixel had alpha 0, and the contact pixel arrived at (16,28). These checks verify file preparation, not the behaviour of an animation controller.

Ciyo caught an overlapping label in its first comparison board and made a corrected final board. The clean saved layout needed a page refresh after an obsolete draft was removed. We retained that trace; display arrangement did not change the sprite files.

Full Ciyo canvas showing the source and aligned-frame boards with the final pixel-check summary
The clean final review preserves every source rectangle and places all three contact pixels at the common anchor.

Translate the coordinates into your engine’s convention

An engine may express an origin as a normalized point, a centre offset or another coordinate convention. This manifest deliberately records top-left pixel coordinates. Do not paste its numbers into an unrelated engine field without translating their meaning.

Import a short sequence, disable unintended smoothing when appropriate, and check the ground contact during playback. A consistent contact point reduces one source of visual jitter; it does not correct poses, timing or an inconsistent drawing.

Deliver an anchor manifest with the frames

Keep source size, local anchor, paste offset and common anchor together. A teammate can then audit the placement instead of inferring it from a screenshot. The retained JSON below includes the actual filenames and checks.

For a different sprite, choose the contact point from the approved art and repeat the fit and pixel comparisons. Transparent padding provides a consistent container; it does not infer the correct physical anchor for every character.

Practical questions

Is padding the same as atlas spacing?

No. Here padding aligns each frame’s chosen contact point. Atlas spacing separates packed images to reduce sampling bleed.

Were these anchors tested in a game engine?

No. They are prepared top-left pixel coordinates. Translate and review them in your target engine.

Did the sprites change shape?

No. Independent decoded comparisons confirmed each retained source rectangle was identical.

Align one short sprite sequence

Open approved source frames in Ciyo, state a common anchor and request verified transparent padding plus a manifest.