PS1 games weren't lit by the GPU at all. Here's how they actually did lighting.
>
>
Been rebuilding PS1 rendering in Unity 6 / URP from psx-spx (the hardware documentation) instead of from other people's shaders. Found a bunch of stuff that everyone, me included, had been doing wrong. Sharing in case it saves someone time.
1. The vertex wobble isn't fixed-point math
Everyone says the jitter comes from the PS1 lacking floating point. It doesn't. The GTE computed screen position with 16 fractional bits and then discarded them:
SX2 = MAC0 / 0x10000
What's left is a signed 11-bit integer. The GPU's vertex word has no fractional bits at all, just bits 0-10 for X and 16-26 for Y.
So the snap has to happen after the perspective divide, in screen space. Plenty of shaders quantise object or world position instead, which gives you wobble that doesn't change with distance. Real PS1 wobble gets worse as triangles get smaller on screen.
2. The dither is far too strong in most implementations
The actual hardware matrix:
-4 +0 -3 +1
+2 -2 +3 -1
-3 +1 -4 +0
+3 -1 +2 -2
That's ±4 out of 256. Half of one 5-bit step. Most packages ship a Bayer 4x4 that's 5 to 10 times too strong.
It isn't Bayer either. Rows 3 and 4 are rows 1 and 2 shifted two pixels sideways.
It also only applied to gouraud-shaded or texture-modulated polygons. Sprites and flat-shaded polys were never dithered, because there was no 8-bit intermediate to dither in the first place.
3. Texture modulation's neutral value is 128, not 255
final = (texel * vertexColour) / 128
0x808080 is neutral, which means vertex colour could brighten a surface up to 2x, not just darken it. PS1 games leaned on that overbright half constantly for highlights and light flares. Use 1.0 as neutral and you throw the whole range away.
4. Fog was a GTE feature, not a GPU feature
The fog factor fell out of the perspective divide for free:
IR0 = (H * 0x20000 / SZ3) * DQA + DQB
which makes it linear in 1/z, not z. Noticeably different falloff from Unity's fog at mid range. It was also folded into the vertex colour before modulation, so it interacts with textures differently than modern post-texture fog does.
One bonus that surprised me: texel value 0000h was fully transparent, so PS1 textures could not contain pure black. Artists used very dark red or blue instead.
All of this went into a URP package I've been working on called True PSX Effects, along with a vertex colour painter and a light-to-vertex-colour baker, since baking light into vertex colours is how PS1 games were actually lit.
Everything above is from psx-spx.consoledev.net if you want to check my work.
Been rebuilding PS1 rendering in Unity 6 / URP from psx-spx (the hardware documentation) instead of from other people's shaders. Found a bunch of stuff that everyone, me included, had been doing wrong. Sharing in case it saves someone time.
1. The vertex wobble isn't fixed-point math
Everyone says the jitter comes from the PS1 lacking floating point. It doesn't. The GTE computed screen position with 16 fractional bits and then discarded them:
SX2 = MAC0 / 0x10000
What's left is a signed 11-bit integer. The GPU's vertex word has no fractional bits at all, just bits 0-10 for X and 16-26 for Y.
So the snap has to happen after the perspective divide, in screen space. Plenty of shaders quantise object or world position instead, which gives you wobble that doesn't change with distance. Real PS1 wobble gets worse as triangles get smaller on screen.
2. The dither is far too strong in most implementations
The actual hardware matrix:
-4 +0 -3 +1
+2 -2 +3 -1
-3 +1 -4 +0
+3 -1 +2 -2
That's ±4 out of 256. Half of one 5-bit step. Most packages ship a Bayer 4x4 that's 5 to 10 times too strong.
It isn't Bayer either. Rows 3 and 4 are rows 1 and 2 shifted two pixels sideways.
It also only applied to gouraud-shaded or texture-modulated polygons. Sprites and flat-shaded polys were never dithered, because there was no 8-bit intermediate to dither in the first place.
3. Texture modulation's neutral value is 128, not 255
final = (texel * vertexColour) / 128
0x808080 is neutral, which means vertex colour could brighten a surface up to 2x, not just darken it. PS1 games leaned on that overbright half constantly for highlights and light flares. Use 1.0 as neutral and you throw the whole range away.
4. Fog was a GTE feature, not a GPU feature
The fog factor fell out of the perspective divide for free:
IR0 = (H * 0x20000 / SZ3) * DQA + DQB
which makes it linear in 1/z, not z. Noticeably different falloff from Unity's fog at mid range. It was also folded into the vertex colour before modulation, so it interacts with textures differently than modern post-texture fog does.
One bonus that surprised me: texel value 0000h was fully transparent, so PS1 textures could not contain pure black. Artists used very dark red or blue instead.
All of this went into a URP package I've been working on called True PSX Effects, along with a vertex colour painter and a light-to-vertex-colour baker, since baking light into vertex colours is how PS1 games were actually lit.
Everything above is from psx-spx.consoledev.net if you want to check my work.
demo link: https://store.steampowered.com/app/4677430/DRT_Motocross_Championship/
what do you think?
Announcer works with unity event system and has a cooldown and delay.
Game name: DüRT: Motocross Championship (Steam Link)
Note: Demo is available.
here is 15 seconds footage of my ps1 style motocross game (arcade)
demo link: https://store.steampowered.com/app/4876240/DRT_Motocross_Championship_Demo/
Here is a 15 seconds footage of my ps1 style motocross game.
Demo link: https://store.steampowered.com/app/4876240/DRT_Motocross_Championship_Demo/
I posted my game here recently, DüRT: Motocross Championship, and the response to the supercross side pushed me to keep building it out. So I put together a short teaser for the supercross map and its mechanics. This is where it is at right now.
One thing I want to call out: the bike does not ride the same in supercross as it does in normal outdoor motocross. In SX mode it runs at different speeds and the turn response is tuned differently, tighter and more deliberate, so the rhythm sections and tight indoor corners actually feel like supercross instead of just a smaller outdoor track. Outdoor racing keeps the faster, more open handling. They are meant to feel like two different disciplines, the way the real thing does.
It is still very much a work in progress. I am going to keep adding jumps to the empty stretches, and the sides will get proper stadium props, hay bales, stands, banners, that kind of thing.
Since this is an arcade game, it is never going to be one hundred percent real supercross physics, and that is not the goal. The goal is for it to feel fun to ride while still reading like supercross.
What I would love your feedback on:
Does the SX handling idea sound right to you, or would you expect it to feel different from outdoor in other ways too? Do the map layout and rhythm read like real supercross so far? And anything you would want to see me add to make it feel more like a stadium round.
Every bit of feedback here actually goes into the game, so let me have it.
Demo (free): https://store.steampowered.com/app/4876240/DRT_Motocross_Championship_Demo/
I posted my game here yesterday, DüRT: Motocross Championship, and a lot of you had ideas on the tracks, so I wanted to show where the supercross side is at now.
I laid this section out using a reference image of common jump and obstacle types (here is the one I used: https://imgur.com/a/Oo3INhh), then built it out and rode it to see how it flows. This clip is that first ride. The parts where the jumps are already in are labeled in the video.
It is still very much a work in progress, so here is where it is headed:
Seven riders will be on the track at the same time racing for position. There will be a crowd that keeps reacting through the whole race, and I am even thinking about adding a commentator over the top. I am going to keep filling the empty stretches with more jumps to tighten up the rhythm. And the sides will get proper props coming in, hay bales, stands, banners, that kind of thing to make it feel like a real stadium night.
One thing to keep in mind: this is an arcade game, so it is never going to be one hundred percent real supercross physics. That is not the goal. The goal is for it to feel fun to ride.
What I would really like your feedback on:
Does it look fun to you, even as an arcade take on supercross? Do the jump shapes and spacing read like a real rhythm section, or does anything look off? Any obstacle types or combos you would want to see me add in the gaps? And anything that would make it feel more like an actual stadium round.
Every bit of feedback from here actually goes into the game, so fire away.
Demo (free): https://store.steampowered.com/app/4876240/DRT_Motocross_Championship_Demo/
Hey r/Supercross,
I posted my game here a while back, DüRT: Motocross Championship, a solo-dev arcade bike game with a late 90s PS1 look. I just started building its first Supercross track, and this clip is an early piece of it: the bike running a section of small consecutive bumps.
It's very much work in progress, so I wanted your eyes on it before I build the rest around it. A few things I'm unsure about:
Any ideas, references, or straight up roasting welcome. I would rather fix it now than after the whole track is done.
Free demo if you want to feel the handling (the current track is motocross, the SX one is what I'm building next):
https://store.steampowered.com/app/4876240/DRT_Motocross_Championship_Demo/
Thanks, I read every comment.
Solo dev here. I grew up on supercross and old PS1 racers, so I have been building a game that mixes both: tight tracks, AI riders that actually fight you for position, tricks in the air, and a PS1 visual style.
The free demo is live now. It has racing against AI, a points/score system for overtakes and tricks, and local play. I am adding more tracks and split-screen multiplayer next.
DüRT: Motocross Championship | Steam Page
please leave a review for feedbacks! thanks.
Would love feedback from people who actually follow the sport. What would make the racing feel more authentic to you?
I am one person making a PS1-style motocross/dirtbike game called DüRT. No big studio, just me and a lot of mud physics.
The bike carries momentum on the throttle, slides in long corners, and you can throw whips and tricks off the jumps. It is meant to feel fun and fast, not like a stiff sim.
Free demo on Steam here:
DüRT: Motocross Championship | Steam Page
Please leave a review for supporting the project!
Tell me what you think. Riders always notice things I miss.
Available for Apple Silicon, Windows and Linux
I grew up around dirt bikes and on the old late-90s/early-2000s motocross games, and I always felt modern racing games lost the feel. So I've been building my own, solo, in my spare time.
The whole thing is built around riding feel instead of graphics: you steer with the throttle, the rear steps out when you gas it into a corner, you can back it in on the brakes, and you set up whips/scrubs off the jumps with mid-air control. Bad landing and you're picking yourself up out of the dirt. It's got an intentionally retro PS1 look because that's the era that got me into it.
Trailer's attached. I'm posting here specifically because you all actually ride — I'd rather hear "the body position is wrong" or "nobody backs it in like that" from real riders than polite feedback from gamers. Be brutal, it helps.
No studio, no budget, just me. If it looks like your kind of thing there's a free demo and a Steam page below, but mostly I just want to know if the feel reads right to people who do this for real.
🎮 Free demo (itch.io): https://sourpickle35.itch.io/durt-motocross-championshp
🟢 Steam (wishlist if you're into it): https://store.steampowered.com/app/4677430/Old_School_Motocross_Championship/
Cheers, and thanks for any feedback.
Most of the wishlists are coming from this subreddit I can't write down how happy I am 500 is a very big number for me. Thank you all I hope I am making a good stuff for everyone.
And also early access demo is available on itchio
Itch.io: DüRT: Motocross Championship
Steam: DüRT: Motocross Championship
Please provide feedback and know that its still in development.
i liked the first one but..
i liked the first one