How to achieve a late 1980s-Early 90s CGI film look?

Hi I’m planning on making a game with the Unreal Engine that has a very specific look. I want it to look like late 1980s- early 1990s CGI videos. A lot of computer games from the 1990s that used per-rendered graphics also had the same look. Here are some examples.

Myst:
https://i.ytimg.com/vi/D30r0iRH73Q/maxresdefault.jpg

https://www.scummvm.org/data/screenshots/other/myst/myst-win-de-03-full.png

https://www.mobygames.com/images/promo/l/63267-myst-screenshot.jpg

https://news-cdn.softpedia.com/images/news2/Download-Myst-for-iPhone-iPod-touch-2.jpg

Knick Knack:

http://www.pixartalk.com/wp-content/uploads/2009/06/atlantis.jpg

https://vignette.wikia.nocookie.net/disney/images/6/68/Knick_Knack_Snowglobe.jpg

Blood Omen: Legacy of Kain

https://i.ytimg.com/vi/u0Zen0E6CSA/hqdefault.jpg

https://static.giantbomb.com/uploads/original/11/117445/1679324-vlcsnap_00118.jpg

Eastern Mind:

https://obscuritory.com/wp-content/uploads/2012/01/eastern_1.png

https://www.mobygames.com/images/shots/l/892802-eastern-mind-the-lost-souls-of-tong-nou-windows-3-x-screenshot.png

https://obscuritory.com/wp-content/uploads/2016/01/milieu.png

https://obscuritory.com/wp-content/uploads/2012/01/eastern_2.png

https://img.fireden.net/v/image/1523/60/1523602049915.png

The Labyrinth of time:The Labyrinth of Time Speedrun - 12:31.095 - YouTube

Here’s what I would like the Final game graphics to look like in motion:


Edit: There’s a game engine that came out a bit more recently (2008) that was use for the game “The Void” that I think looks closer to early CGI than the Unreal Engine 3 does.

I think this is closer to the look I’m going for.

The Void:

https://i.ytimg.com/vi/YlDi_vPOQYo/maxresdefault.jpg

https://i.ytimg.com/vi/7FYqovjC5Q4/maxresdefault.jpg

https://images.gog.com/dd26fae3f42299bcb25161de42bb466a5cbdbd2ddeedb25ae8bde429d7823974_product_card_v2_mobile_slider_639.jpg

https://d1u5p3l4wpay3k.cloudfront.net/thevoid_gamepedia_en/e/ec/AvaPortrait.png

Youtube footage of the void:

Avoid area shadows, use little anti-aliasing, run at a lower resolution than what the screen is. Use low-quality models/textures/animation.

No ambient occlusion.

Ambient lighting is a solid value.

No reflections, only specular highlights.

Textures are poorly overlayed and generic. Obvious tiling.

Over reliance on subdivision modeling and smoothing, but poor control over it.

This is for the Unreal 4 Engine,right? I’m not sure what you mean by “no reflections, only specular highlights” or “ambient lighting is a solid value”. Can you point me in the right direction? Maybe some rendering/shaders specific tutorials for Unreal Engine?

Those are general rendering features or missing features in early CG. I’ll spend some time in a few hours trying to a content example scene to look similar.

Took the Infiltrator demo. Some of these steps are going to be redundant or cancel each other out, but it’s the steps I took without much planning.

Force No Precomputed Lighting

Disabled screen space reflections and ambient occlusion in the post processing. Disabled bloom.

Deleted every reflection capture.

Deleted everything related to fog/cloud/godray

Deleted decals.

Created skylight, set to moveable, disabled lower hemisphere is black. This adds the flat ambient lighting.

Set scalability settings to low.

Switch to forward rendering and disabling extra features.

Next steps would be to disable normal maps, fix some of the materials, replace materials and textures with lower resolution ones, with more tiling. Remove some of the extra lights.

All you need to do is remove the modern day graphics available for games and you would have the look

