5 ms·
This is an excellent article, a good insight into the particularities of the hardware. I particularly admire the explanation of why the polygons snap to the pix
by moth-fuzz 5y ago
This is an excellent article, a good insight into the particularities of the hardware. I particularly admire the explanation of why the polygons snap to the pixel, and why that's not the fault of floating-point mathematics but rather the rasterizer itself. One thing the article approaches, but doesn't really quite get to the bottom however, and which is the crux of all the ps1's 'flaws' is that its GPU was 2-dimensional fundamentally. That's why things snap to pixels, that's why the textures do not have a depth component and are thus not perspective-correct, that's why there is no z-buffer, because it had no z-coordinate. Essentially, every single PS1 game 'faked' 3D by using the GTE (which was separate from the GPU) to project 3D points and polygons into a 2D rasterizer. And it worked quite well! For the time.
Another thought - I also wrote a similar renderer under similar constraints a while back, just for funsies, and I'm wondering what would have came if I thought "I should write an article about this". I generally don't think to write articles over every side project I do, what's the impulse for when someone decides to detail their work to the internet?
- munificent 5y ago> what's the impulse for when someone decides to detail their work to the internet? When it comes to writing, I think the biggest factor that determines if/what/and how you write is the audience you imagine. When you write, you sort of picture yourself telling the story to someone. And the way that scene plays out in your mind depends entirely on who that person is. If your mental image of the audience is "some random Internet user whose interests are different from mine", then you can't imagine them standing there patiently while you laboriously walk through all the details of your renderer. So you don't. But if you imagine an audience that is "another retro renderer enthusiast who has similar projects", then you can imagine them getting hyped up by what you're saying and gleaning bits of useful stuff from it that they can apply to their own side projects. It almost feels wrong to not write it and let them down.
- deleted 5y ago[deleted]
- akdas 5y agoAdding to this, if you imagine the audience is _you_, then you might feel motivated to write the article you _wished_ you had before embarking on your project. That audience falls under your second one ("another retro renderer enthusiast who has similar projects"), but maybe is even more targeted. One advantage of this is being able to look back on previous projects in the future, as a form of documentation. That helps me pick up on a project I haven't worked on in a bit. True, you don't need to publish the documentation publicly, but since I wrote it, putting it up publicly is almost no effort now that I have a blog.
- vondro 5y agoI'd add there is a third category, "curious technology enthusiasts", that just like to read well-written article on some new topic. I personally am not "retro renderer enthusiast" nor have similar project, but this article was joy to read.
- munificent 5y agoThat's a good audience too. You'll note that choosing this one significantly changes how you'd write: You would naturally find yourself including a lot more context and background information because you don't assume the reader has it already. Either audience choice is fine, I just think it's interesting how it impacts the resulting writing.
- xgkickt 5y agoThe GTE truncated too early, and in too many places and there is a register for adding a fraction to the post-perspective-pre-truncate result to round instead. I didn't implement this back in the day, but thought about scaling the target dimensions in the GTE (watching for overflow) to get 1 bit of fraction back to refine the screen coordinate.
- flipacholas 5y ago> Essentially, every single PS1 game 'faked' 3D by using the GTE (which was separate from the GPU) to project 3D points and polygons into a 2D rasterizer. While it's true that the PS1 handles perspective projection through the GTE (as the GPU is a primitive rasterizer, after all) I don't think it's fair to call it 'faked 3D' since, in my understanding, 3D projection is another fundamental stage in the graphics pipeline (our displays are 2D grids of pixels, so we need to transform the 3D world into something it can be displayed there). Other consoles like the Nintendo 64 provided more capability on the GPU side (the RCP) which allowed to move part of the matrix operations away from the CPU chip. Be as it may, I've seen the 'fake 3D' claim before and I'm starting to wonder if I'm missing something in my understanding of this technology, maybe someone can offer a third opinion? P.S I'm the one that wrote https://www.copetti.org/writings/consoles/playstation https://www.copetti.org/writings/consoles/playstation which is referenced at the bottom of the article (the 'Other reading'), I'm glad the author found it helpful (or interesting)!
- yumaikas 5y agoI could see an argument being made for 'fake 3D' pretty strongly here. DF Retro has a few videos comparing various consoles, and one of the things that the PS1 and Saturn both got wrong, IIRC, was that textures would warp*, because the 3D look was being provided by affine transforms (as I understand, I may be misremembering the details), rather than perspective correct rasterization. So, like, the vertexes are in the right spots, but the texture mapping is off. So it kinda depends on if you need texture mapping to be perspective correct to consider a given example of 3D "real" vs "fake". Dark Forces also has perspective warping that happens in it's engine when you look up/down, as an example. * https://youtu.be/VutzIK3DqZE?t=341 https://youtu.be/VutzIK3DqZE?t=341 DF Retro analyzes ports of Tomb Raider
- codeflo 5y agoExactly, straight lines on a texture should obey perspective (think rows of bricks on a wall). I think this wasn't as widely understood back then, but notably, id software already got it right a few years earlier in the original Wolfenstein. Great link. The artifacts are especially apparent when the walls are near the camera, for example at this timestamp: https://www.youtube.com/watch?v=VutzIK3DqZE&t=398s https://www.youtube.com/watch?v=VutzIK3DqZE&t=398s And note that here, the seemingly flat walls are already heavily subdivided into smaller polygons to lessen the impact of the problem. (Why they wouldn't then make use of those additional polygons to include more geometry details for free is beyond me, however.)
- jayd16 5y ago>that's why there is no z-buffer, because it had no z-coordinate Z-buffer is just an array of values you can sample, often as a texture. There is no inherit coordinates, unlike, say, vertices. Z-buffer is a 2d map anyway. The offset into that buffer would be the x and y. Or do you just mean there's no hardware accelerated z-buffer?
- codeflo 5y agoIn early 3D hardware, the Z buffer was a bit more special cased than it is now, where you quite literally allocate a texture. In either case, the interesting (and expensive to emulate in software) part is of course using the depth buffer to perform depth testing, that is, rejecting pixels that would be hidden.
- jayd16 5y agoSure, the depth was not calculated or tested in hardware. But its not because buffers did not have a z-coordinate.
- mywittyname 5y ago> what's the impulse for when someone decides to detail their work to the internet? The company I work for considers this kind of writing to be fundamental to being a considered a principal engineer. I can't imagine they invented this idea; it's probably relatively common in the startup world. While this might not have been the author's motivation, having a popular tech blog certainly doesn't hurt one's employment prospects.