Let’s Speculate! Half-Life 2 Lighting Zoo

Posted on Posted in Article, Game, Half-Life 2, Let's Speculate!

The Lighting Zoo, otherwise known as ‘lightingzoo’, is a level included in the pack of development VMFs that was leaked with Half-Life 2 back in 2003. It’s one of the lesser interesting levels in the pack of levels, but we’ll be covering it anyway just to quickly get it out of the way. Obviously on this occasion I won’t be bothering to produce a video but expect a number of screenshots demonstrating the level.

The map is marked as being last modified on the 6th of May 2002 but it’s hard to be sure as to who the original author was but it was likely produced by someone within Valve who didn’t work primarily as a level designer, more likely the work of one of the programmers at Valve. We can pretty much conclude this as the map features incredibly simplistic geometry, though includes a few different sections that seem to test the capabilities of the lighting tool, VRAD, at the time; displacements, animated lights and normal maps are featured in the different sections of the level.

Keep in mind that this obviously doesn’t reflect entirely how this level may have looked at the time as it was built using the Source 2013 level tools and of course the level was actually produced in 2002. My reasoning behind using the 2013 version of the Source Engine is purely just for stability and because I can make whatever changes as needed while demonstrating them. It’s unlikely we’ll ever see a build of Half-Life 2 from that period ever surface but we can dream.

Honeyview_lightingzoo_hogsy0001

Overall there seem to be four different sections of the level as you can see from the screenshot above. The first two sections (left to right) appear to primarily be intended to see how lighting was working for displacements. At the time I would guess that displacements were more likely to have been using per-vertex lighting, rather than having their own lightmap but it’s also possible this level was produced to test the introduction of lightmaps on displacements. It’s hard to know for sure but regardless, there’s quite a lot going on towards displacements in this level and how the lightmap is applied to those displacements in general.

For the first section of the level, we’re presented with a rather simplistic room with a skybox and a sand texture using a normal map. It’s likely this was to ensure the lightmap also included the correct directional data for it to influence the normal map on lightmapped displacement surfaces but apart from that it’s not particularly interesting to look at. The texture used for the sand was removed at some stage before Half-Life 2 shipped, so that had to be pulled over from the leak.

Moving on from that we also have the two middle rooms that contain a number of different displacements. I would expect that initially when displacements were first implemented in Source, Valve weren’t using lightmaps but instead used per-vertex lighting, though that’s purely speculation on my part but that being said it does seem like displacements didn’t support any kind of collision hull when they were first added to the engine as a few earlier maps also include brushes along with the displacements (thanks to H.Grunt for informing me about that). I thought it was worth pointing this out, as it might be easy to forget that a lot of the functionality, that we can sometimes take for granted in Source today, was very gradually introduced into the engine overtime through both development and prototyping with the rest of the development team.

The displacements included in these parts of the map aren’t your typical shapes, with displacements typically being used for terrain in Source (though they were also used for pipes and more in some circumstances) though this is also likely why the displacements included here are unusual in shape as it’s easy for issues to sneak past if level designers aren’t typically using displacements in this fashion, but I’d say more importantly is that it also lets you push and extend that functionality beyond the scope of what level designers might have been doing with that functionality at the time. Perhaps a good example of the influence that the programmers had on the design of the game, besides the actual designers of the game themselves.

In the section here, which is where the player initially spawns, we have a large displacement centered in the middle surrounded by a number of spheres at each corner and a number of lights at each corner as well. It’s an unusual set up, more unusual is the extra light on the bottom right of the room which you might be able to pick out from the overview earlier but it’s likely this might have been a simple mistake.

It’s possible this area was intended to test both displacements with environment mapping and normal maps as there’s a number of env_cubemap entities that have been intentionally set up in this section of the level, though for the material in question which was pulled from the leak, it’s difficult (or impossible rather) to see the environment map with how the material was set up, I changed this so that we can see the environment map on the surfaces more easily but I’m not quite sure why this was done; it could be that this was in error by someone at Valve.

I guess Valve can be glad to know this all still works, heh. There isn’t much more to say about this particular section, it seems quite evident that it was intended to test both environment maps, normal maps and lightmaps on different displacement surfaces, either to check for any regressions or to ensure the initial implementation was functioning as expected.

The next section we’ll take a quick look at is very similar though a little more simplistic. It features yet another sphere but this time without a normal map or environment map and instead just a simple diffuse + lightmap, it’s essentially identical to the others but with a different texture. It’s likely the intention here is similar to the other section we looked at but just lighting generally with unique displacement shapes.

There’s also two adjacent displacement planes we can find near the entrance which are slightly slanted from one another, with a light slightly shifted to the side of just one of them. From a glance it’s pretty unclear what the intention here was but my guess is that it was to check that the lightmap between two separate lightmap planes was smooth, as if they were a single surface; with displacements there aren’t any ‘smoothing groups’, instead the tools essentially treat any adjoining displacements as one surface and the normals are calculated automatically so that the lighting smoothly transitions over them (or that’s the intention anyway), this is likely why the light is shifted more so to one side.

Honeyview_lightingzoo_hogsy0006

There isn’t a whole lot more to this room so we’ll be moving now to the final section which is basically made up of two adjacent rooms which seem to mirror each other but feature different texture sets, one with a simple diffuse and lightmap, and the other with the diffuse, normal, environment map and lightmap that we saw earlier. Within these rooms there’s one coloured light in the corner, and then on one side we have a brush positioned above a displacement with an animated spotlight above it (likely checking that a shadow is correctly cast down onto the displacement), and finally a cylinder with smoothing groups applied and a spotlight cast through a slit made of brushes.

I guess we’ll start off with the brush placed above the displacement. Like I said, it’s likely this was to check that shadows were being cast onto the displacement correctly but otherwise there doesn’t seem to be any other purpose. The fact that there’s an animated light was also likely to ensure that the lightmap was correctly updated on the displacement.

2016-08-29_20-05-52

I don’t think much more can be said about it so we’ll immediately move over to what’s on the other side of the room near the entrance (and we’ll skip the light in the corner). This isn’t so much to do with displacements this time but seems purely just for smoothing groups, typically for complex geometry like this you would change it to a detail brush to avoid any issues with CSG splitting the geometry up too much but interestingly this isn’t the case here which seems to have a negative impact on how the geometry ends up being lit.

From the screenshot provided below you can likely see how the different junctions produced during CSG have effected the overall lighting of the cylinder, with VRAD seemingly unable to completely trace some of the lighting to the rest of the geometry and also failing to keep the appearance of a smooth surface because of it, though the larger lightmap might also partly be to blame in this instance.

I would guess that this was intentional as it’s unlikely this was any different at the time but I’m unsure what the intended goal of this was, whether a solution was being explored or just to demonstrate it in general. The rest of the cylinder is otherwise fine and not effected by this (there is some issue with the light incoming from the hallway being applied to the cylinder). The same issue also appears on the cylinder in the second room but that’s unlikely to be surprising.

I think that’s about everything I can think of covering in this map, the only other thing noteworthy is that the map seems to use the same hallway structure found in other ‘zoo’ levels though slightly modified like the two larger rooms were slotted into it, but it’s very much just your typical hallway otherwise but as with most of these levels you’ll find it easier to use the ‘noclip’ function rather than walking through them.

If you found this interesting then do let me know and I’ll continue on with it, I know this is one of the least interesting levels in the leak but I like to cover things that most people would otherwise overlook. There’s a lot more than meets the eye they often say, though we can only really speculate on most of what we find in the leak and levels such as this. If anyone else has any comments or suggestions, or hell, anything, do let me know and I’ll update this accordingly but I do hope it was insightful!