Also, terrible models, robotic animations and poorly designed tiling textures. Also, use bump maps instead of normal maps (I’m sure there’s a material node for generating normals from bump height maps). Only tiling bump maps, none of the fancy normal map baking people have nowadays.

Looks pretty good from the photo. Thanks. The only thing I would say is that it looks a bit washed out (color-wise).

I’m not so sure. A lot of people have replicated the early CGI look with programs like Maya, Cinema 4D, Blender, etc.

You can have a look for yourself:

https://i.vimeocdn.com/video/594430563_1280x720.jpg

http://i3.ytimg.com/vi/oTLcxg286qw/maxresdefault.jpg

https://f4.bcbits.com/img/a3038772974_10.jpg

The only video game engine I’ve seen that even comes close to the old CGI look is the Unreal 2 Engine. I was considering using it, but it really only seems to support very low poly models, and has no bump/normal mapping, but early CG had pretty high poly models (relatively) and did have bump mapping.

(This is a screenshot from Unreal Tournament 2004 for reference)

http://oi66.tinypic.com/k4v72f.jpg

The biggest things on the engine side would be to use Phong shading by modifying the lighting equations in the shaders, remove the tone mapper, and disable sRGB everywhere in the pipeline.

Lol… This thread is great. Possibly try using a post process filter to give mpeg/jpeg compression block artifacts. You could go nuts with this effect since everything else would be so cheap. Maybe use a stencil on the character and certain props so that you don’t “compress” them with it.

I would like to know how to go about doing this. What would I need to learn or where to get started? Thanks for the suggestions.

You would need to know HLSL, and those shaders can all be found in Engine/Shaders. Shader Development | Unreal Engine Documentation

Hey, I just found a custom specular calculation on this forum that emulates phong shading very well, but it comes with two major downsides, the first one being the specular highlight
can only come from one light source (all other light sources won’t add additional specular highlights to the object), and the second major downside is that the more transparent the object with this material becomes the more transparent its specular highlight becomes (the opacity of the object should ideally NOT affect the opacity of the highlight) .

Here’s the link to it:
https://forums.unrealengine.com/deve…ar-calculation

(Thanks to isgoed)

I also have a question about the custom material: It was written for version 4.11.2 but I have unreal Engine 4.19 installed. Do you think it would work in 4.19 and do all materials created in earlier versions Unreal Engine 4 work in newer ones without problems?

You can do this easier by editing things like the BRDF.ush and ShadingModels.ush. Within the “FDirectLighting DefaultLitBxDF” part of the ShadingModels, you’d just have it call a phong shader within the BRDF file(I believe there is already one in there).

I know CrazyBump can convert height maps to normal maps so that they can be used in Unreal.

You can do this easier by editing things like the BRDF.ush and ShadingModels.ush. Within the “FDirectLighting DefaultLitBxDF” part of the ShadingModels, you’d just have it call a phong shader within the BRDF file(I believe there is already one in there).
[/QUOTE]

Thanks for that- it helped. I found a video that shows the phong shader in action, so I know it’s definitely possible.
http://oi64.tinypic.com/rcq7hv.jpg

Now I’m assuming that with this phong shader (unlike the one I previously mentioned) the opacity of the specular highlight isn’t affected by opacity of the object, because if that’s the case then your solution is perfect. :slight_smile:

I would really like to know how to do something like this, because I’m pretty pleased by the results. Any tutorials/advice/guides on using/editing BRDF?

Prerendered CGI had a very different look from real time CGI. It’s not like you could PLAY a CGI movie from the 1980s-1990s. Back then the computers were’t nearly fast enough for real time to look anywhere near as good as prerendered.

In the BRDF.usf file mentioned earlier, there should be number slots from like 1 to 4 or something and below that is a line that specifies which number is the active diffuse model and specular model. You can easily just swap the number active for the one that has your preferred shading model and recompile all shaders to see what it does.

It should look somewhat like:

(1) phong
(2) Blinn
(3) GGX
(4) whatever

somethingsomethingUseReflectionblablaModel = 3

