10 ms·
Building a PS1 style retro 3D renderer
- wodenokoto 5y agoAny modern indiegames that go for the PS1 look? Tons of indie games pay homage to the 8-bit era, but I don't recall much nostalgia for warped textures.
- burlesona 5y agoI think 8-bit/16-bit retro games were kind of at the apex of 2D sprite game design, and many of them were quite lovely, hence the nostalgia. The PS1 3D games look worse when you look back at them, because they were not really the next logical increment of 2D gaming, but the first step into 3D. So more like the Pong, Asteroids, etc of the 3D era. They were exciting at the time as a glimpse of where things were going, but objectively they looked pretty bad.
- matheusmoreira 5y agoI agree. Retro 2D games are amazing. The SNK games are works of art. Modern 2D games don't quite feel the same. I don't even understand why.
- adamrezich 5y agothere's been a bit of a surge of low-poly fake-PS1-wobbly-vertices horror games lately
- cosmobot 5y agoValheim is an indie game with a PS1-style aesthetic built using Unity. https://www.valheimgame.com/home/#anchor4 https://www.valheimgame.com/home/#anchor4
- mywittyname 5y agoKinda. I know that's what the developers claim, but the game looks so much better than a PS1 game. The only PS1 aesthetic the game can honestly claim to have is low-res textures. It doesn't have the weird texture warping, shallow draw distances, rigid animations, or really anything else that we associate with the PS1.
- Narishma 5y agoI don't see it. Those screenshots look beyond what even a PS2 can do.
- Grazester 5y agoAmongst retro gamers there is universal agreement that 5th generation console games(specifically 3d games) aged the worse.
- daxelrod 5y agoBallisticNG has tried really hard to get the look and feel of the PSX Wiepout games, including an optional PSX shader that adds vertex wobble. https://neognosis.games/ballisticng/ https://neognosis.games/ballisticng/
- mikewhy 5y agoThe Haunted PS1 Demo Disks are a great place to start: https://hauntedps1.itch.io/ https://hauntedps1.itch.io/
- corysama 5y agoDevil Daggers is one of the few games I have time for. Mostly because I rarely survive more than 3 minutes and a world record run is on the order of 10 minutes. But, Steam says I have over 20 hours in the game. Video Review: https://www.youtube.com/watch?v=-jaTKi-1rz4 https://www.youtube.com/watch?v=-jaTKi-1rz4
- some-guy 5y agoIt doesn’t have the warped textures but DUSK is probably the closest thing to a PS1 style indie game I’ve seen.
- AnIdiotOnTheNet 5y agoDUSK is evocative of 90s PC FPS games, not PS1 games. There is a rather decently sized community of indies who use the PS1 style, mostly on itch.io.
- e_proxus 5y agoThe Chameleon is another recent stealth-game that has PS1 inspired aesthetics: https://www.merlinogames.com/the-chameleon https://www.merlinogames.com/the-chameleon
- WatchDog 5y agoIf you like this sort of thing, you might like this remake of the "Death Stranding" trailer, in a PS1 style[0]. I'm not sure what tools were used to achieve the look, but the outcome is great. [0]: https://www.youtube.com/watch?v=iTgJHU3MB24 https://www.youtube.com/watch?v=iTgJHU3MB24
- prvc 5y agoYes, but: why have these characteristics, especially the perspective-incorrect textures (which look terrible, and do not provide an efficiency advantage in the context of a "fantasy console")? Why not just write for the PS1 instead (if you must have these traits)?
- pcwalton 5y agoBecause it's fun.
- ant6n 5y agoDeveloping against this seems much easier than making an actual ps1 game, if you want to get that retro look.
- cheeseomlit 5y agoThere are plenty of people who find those characteristics aesthetically pleasing, I enjoy the affine texture mapping effect and vertex jitter when they're used effectively- depends on the game. For example in Silent hill these sort of effects enhance the eerie atmosphere, giving it a more warped and dream-like feel. As for developing directly for the PS1 there are many practical reasons not to, like ease of development and actually being able to release/sell your game on modern storefronts
- lloeki 5y agoIn Ridge Racer the texture warping and geometry raster gave some heightened sense of raw speed. Later versions on subsequent platforms (or emulated ones that correct this technical fault) felt way too smooth and much less intense. e.g around 1:47, the tunnel walls go zigzag in a very obvious way but the effect is present in most textures, only more subtle https://youtu.be/WLJqWtnFkdY https://youtu.be/WLJqWtnFkdY
- adamrezich 5y agosomeone should make a racing game where the vertices get more "unstable" the faster you go...
- lostgame 5y agoI actually sought out techniques to do very similar in Unity for a Saturn/PS1 inspired 3D platformer I’m developing. It’s such a cool aesthetic, I’m surprised it hasn’t ‘caught on’ yet as a modern design fad.
- dave84 5y agoIt has definitely caught on with the indies. Specifically the Haunted PS1 genre.
- moth-fuzz 5y agoThis 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.
- bennysomething 5y agoRetro gamer (UK magazine) did a great piece on indie Devs going for this look. Think this vice article says something similar: https://www.vice.com/en/article/3an385/were-in-the-beginning-of-a-ps1-aesthetics-renaissance https://www.vice.com/en/article/3an385/were-in-the-beginning...
- kingcharles 5y agoThis was great, and took me back to the late 80s/early 90s when I was studying Michael Abrash and building software renderers before the first hardware 3D accelerators appeared on the market. While I eventually figured out that the reason my textures looked fucked up, especially in long corridors, was because they didn't take into account perspective and thus needed an extra set of per-row and per-pixel interpolations (which killed the frame rate), I actually never realized until this article that my Gouraud shading was actually suffering from the same issue because it was so much less noticeable to the eye.
- ggambetta 5y agoInterestingly, even the depth buffer is wrong if you interpolate Z linearly, but it's such a subtle effect, it's almost imperceptible. IIRC games back then also used to do perspective-correct interpolation every 8 or 16 pixels, and linearly in between, which is a good compromise (you always have to interpolate U and V, what they wanted to avoid was the division, which is more expensive). I've written about this here, https://gabrielgambetta.com/computer-graphics-from-scratch/12-hidden-surface-removal.html#why-1z-instead-of-z https://gabrielgambetta.com/computer-graphics-from-scratch/1..., including some detailed examples of how the math works. Very fun topic :)
- kingcharles 5y agoGod, your statement about the zbuffer is true too, and as you say it was too imperceptible to notice - though if I'd looked carefully there would surely have been some strange effects where polygons intersected. I didn't even think about the zbuffer and the shading when I wrote my engine - I was too preoccupied by the weirdness of the textures.
- kingcharles 5y agoAlso, please can you mail a copy of your book back to 1988 for me. Thanks.
- pkdpic 5y agoI just want to say this is a beautiful and inspiring project so far. Im looking forward to seeing how it evolves.
- atum47 5y agoback when I was a 3D artist this was my favorite things to model - low poly things. I loved being as efficient as I can with my polygons. I'll make sure to follow the development. Great job so far.
- agumonkey 5y agoI wonder if people try to retrofit post ps2 ideas onto ps1 hardware. Or new techniques on older hardware when the knowledge wasn't there or spread.
- xgkickt 5y agoThe most obvious one I can think of is triangle strips and MIPmaps. The 60fps demo that came with Ridge Racer Type 4 had MIPmaps. I made an internal "cel-shading" tech demo back in 1998, tracking the polygon edges and then using line primitives to outline the objects but there was no game to apply it to. There were bump/normal mapping demos around then too, where a palette entry was assigned to a vector (so 256 vectors max), lit, and the texture applied additively (or subtractively). On a personal project attempting a mesh shader like approach (although you can say it's really a PS2 VU1 workflow) to transform and sort a cluster on scratchpad, then triple buffer the output in memory, ready to be kicked off to the GPU in slice mode. It might end up slower than the old brute-force OTZ approach but it's fun to figure this stuff out.
- Narishma 5y agoOne missing effect is dithering. Unless my memory fails me, it was quite prevalent on the PS1.
- wk_end 5y agoIndeed - it was built-in hardware functionality that developers (or GameShark users!) could enable/disable on a case-by-case basis https://www.chrismcovell.com/psxdither.html https://www.chrismcovell.com/psxdither.html
- dietrichepp 5y agoLove these "tiny" 128x128 textures when meanwhile, anyone doing development for the contemporaneous Nintendo 64 gets something like 44x44@16bpp color, or 64x64@8bpp grayscale. The maximum texture size is 4 KB with some major caveats (e.g. it drops to 2 KB if you use indexed color). The N64 is, in a lot of ways, on paper, a more powerful system than the PS1. Better CPU, depth buffer / Z test, perspective-correct texturing, antialiasing, subpixel precision, etc. And yet the PS1 completely dominated the N64 in the marketplace and in terms of longetivity--a big part of that how cheap it is to manufacture CDs. And so people lovingly remember PS1-style graphics, but there isn't as much of a resurgence of N64-style graphics. Another cute thing to note about PS1 is how it renders dark clouds on-screen. You might be familiar with the "add" blend mode for things like lens flares. Well, the PS1 also had a subtract blend mode, which has some unusual effects... basically, anything partially obscured by a dark cloud gets darker but also more colorful.
- yumaikas 5y agoIt's funny how the particular constraints of a system can matter in different ways the designers didn't have a solid handle on at first.
- thesuitonym 5y agoAt the time, I hated how ugly PS1 games looked, and wished they were nice and smooth like N64. now I realize that N64 textures weren't smooth, they were blurry.
- Grazester 5y agoThe textures were blurry along with the images itself due to its poor digital to analog converter. The latter can be addressed with HDMI mod boards now available for the N64.
- salamandersauce 5y agoSquare Enix still has new copies of the PS1 version of Final Fantasy 9 on their web store. They used to have more PS1 FF titles but I guess they finally stopped printing them sometime in the last couple years. I doubt Nintendo made an N64 cart post 2003. CDs are just so dirt cheap to print that it made sense to keep printing big seller 20 years on. PS1 rendering also has a bit more charm than N64 with its affine texture warping. N64 was just blurry.
- TrackerFF 5y agoMe and a friend were talking about this some time ago. He brought up an interesting point: One thing that made for example Silent Hill extra scary, was the janky PS1 graphics.
- stevebmark 5y agoAs an aside, one thing that's interesting and sad to me about WebGL is that WebGL + modern browsers are significantly more powerful than the PS1 and Nintendo 64, but we haven't had _anything_ even _remotely_ close to the completeness of an N64 nor PS1 game. Lots of small experiments and impressive demoscenes, but nothing in WebGL that takes advantage of this potential power. Frankly even compared to the completeness of Flash games, there are very few WebGL projects that even come close to that. This article and output would make a great WebGL project, and they could embed real demos of it running right in the site. What's missing that prevents us from building these types of complete projects in WebGL?
- Shared404 5y agoNothing but lack of desire afaik. Iirc, Godot and Unity can both target WebGL.
- kderbyma 5y agoI have been reading a bit up on it for a side project and it's great, but resources for troubleshooting are slim and it's not compatible easily with modern frameworks so people tend to use particular Libraries for everything and finding vanilla webgl is a bit trickier.
- mywittyname 5y agoThere have been lots of complete games built targeting the web browser. Crosscode is pure HTML5 according to the devs. No webgl at all. Games like Quake have been ported to run in the browsers (and did so ~10 years ago). I'm sure there are a lot more complete games out there targeting web browsers, but it isn't immediately apparent that's what they are using. A lot of the newer games I play feel like they are running in a web browser.
- feiss 5y agoA webgl game is hard to monetize, specially if you compare it with other options.
- modeless 5y agoMonetization is the answer. Nobody is paying $50 for web games, there's no in-app purchase system, no web gift cards in stores, and the exploitative interstitial ad networks that enable free mobile games to make boatloads of money don't exist on the web. That said, there is an ecosystem of web games and you might be surprised by the sophistication of some of them. https://venge.io/ https://venge.io/ is a good example, try https://poki.com/ https://poki.com/ for a sampling of more. https://playcanvas.com/ https://playcanvas.com/ is the most advanced WebGL-specific engine.
- staindk 5y agoCool - reminded me of this guy's project [1]. I had to mission about to find the channel again because I forgot the name, but his videos are (were? hmm it's been a while) really cool. [1] https://www.youtube.com/watch?v=IPzl9FmKVjI https://www.youtube.com/watch?v=IPzl9FmKVjI
- tsukurimashou 5y ago>fantasy console-based inspired by PS1 era technology Oh yes I've been waiting for this!
- Nition 5y agoThere was a feeling when playing the PS1 like everything was being pushed to the limit, only just under control. Textures swimming and popping and little gaps appearing in the world as you explored it. Much like saturation on an audio track, that appearance of being close to the edge or even a little beyond it added somehow to the excitement. A force too powerful for the medium to contain.
- malkia 5y agoI worked on the MGS port to PC (from PS1), and I did little restoration trick to remove the "jittering" - I would save into a huge table of float `float gte_results[65536]` - any calculation from the GTE (our emulation) there. For example if after some translation the x was 123.43 - I know that it'll use only 123, but I would save gte_results[123] = 123.43 - and later when the triangle is drawn (with integer coordiantes, I'll lookup back as gte_results[123]). So ... it worked kind of :) - https://youtu.be/Fpep7oOGNfU?t=1442 https://youtu.be/Fpep7oOGNfU?t=1442
- edflsafoiewq 5y agoThis is basically how PGXP works too.
- malkia 5y agoreally - wow! - cool :) - Need to check it out! Thanks!!!