The PSX Texture Warping (and other fun graphical quirks!) Appreciation Thread

Ever since the first time I played MGS I have been endlessly fascinated by the swimmy barely-holding-it-together polygons of the original PlayStation, though the quirk that really stood out to me was the odd perspective IN-correct texture warping that would happen at certain angles. Check out these sweet crinkle-cut wall panels, for example:


From what I understand, this has to do with affine texture mapping doing a poor job at approximating perspective, but I've seen conflicting discussions of the phenomenon and root cause. Either way, even though my young brain knew it looked "wrong" I just loved the gritty, rough feel it would add to PSX games. The truly ambitious early 3D games (e.g. MGS and Vagrant Story) had an almost origami/diorama-esque quality to them.

So, yeah, I wanted to start this thread to hear other peoples' thoughts about this look and perhaps some other examples of graphical quirks that stuck with you--say, the Vaseline-smeared trilinear filtered super low res N64 textures or the coming-apart-at-the-seams goodness of Saturn's quad-based rendering. These arose out of necessity at the time, of course, but any examples of modern games channeling this would be fair game!

I had the same response when first playing Tenchu on the PSX.

The white textures used in the snow here feel almost like sheets of paper placed side by side and make the seams very noticeable.

@seasons#19339 Wow, this is a perfect example of what I mean, it's like papercraft. Those trees are another example of an early 3D challenge rife with fun graphical phenomena–I always enjoyed seeing how different developers approached it. Sometimes we got these perpendicular flat standees with some alpha effects, sometimes we got conical 3D models, and sometimes there was my personal favorite, the completely flat sprite locked into facing the camera.

Nobody questioned it at the time – I certainly didn‘t, none of my friend ever pointed it out. I barely remember it ever being mentioned in reviews, it was just an accepted part of the then still fresh polygon experience. The N64 didn’t have the same z-buffer problem but had issues of its own with memory and storage that lended its titles a unique look. 3D was still new and exciting and few people were critical of the technical flaws.

I think it's funny that people try and emulate the look in Unity games now!

The improbable GBA port of Driver 3 is rife with some excellent undulations



I'm so fascinated by 3D showing up on consoles and platforms that have no rightful claim to step beyond the second dimension. The corner-cutting and other tricks needed to make it happen lead to a unique aesthetic all its own. The team that developed this, [VD-dev](, had a few other GBA games using similar engines. Would be interesting to hear a post-mortem about how these were developed.

Saw some footage from this upcoming game on Steam and I was basically the “Sickos” meme guy staring at it:

Look at those swimmy vertices and wavy textures...perfection!

Incidentally, I recently learned from this [MVG video]( that the DuckStation emulator can do a marvelous job adding perspective correction to PSX textures. Frankly, I'm appalled.


@“kory”#p19317 From what I understand, this has to do with affine texture mapping doing a poor job at approximating perspective

that creates other issues, like texture scintilation. i believe the warping comes from texture sampling being too imprecise.

People definitely did question it at the time! I saw talk of X port vs Y port having “less texture warp” and thus being the better version. Quite often the Saturn had more because it was about zooming through perspective textures, so you'd have textures appear magnetized to the screen, which was more distracting than the jiggling effect that was more common on PSX.

An associate who worked on the original THPS and MDK explained it to me in a very simple way which I've almost completely forgotten, but as I understand it it had to do with how the processor dealt with math, and made it tough for the 2D MDK main character to not fall through the floor. But I've completely forgotten! and the answer is swimming around my old gdmag email. I've got an archive of it but not sure where. dang it!

@“exodus”#p40906 I really enjoy reading or listening to explanations about these charming/frustrating programming minutiae—the best part is that I retain almost exactly none of it, so I get to re-experience this perverse joy anew each time!

@“kory”#p40907 i could take a crack at it if you think you'd be interested.

a triangle is three points in 3d space. it's also three points on the screen.

to go from 3 × 3d points to 3 × 2d screen points is called projection.

associated with each point of a triangle are additional 2d points called texture coordinates, or, more confusingly and more commonly, UVs.

you could also associate with each point of the triangle a color, vertex color it's called, and it's easier to explain at first.

take this triangle with vertex color:

[upl-image-preview url=//]

the colors for each point are red for the top one, green for the left one, and blue for the right one. the color of all the other points inside the triangle are interpolated.

interpolation is when you take two values and a percentage, and you find an inbetween value. say you want a number 65% between 3 and 11. you do 3+0.65(11-3), that is the lowest of the range (3) + the size of the range (highest of the range - lowest, (11-3)) multiplied (sometimes called scaled) by 65% expressed as a decimal number (0.65).

considering one edge of a triangle, the interpolated color along that edge will be calculated in the same way, with the extreme values being the colors of the two points from the triangle that make the edge and the percentage being how far along the edge you are.

texture coordinates work the same as vertex colors, but instead of a red, green, blue color, it's an x, y that maps to a pixel coordinate in an image file.

NOW imagine if, because of hardware limitations, you had to calculate interpolated texture coordinates with to a whole number. in the example above, 65% between 3 and 11 is 8.2, but for you the .2 gets truncated, so it's 8.

that's kind of the problem at the root of the warping. each screen coordinate in a triangle maps to a certain inbetweeness percent. if you've got part of a triangle that maps to a lot of screen coordinates, like if you're kind of looking on edge, these inbetween percentage values will get very fine, and if they get too fine for the hardware they'll seem to snap over time between texture coordinates.

@“pasquinelli”#p40931 thank you! That explanation makes a lot of sense, I hadn’t considered that imprecision in texture interpolation would account for it. This also nicely explains how it behaves in motion, with textures “snapping” to the next nearest approximation as your perspective shifts. I promise that, if I don’t fully retain this information, I will enjoy rereading it at a future date :slight_smile:

@“pasquinelli”#p40931 Thanks for this, great explanation of something I'd always wondered about!

Great explanation of some techniques devs used (mostly in vain) to try and minimize that lovely PSX jank. Some really clever stuff here, like mixing flat and Gouraud shading on the same model and dynamic tessellation of geometry:

@“Syzygy”#p78685 vagrant story is the platonic ideal of how a PSX game should look, at least to me…like a perfect little pixelated origami diorama

@“Syzygy”#p78685 Perfect game. No, I haven't forgotten the box puzzles.

When I think of warped textures in a PSX game, I always think of the train leaving Timber Station in FFVIII. I remember vividly when I was a kid really noticing the screwed up polygons for the first time and urging them to right themselves. Look at all those angles!!!

I am more surprised that he talked about Tekken 3 rather than Tobal 2, which was (despite its eventual commercial failure) notoriously used by Kutaragi as the poster child of hardware performance and the first great test case for Sony’s Performance Analyzer tool (the second one being the first Gran Turismo, released at the end of 1997).

[upl-image-preview url=]