• Hey, guest user. Hope you're enjoying NeoGAF! Have you considered registering for an account? Come join us and add your take to the daily discourse.

Why do Playstation 1 polys jitter when the camera pans?

Kind of related-yet-unrelated, but speaking of weird graphical issues, I always wondered why the graphics in the Dragon Quest games ported to DS were so wavy and warped. The screen was fully rotatable, but I don't think VII on PSX suffered from it, and that had the same rotatable screens. Was it a specific problem with the DS that made it that way? Always looked strange to me.

dq4c.jpg

Cobblesone roads, bro. They ain't gonna be perfect!
 

Widge

Member
Was there Z buffering in the PS2? I seem to remember FFX being janky on occasion and I put it down to a quirk of Square.
 

atbigelow

Member
There's more than one graphical artifact the PS1 rendered. There are two main ones:

-Texture Warping. PS1 lacked a lot of texturing ability such as perspective correction. Easily seen when looking at a "straight" line on a texture that wasn't straight. Floors are the perfect place to see this. Driving games suffer a lot from this.

-Polygon Jitter. PS1 didn't have subpixel rasterization, which means the vertices were "snapped" to the pixel grid. The Nintendo DS suffers the same problem and has the exact same artifact. Easily seen in a static scene with a mesh that is "breathing" or animating slowly. Check out the NDS remakes of FF3 and FF4 during cutscenes.

PS1 didn't have a Z-buffer, but it wasn't the primary cause of the two above artifacts. Crash Bandicoot 2 and 3 implemented software Z-buffers in special areas, but the games still suffers from the two above issues.
 

beril

Member
Kind of related-yet-unrelated, but speaking of weird graphical issues, I always wondered why the graphics in the Dragon Quest games ported to DS were so wavy and warped. The screen was fully rotatable, but I don't think VII on PSX suffered from it, and that had the same rotatable screens. Was it a specific problem with the DS that made it that way? Always looked strange to me.

dq4c.jpg

The DQVIII and DS remake artstyle was an artistic choice that really doesn't get enough credit. Pretty much every building and every wall is curved and janky to avoid the sterile look of low poly boxes with perfectly straight lines, and it's a lot more highpoly than many comparable games. As for actual technical issues, no, the DS versions run much better and look cleaner, as the DS does have perspective correct texturing and Z buffering
 
I've always heard that it wasn't the polygons "jittering", but the textures due to the lack of what has been coined "perspective correction." Is that correct?

No, it's both.

Was there Z buffering in the PS2? I seem to remember FFX being janky on occasion and I put it down to a quirk of Square.

The PS2 doesn't suffer from any of the artifacts mentioned in this thread so far.
It has trouble with correct mip-mapping though, causing texture shimmering (of course still a lot better than the unfiltered texturing of PS1 games).
 
This thread makes me feel dumb.

To put on simple terms, there is something called "rasterization" that basically converts a 3D image in 2D pixels/dots based on a point of view(camera/your monitor)

Example 1:

img.JPG


But what happens when you have,for example,one object behind another?

For the 2D perspective,they have the same (X,Y) coordinate,thus,both need to be drawn at the same pixels.But this is wrong because the object behind shouldn't be shown from that point of view.

Example 2:

3.jpg


There are algorithms to fix that.The most well-known is the Z-buffer.

Basically,Z-buffer analize the Z coordinate of each object(the object points) and store the points that are closer to the camera from the Z-perpective.This one will be drawn,the other don't.

zfail.png
 

deadhorse32

Bad Art ™
I think it was due to the lack of floating point (precision) calculation. Not due to the lack of a Z-buffer. Because the reason the vertices move about isn't due to depth, but due to lack of precision.


But I'm not PlayStation hardware guru.

Yeah no FPU so it was all fixed-point arithmetic.
 

JordanN

Banned
I'm glad the effect is gone. Trying to replay some PS1 games can be excruciating, because the jitter acts like motion sickness almost making me want to vomit. Which is a shame since some PS1 games still have nice art and gameplay, but is tarnished by the unstable polygons.

Edit: No DS apparently.
 

p0rl

Member
Calculating the perspective-correct coordinates for each texture sample was expensive as it requires you to account for the depth at every pixel, incurring a cost of 2 divisions per sample. To get around this, the perspective-correct sample coordinates were only calculated at certain intervals, between which the samples were interpolated linearly. This compromise introduces the artefacts associated with affine (linear) texture mapping, but over smaller intervals, making it more visually acceptable.
 
There's more than one graphical artifact the PS1 rendered. There are two main ones:

-Texture Warping. PS1 lacked a lot of texturing ability such as perspective correction. Easily seen when looking at a "straight" line on a texture that wasn't straight. Floors are the perfect place to see this. Driving games suffer a lot from this.

-Polygon Jitter. PS1 didn't have subpixel rasterization, which means the vertices were "snapped" to the pixel grid. The Nintendo DS suffers the same problem and has the exact same artifact. Easily seen in a static scene with a mesh that is "breathing" or animating slowly. Check out the NDS remakes of FF3 and FF4 during cutscenes.

