As the images above show, when trying to use the Transform tool to rotate a layer the pixels in the end-result are in different positions from the preview. This also happens during other Transform actions, but rotate is the most obvious.
Is there a setting that would disable this from happening? Should I be using a different tool to apply the transformations?
I’m doing sprites for a game, which will be scaled up in the engine, so I’m trying to get the end-result to be exactly like the transform preview without added anti-aliasing.
- Problem: Pixels are shifting position between setting a transform and applying it. End result is drastically different from preview.
- Global Image Interpolation: Nearest Neighbour (preserve hard edges)
- Transform Image Interpolation: Nearest Neighbour
- Snap off?: On/off, same results.
- Grid off?: On/off, same results.
- Which Transform?: Free Transform, Ctrl+T.
- Layer as a Smart Object: Running the transform on a smart object shows the result in picture 3 during transformation, not just after applying it. I’m guessing when applying Transforms to rasterized layers, Photoshop runs the same functionality it uses to transform smart objects.
I tried a few different tricks and wasn’t able to get things looking ideal with just the transform tool.
Method 1: Screenshot
I think the easiest method to preserve the transform preview is to disable the canvas overlay for the transform handles with
Extras and take a screenshot at 100% zoom.
From there you’ll need to get transparency happening again. Maybe a good solution for that is to place the artwork on a solid colour background — a colour you’re not using anywhere else. That way you can automatically make a selection that removes it perfectly.
You’ll also need to make sure your color profile is set to
Do Not Color Manage This Document and
Proof Colors is disabled.
Method 2: Work at 400% scale
Scaling the document up by exactly 400% using nearest neighbour, then transforming using nearest neighbour, then scaling the document down to 25% using nearest neighbour again gives great results. They don’t match the transform preview, but it does look good.
This obviously works at many scaling factors, but exact multiples are easier to work with, so I’d recommend 400%, 800%, 1600% etc.
Related issues with 90º rotation
There are cases where odd × odd and even × even dimensions for artwork give different results to odd × even and even × odd, due to the origin being in centred on the pixel vs aligned to the pixel boundary (it’s only an issue when each axis’ centring is different). And in this case, that can make a difference as well, but that’s not the main issue. It is more of a problem with 90º rotation.
The solution is to add something to the layer so it makes the dimensions odd × odd or even × even. A single pixel will do it.
You might also see that problem when rotating pixel art. I’ve mentioned it here for completeness.