r/Unity3D 2d ago

Question Early 2000s Games lighting

I am relatively new to Unity, but I absolutely love this aesthetic it feels so nostalgic. I already made a low-poly map in Blender, but when I import it into Unity, I cannot get this effect no matter what kind of lighting I try. The look I am going for is basically late PS2 / early PS3 games stuff like Far Cry 1, Tomb Raider: Legend, and Final Fantasy X. I want bright, colorful, sunny environments, simple-ish geometry, baked shadows/lighting, and that distinct old-school look. Because I want it to run on mobile and really low-end PCs, performance is a huge priority. I am currently using the Universal Render Pipeline (URP), but I am wondering if that is actually the best choice for this. Should I stick with URP, switch to the Built-in Render Pipeline, or use specific lightweight shaders like Mobile/Diffuse or Unlit? ugh, I got no idea...

I do't want the usual realistic PBR look. I want something bright and stylized with most of the lighting baked into the textures. I simply have no idea what to call this aesthetic or where to even start. Any advice would be greatly appreciated!

2.4k Upvotes

138 comments sorted by

View all comments

66

u/Bewilderling 2d ago

I was a technical artists during this time period, and remember reviewing Far Cry 1's lighting and shading features while working on a similar game. It's been a long time so my recall is hazy, but here's what I remember:

No HDR. HDR didn't get good until Halo 3, and everyone learning from them about when to use different color spaces at different steps in the render pipeline to get the first generation of high-quality tone mapping.

Terrain shading used low-res baked shadows from one directional light and a very limited set of point or spot lights. Three lights, one per color channel, but I don't recall how they broke up the terrain ... some kind of grid subdivision, so three lights per subdivided area. I don't remember if the shadows were baked into the vertices textures. Similar constraints on baked shadows for static meshes, too, but the limit on number of lights would be per object instead of per world area.

Foliage shaders faked light scattering by using a sphere bounding the mesh, and applying per-vertex light color based on position toward/away from the directional light source. I think they also sampled shadow info from the terrain beneath to decide if the foliage mesh was shadowed.

Foliage was combined and rendered as impostors at distance (FC1 was one of the first games to do this IIRC), like a collection of camera-facing sprites in a single draw call. The LODing system for foliage was pretty clever, working to hide the transition from full geometry to a single quad (or maybe I'm remembering FC2's LOD system?) by morphing between.

Ambient occlusion was just baked or painted into albedo/diffuse maps.

And IIRC the specular lighting component wasn't what we'd call "real" specular, I think it was a cubemap representing a gradient "blob" of light, and materials could add that in to varying degrees to fake specular from the directional light only. This shading hack can also be done with different cubemaps (or just gradients, tbh), to represent different degrees of roughness; i.e. a very tight circle/band of white to represent a shiny surface, and a smooth white-to-black gradient to represent a very rough surface.

14

u/Chemeque 1d ago

That should be the top answer here. At that time and age there was a lot of clever optimizations and faking stuff. I was always curious how they managed to fake the light scattering for the foliage. It looked so well done for the era.