PS1 didn't have a Z-buffer, but it wasn't the primary cause of the two above artifacts. Crash Bandicoot 2 and 3 implemented software Z-buffers in special areas, but the games still suffers from the two above issues.

100% this from what I can observe in the OP's video...

Certainly not Z-buffer related, not for Vagrant Story anyways...
 

beril

Member
I'm glad the effect is gone. Trying to replay some PS1 games can make me very unhealthy, because the constant jitter leads to motion sickness and I almost want to vomit.

Same goes for why I don't want to touch the DS again. Watching someone's face constantly warp in and out gets me queasy.

Eh the DS doesn't really have any of the same issues. It's just very low res and has unfiltered textures.
 
It's not just PS1 games that had this issue, early DOS games did too that were using software rendering. And so did Sega Saturn and 3DO games, even though both these machines rendered everything in quads.



Did Saturn have this too?

Sega Saturn Tomb Raider vs PlayStation 1 Tomb Raider: https://www.youtube.com/watch?v=NgQP7JOqgsk

It was comparable on both systems, even though both machines rendered polygons very differently from each other. Saturn seems to have a few more Z-sorting issues going on, but less sub pixel rendering issues.

Now here is the original Tomb Raider (well demo) running on an actual DOS PC in software rendering mode: https://www.youtube.com/watch?v=r70GI0MV1ws&feature=player_detailpage#t=104 There's all sorts of texture warping, jittery polygons and even screen tearing going on here.
 
The PS1 didn't have floating point calculations, only fixed point, which is unprecise and causes vertex positions to jitter.

The PS1 also couldn't do perspective correct texture mapping (it uses affine texture mapping), the edges of the polygons are perspective correct, but the textured 'scanlines' drawn between the edges to fill them don't calculate perspective per pixel. A way to improve this is to break a polygon up into smaller polygons, but the PS1 couldn't draw many of them to begin with.