and then swaü that 3 for whatever you want (again, just an example…I dont remember it exactly as I havent used it for years now)

But this is pretty neat as you can switch the diffuse model to OrenNayar:cool:

Also, really delete all reflections, no skyight etc! Just use the cubemap feature inside the PP volume and add a solid color texture of your linking and turn down the intensity quite a bit.

Oh and looking at youre reference, this really needs crappy models and textures to work…there is no way around that. Just look at the smoothing of those goat heads man XD

Cheers!

In the BRDF.usf file mentioned earlier, there should be number slots from like 1 to 4 or something and below that is a line that specifies which number is the active diffuse model and specular model. You can easily just swap the number active for the one that has your preferred shading model and recompile all shaders to see what it does.

It should look somewhat like:

(1) phong
(2) Blinn
(3) GGX
(4) whatever

somethingsomethingUseReflectionblablaModel = 3

and then swaü that 3 for whatever you want (again, just an example…I dont remember it exactly as I havent used it for years now)

But this is pretty neat as you can switch the diffuse model to OrenNayar:cool:

Also, really delete all reflections, no skyight etc! Just use the cubemap feature inside the PP volume and add a solid color texture of your linking and turn down the intensity quite a bit.

Oh and looking at youre reference, this really needs crappy models and textures to work…there is no way around that. Just look at the smoothing of those goat heads man XD

Cheers!
[/QUOTE]

You can do this easier by editing things like the BRDF.ush and ShadingModels.ush. Within the “FDirectLighting DefaultLitBxDF” part of the ShadingModels, you’d just have it call a phong shader within the BRDF file(I believe there is already one in there).
[/QUOTE]

…edited…

In the BRDF.usf file mentioned earlier, there should be number slots from like 1 to 4 or something and below that is a line that specifies which number is the active diffuse model and specular model. You can easily just swap the number active for the one that has your preferred shading model and recompile all shaders to see what it does.

It should look somewhat like:

(1) phong
(2) Blinn
(3) GGX
(4) whatever

somethingsomethingUseReflectionblablaModel = 3

and then swaü that 3 for whatever you want (again, just an example…I dont remember it exactly as I havent used it for years now)

But this is pretty neat as you can switch the diffuse model to OrenNayar:cool:

Also, really delete all reflections, no skyight etc! Just use the cubemap feature inside the PP volume and add a solid color texture of your linking and turn down the intensity quite a bit.

Oh and looking at youre reference, this really needs crappy models and textures to work…there is no way around that. Just look at the smoothing of those goat heads man XD

Cheers!
[/QUOTE]

Thanks for your advice! I finally found out how to modify the BRDF.ush file (in version 4.21) in order to use phong shading. I had to look at the source code for the 4.10 version (the last version to allow to easily switch between diffuse and specular models). I had modify the D_GGX function to use Blinn Phong specular instead.

I had to change from this:


float D_GGX( float a2, float NoH )
{
    float d = ( NoH * a2 - NoH ) * NoH + 1;    // 2 mad
    return a2 / ( PI*d*d );                    // 4 mul, 1 rcp
}
    

to this:


float D_GGX( float a2, float NoH )
{
    float d = 2 / a2 - 2;
    return (d+1) / (2*PI) * PhongShadingPow( NoH, d );        // 1 mad, 1 exp, 1 mul, 1 log
}


I tested this with a custom version of the engine and it works! This is much better than “faking” phong shading highlights via an emissive. There is proper shadow mapping so the highlights will be properly obscured by cast shadows, like they’re supposed to be.

I used the movie Toy Story for reference

Toy Story(1995):

https://i.imgur.com/Nmy1yyi.jpg

Screenshots from the modified version of the Unreal Engine (using blinn-phong for specular model)

https://i.imgur.com/x3D36vr.png

https://i.imgur.com/jLWUwjk.png

https://i.imgur.com/90Edj2o.png

Thanks again for helping! I will now be able to create my game! I hope this helps anyone else that also wants to use blinn/phong instead of GGX for their project.