1
\$\begingroup\$

This is a weird effect where objects bend at the edges of the screen (shearing?). It doesn't happen everywhere. I know it happens in Minecraft and Godot, but not Blender or Bevy. What is it and is there a way to remove it?

Here's an example (Godot):

Cube at the center of the screen :

cube at the center

Same cube, just rotated the camera:

cube at the edge

And here's the cube in a similar position in Blender:cub

In Blender the cube isn't distorted in any way. What's going on?

\$\endgroup\$

1 Answer 1

3
\$\begingroup\$

This is not "bending" (notice that straight lines remain straight, they don't become curved), but a distortion due to linear perspective.

As I explain in some previous answers, from a specific viewpoint (determined by the camera's field of view angle and the physical dimensions of the display viewport), this effect exactly cancels out the foreshortening you get in your visual field from looking at a flat screen obliquely. So even though the object gets stretched to cover more screen pixels, those pixels occupy a smaller angular span across the viewer's retina, and the illusion of a window into a virtual 3D world is preserved.

The trouble is, the "correct" field of view for a typical viewport size and viewing position is often narrower than we'd like. Imagine drawing straight lines from the bridge of your nose through the center of the top and bottom edges of your window. The angle between those lines is probably only 60 degrees or maybe less - so we'd only see a fairly narrow slice of our 3D world through that viewport if we used the optimal distortion-cancelling field of view angle in our rendering.

Instead, games and 3D apps often use vertical field of view angles of 90+ degrees, which would correspond to a viewing position much closer to the screen. From farther back, there's not enough foreshortening to compensate, and we end up seeing some of this stretching - most noticeably at the far left and right sides of the window for landscape-oriented displays. Players (especially in FPS games) and developers usually accept a certain amount of this distortion as a compromise in trade for being able to see more of the world at a time / having more peripheral vision.

In the Blender screenshot, this effect is less apparent only because the field of view angle is relatively small for the width/aspect ratio of the viewport. If you stretched the viewport wider with the same FoV setting, you'd see the distortion become more pronounced.

You can change your editor camera's field of view settings in Godot to reduce the apparent distortion, in exchange for seeing less of your world at a time.

In games designed to be played on widescreen monitors, especially FPS games, we'll sometimes use alternative camera projections or post-process shaders to minimize the apparent distortion at the edges of the screen. This results in a compromise projection that might not be strictly correct from any point of view, but is aesthetically preferable to seeing elongated/skewed objects at the far edges.

\$\endgroup\$

You must log in to answer this question.

Not the answer you're looking for? Browse other questions tagged .