(I'm off to bed now)
 
I haven't really looked at PS1 emu in a while, but was that actually fixable through emulation with the addition of Z-Buffering, or what?
 

WillyFive

Member
I'm glad the effect is gone. Trying to replay some PS1 games can be excruciating, because the jitter acts like motion sickness almost making me want to vomit. Which is a shame since some PS1 games still have nice art and gameplay, but is tarnished by the unstable polygons.

Same goes for why I don't want to touch the DS again.

But the DS doesn't have that problem.
 

mattp

Member
ITT i learned no one knows what z-buffering is

which is kind of funny because i remember magazines going into detail and making a big deal out of the n64's z-buffer, at the time
 

DMiz

Member
https://www.youtube.com/watch?v=pQMCDpomTK8

edit: lack of subpixel correction(what the above video shows) and perspective correction

Thanks for that video. I had a vague idea of what everybody in the thread was talking about - particularly with respect to the 'jitter' - but once I took a gander at that clip I knew instantly what everyone was talking about and was really surprise at how big of a difference the correction made.
 

Wasp

Member
Games certainly look and feel a lot more solid now. I think the last time I saw warping and moving textures was on Mt Chiliad in San Andreas.

Turning the camera to see through walls used to be commonplace on PS1. In fact when I was stuck in Tomb Raider I used it as a technique to see what was on the other side of a door I couldn't open.

Now it's very rare that the camera moves inside a wall, floor or the character's head.
 

Dsal

it's going to come out of you and it's going to taste so good
probably has to do with low precision when keeping the position of points in 3D space, so what would probably need to be at (22.1372942,-1.6243222) becomes something like (22.13,-1.62), so they kinda jump around in 3D space instead instead of going to an more exact spot.

It was more like 1.0 was 4096 and 0.5 was 2048 etc.

I remember one time I used the floating point library for only one debug thing, showing FPS. Suddenly my frame rate was brutalized. Turned out it was the one floating point divide I did for the FPS. Awww yeahhh the good ol days.
 

razu

Member
It's lack of precision, and lack of perspective correct texturing. You had to subdivide triangles that were going to be clipped to help the problem, but it only helped.

Z-buffers give you per-pixel depth test, so that two intersecting triangles can cut through each other on a pixel level. Without a Z-buffer the last triangle to be drawn would overlap the first one. It wouldn't make it jitter though, that's just precision.

You can get jitter on new consoles and PC if you travel far enough away from the origin. Computers, they're not very good at numbers :D
 

Clear

CliffyB's Cock Holster
FFS, it has nothing to do with a lack of Z buffering! (or tessellation, which very few, if any games used).

Funny that, all our games used tesselation, or subdivision as we called it back in the day!
 

M3d10n

Member
The lack of z-buffer and perspective correction have nothing to do with the wobbliness. As mentioned before, the wobbly polygons was caused by insufficient precision combined with all calculations being done using integers instead of floating point values.

The PSOne has a co-processor called the Graphics Transform Engine, which is meant to perform many 3D operations like matrix-vector multiplication, lighting and fog. It was fixed-point[*] (aka: integer) based and couldn't work with floating point numbers. The X, Y and Z coordinates of vectors are stored as 16-bit values: 1-bit for sign, 3-bits for integral part and 12-bits for the decimal part. It only supported 3x3 rotation matrices with translation being a separate operation using vectors with 32-bit XYZ integer components (no fractional parts).

This seems to be one reason behind the wobbliness: while drawing a scene, the objects's polygons must be transformed from their local space into world space (at the very least one rotate and one translate command) and then from world into camera space (another rotate and translate). Since translation is integer-only (no fractional), it will "snap" around, the severity depending on the scale of the the scene elements. Also, if you have multiple rotations and translations stacking on top of each other, the precision errors will build up quickly.

Finally, the GTE will output the result of perspective transform as integer pixel coordinates (no fractional), which are to be fed into the GPU for drawing. This means it cannot display any subpixel movement: the polygon will snap in place until one of it's vertices moves enough to snap into a different pixel.

The DS, for example, was also integer-based but had subpixel movement since the final 2D output coordinates had fractional parts (the DS has edge antialiasing which wouldn't work otherwise). While there was some degree of wobbliness due to fixed point math, it was much less because the matrices on the DS had 32-bit components (1-bit for sign, 19-bits for integral, 12-bits for fractional) and were 4x4, so translation and perspective transformation could be done in the same operation. Translations also had 12-bit fractional, so they accumulated less errors.

You can find a complete technical description of the workings of the PSOne here http://www.raphnet.net/electronique/psx_adaptor/Playstation.txt and for the DS here http://problemkaputt.de/gbatek.htm#ds3dvideo

By the way, the PC version of FF8 still has wobbly polygons, probably because their 3D engine had a bunch of pre-calculated fixed point data optimized for the PSOne hardware that couldn't be easily converted. FF7 PC, however, is silky smooth, which means they could get away with simply replacing the data types on the code.
 
Lack of a z-buffer (or a low precision one) can cause 'flickering' polygons that are, depth wise, close to each other. Even higher precision Z-buffers (24/32 bit) can have this problem for polygons far away from the observer
 

nkarafo

Member
Thanks. Though I still prefer the look of PSone games over the N64's. It might have had more jaggies, but it also had more detail, as opposed to the muddy and shitty-looking textures of the N64.
Though, Banjo Kazooie and Conker have better textures than every PSX game.

So, it was not the console's fault.
 
N64 and PS1 are like Atari 2600 to me. Too primitive to really be able to go back and enjoy. Of course there are some exceptions, but for the most part things like this really hit me that 3D was not ready in 1995.
 

WillyFive

Member
N64 and PS1 are like Atari 2600 to me. Too primitive to really be able to go back and enjoy. Of course there are some exceptions, but for the most part things like this really hit me that 3D was not ready in 1995.

I think low poly art like that of N64 games are really appealing, much in the same way 16 bit pixelart sprite work is. Creating worlds, characters and ideas with as little visual information possible creates really striking feelings that more detailed visuals have to work harder for, since imagination isn't filling up the gaps.
 

dark10x

Digital Foundry pixel pusher
It's too bad this can't be fixed in emulation.
That's where you're wrong!

I don't have the link handy but there is someone that has been working on this very issue with one of the PSX emulators out there. He posted a number of examples of perspective correct texture mapping recently. It doesn't seem to be available yet but there is certainly work being done to solve the issue. Really hoping it sees the light of day as it could really improve the look of those games.
 

BlueMagic

Member
I'm no technical expert by any means, but if it had no z-buffering, how does depth work in a PSX game? Sorting polygons 'manually'?
edit: no subpixel rasterization makes a lot of sense too.
 

pixlexic

Banned
I actually have a theory that the wavy non zip buffer actually made games look more detailed than they actually were since you never had a hard line anywhere.
 

imBask

Banned
Generally its the lack of Z-buffer, meaning that everything is drawn using the "painters algorithm" that stipulates you have to draw every poly from back-to-front within the scene.

What this means in practice is every view has a distinct sequential draw-order that shifts according to the perspective its viewed from. You could automate this, but the most efficient method was to store (typically 8, using an octant principle) independent sort-lists per object, plus a global scene order that is calculated algorithmically.

Key issue is that using the painters algorithm, not every shape will work from every angle causing flickering as the code does its best to do things in the right order.

Additionally the lack of perspective-correct texturing in hardware meant that you had to use tesselation in order to prevent things become a blurry mess. i.e you would subdivide one poly into multiple smaller ones and adjust the UV (texture coord) values accordingly to spread the image out correctly. This process is lossy due to precision issues and again could cause jittering as the new UV's failed to match up perfectly.

Thanks for taking the time to explain it instead of just posting "No Z-buffering."
 

jett

D-Member
It can, both a PS1 emulator graphics plugin written by some Russian guy supports it (but in general the plugin is very slow and has not been updated in years last time I checked) and PCSX-R support doing it.

That's where you're wrong!

I don't have the link handy but there is someone that has been working on this very issue with one of the PSX emulators out there. He posted a number of examples of perspective correct texture mapping recently. It doesn't seem to be available yet but there is certainly work being done to solve the issue. Really hoping it sees the light of day as it could really improve the look of those games.

Hopefully it works because it's by far the worst thing about PS1 games.
 
Top Bottom