[RELEASED] Flashback '94 Shader Pack - Make your 3D games look old!

FLASHBACK '94 SHADER PACK

ASSET STORE | WEBGL DEMO | INSTRUCTIONS

Current version: 2.1.0 (6 September 2016)
Requires Unity 5.1.0 or later


Hi everyone! I’m George K-K and this is Flashback '94, my retro 3D shader pack for Unity. The first version of this package had actually been available for a while, but I stupidly neglected to promote it on this forum. Now that I’ve released a major update, I thought now would be a good time to correct my mistake.

Flashback '94 is a collection of shaders and scripts to help you mimic the limitations of 3D graphics hardware from the 1990s. That means things like:

  • Affine texture mapping (textures with no perspective correction)
  • Limited vertex precision (that ‘snapping’ motion that 3D models used to have)
  • Low resolution and color depth

In this package you’ll find object shaders for your 3D models, additive and multiplicative projector shaders for stuff like flashlights and drop shadows, and an image effect for your camera that will let you set the resolution and color depth you’d like your game to run with.

These shaders are supported on Windows, Mac, Linux, Android, iOS and WebGL, but sadly not on consoles, as Unity doesn’t have a vertex-lit rendering path for them. All the other limitations of vertex lighting in Unity apply: objects will only receive lighting from the 8 brightest lights nearby (the engine decides which 8 they’ll be), and lightmapped objects will lose their specular highlights, because the engine doesn’t pass light positions to shaders in that mode.

To give you a sense of what these shaders can do, you can check out the WebGL demo linked above, or just take a look at the gifs below, captured in the Unity editor using a few late-90s game models (for illustrative purposes only, of course).

I’ve published detailed instructions and best practices on my website, but if you have any questions that aren’t answered there, feel free to post them below!

On a personal note, I completely understand that the ‘retro 3D’ aesthetic is marmite. Everyone has strong feelings about it, and if you find it offputting, I promise you’re not alone. But please don’t mistake a simple fondness of wonky old hardware for a lack of creativity, or worse, a rejection of progress. In my experience, no creative technology ever fully replaces another, it’s just another tool in the toolbox. It’s fine to dislike it, but please do be cool about it. <3

Thanks so much, everyone! Now GET BACK TO WORK.


CHANGELOG:

2.1.0

  • Vertex precision now remains constant regardless of distance
  • Added an unlit UI overlay shader that ignores depth and fog

2.0.0

  • Object shaders rewritten from the ground up
  • Support for baked lightmaps in RGBM or dLDR format
  • Support for up to 8 realtime lights on dynamic objects
  • Projector shaders for spotlights and blob shadows
  • Image effect preview in the Unity editor
  • Lots of bugfixes

1.1.0

  • Project updated for Unity 5.1.0
  • Transparency blend mode changes

1.0.0

  • Initial release
1 Like

Hey everyone! I’ve just submitted a small update to the asset store. This will add a UI overlay shader that ignores lighting, depth and fog, in case you want to put any of your UI elements in world space - like the reticle in the screenshot below:

I’ve also changed the vertex snapping code so the effect will remain constant regardless of distance. You may have noticed that in the current version, once an object gets far enough away, the snapping is no longer visible because the steps are too small in screen space. This doesn’t reflect how it looked on older hardware, so I’ve fixed that. You’ll probably want to adjust your snapping values after this update as the effect is more pronounced.

I’ll post again when the update is approved! Thanks all. :slight_smile:

The 2.1.0 update was approved! Grab the latest version for more uniform vertex snapping, as well as the new UI overlay shader. As always, if you have any questions please don’t hesitate to ask them here. :smile:

Hi North,

I just discovered your little project and am planning to buy it ! Astonishing work, I have been looking for this effect for months ! I am just getting started with unity developing (I’m a visual arts student currently) and I was always attracted by the pixely, imprecise nature of ps1 era graphics. In today’s world filled with shitty minecraft clones and with “indy retro game” meaning either “pixelated platformer with sprites” or “low fidelity voxel world” it is certainly refreshing to see TRUE early 3d graphics being represented by a constantly-updated shader for unity no less.

I wrote this to show appreciation but I also have a few questions. I am a complete noob when it comes to programming (my best experience is modifying scripts in rpgmaker LOL) so I want some simple clarifications that, for a seasoned developer, should sound immediately obvious. I also want to clarify that I will be buying the shader pack no matter what you answer so don’t worry if something I’m asking isn’t possible.

Thanks ! These are the (quite a few) questions:

1)Are the shaders applied on the camera, or on the objects ? Are certain shaders for the camera, and others for the objects? The way I understand it shaders are only for objects and the image effects (resolution downsampling and color per channel limiting are post processes) - does that mean that objects who don’t have your shaders will be rendered normally and will not be subject to the shader limitations (shadow/light/etc) ?

2)Can you keep certain elements, such as other objects, or ui, out of the post processing effects ?

3)Can you adjust vertex precision amount for adjustable feeling of jerkiness ? or is it locked into the shader ? If so, can I set a different amount for each object ?

4)Can I adjust the transparency of a transparent shader? (how about real time adjust in game ? or does that require asset reload ?)

5)About the projector shaders, can I create my own “shadow shapes” in photoshop to match the shape of the object I am trying to simulate the shadow of, or am I limited to circular shadows like the ones in your demo ?

6)Approximately how negligible (or not) the performance hit is ? Your demo for example - if you removed all the shaders and post process and just had the objects and the light. I realize it’s not apples to apples since you were doing downsampling (which I assume saves resources, right ?) I guess my question is-is it efficient ?

7)Since your shader is opengl, does that mean the game has to run in opengl mode ? Or does that not matter ? Can the game run in directx when you use these shaders ? Sry, I’m very new and don’t quite understand how those apis work, but I always assumed you have to choose one to run the game.

Thanks again !

Hi there! Sorry for the delay; I’ve answered your questions below. Would you mind if I reworded them slightly and used them to create an FAQ for my announcement post? You can check out the best practices page if you need more details, and of course if you have any more questions, just post them here! Thanks. :slight_smile:

That’s awesome ! I actually did take a look at the best practices and yeah, you should create a faq because the shaders appear more limited than they really are in first glance.

There’s just a couple more things that are puzzling - in regards to the GIF example models in your original post. Are the textures already that low res or do they appear that way because of the post processing ? Understanding this is very important to me as I’m looking to create a very authentic 3d feel. Also, animations should work normally even with the shaders applied, right ?

That is all from me !

The textures on those models were pretty low-resolution to begin with, but you can always force a texture to render at a lower resolution by changing Max Size in its import settings. The important thing, though, is to set Filter Mode to “Point” so you get that crisp, pixelated look instead of a blurry mess. And animations will work just fine! The shaders won’t mess anything up for you.

I’ve been enjoying these shaders for a little while now, and have recommended them to a few friends. Gotta love the charm of wobbly vertexes and warping textures.

I’ve noticed that the transparent shaders don’t currently play nice with projected shadows. Not a big problem for models that are constantly transparent, but it does look a little odd on models that fade in and out from full opacity.

If I could pitch a couple suggestions for a future update:

  • Additive blending for objects, as was common in many of Final Fantasy 7’s cutscenes.
  • Stippled transparency for objects/blob shadow projections, similar to what was used in Virtua Racing and Virtua Fighting (though skip those geometric projection shadows, of course).

Thank you for keeping these shaders up to date!