HDRISKYBOX

HDRI to Source engine skybox

A Source engine skybox is six cube faces. Each face is a VTF texture with a VMT material, named to a fixed convention. This tool builds the whole bundle, in both LDR and HDR, from one equirectangular HDRI. It runs in the browser, with no command-line tools and nothing uploaded.

What the export produces

The Source Skybox Bundle export turns the loaded panorama into a complete materials/skybox/ deliverable. For each of the six cube faces it writes two versions: a standard LDR version, and an HDR version that Source uses when the player has HDR lighting switched on. Each version is a .vtf texture paired with a .vmt material file. Every file is named from the sky name you choose.

The six Source engine skybox faces on an unfolded cross. Up and down stack on the front face, with left, front, right, and back in a row. Each cell shows its VTF suffix.upuplfleftftfrontrtrightbkbackdndown
Source skybox faces, unfolded

Source identifies the faces by a two-letter suffix. With a sky name of sky_dusk, the LDR textures come out like this:

Cube faceSuffixLDR file
Frontftsky_duskft.vtf
Backbksky_duskbk.vtf
Leftlfsky_dusklf.vtf
Rightrtsky_duskrt.vtf
Upupsky_duskup.vtf
Downdnsky_duskdn.vtf

There is no separator between the sky name and the suffix. That is the Valve on-disk convention. The HDR version of each face inserts _hdr before the suffix, and every .vtf has a matching .vmt:

materials/skybox/
  sky_duskft.vtf        LDR texture
  sky_duskft.vmt        LDR material   (UnlitGeneric)
  sky_dusk_hdrft.vtf    HDR texture
  sky_dusk_hdrft.vmt    HDR material   (Sky)
  plus the same four files for bk, lf, rt, up, dn
  = 24 files, packed as sky_dusk_skybox.zip

Step by step

  1. Open the converter and drop in your equirectangular panorama, the standard 2:1 wraparound layout. It can be an .exr, .hdr, .png, or .jpg file, though only .exr and .hdr hold true HDR range.
  2. Optional: use the Look tab to set the sky before exporting. It has controls for tone mapping, exposure, white balance, and environment rotation.
  3. In the sidebar, open the Export tab and set Mode to Source Skybox Bundle.
  4. Enter a Sky Name. It becomes the prefix for every filename in the bundle; the rules are in the next section.
  5. Choose an HDR Compression mode. Compressed packs the HDR range into a small 8-bit texture and is the format Valve uses for its own skyboxes. Uncompressed keeps a true 16-bit float per channel: larger files, but exact.
  6. Pick a Face Size: 256, 512, 1024, or 2048 pixels per face. The size closest to your source resolution is marked with a dot.
  7. Optional: tick Apply current adjustments to export. This bakes the exposure, tone mapping, and white balance from the Look tab into the LDR textures. The HDR textures keep the original light values either way, so Source can run its own exposure on them.
  8. Click Render skybox bundle and save the zip.
  9. Unzip the archive into your game or mod folder. The files are already nested under materials/skybox/, so they land in the right place. Then set the map skybox as the next section describes.

Choosing a sky name

The sky name is the prefix every file in the bundle is built from, and it is the name the map points at. There are four rules:

  • Start with a letter or a digit.
  • Use only letters, digits, hyphens, and underscores. No spaces, dots, or slashes.
  • Keep it to 64 characters or fewer.
  • The input strips any disallowed character as you type, so a rejected name is hard to submit by accident.

Source ships its own skyboxes with a sky_ prefix, so a name like sky_harbor_dawn fits the convention. The map refers to the skybox through its skyname keyvalue, which in Hammer lives in Map Properties on the worldspawn entity. The engine adds the six face suffixes for you, so skyname never includes ft, bk, or the rest.

One detail matters for HDR maps. The bundle ships two material sets, and the skyname you set decides which one the map loads. Point it at the _hdr name, sky_harbor_dawn_hdr, to load the HDR-aware Sky materials. Those carry both the standard and HDR textures, so they render correctly whether or not the player has HDR enabled, which makes them the right pick for any HDR map. The plain sky_harbor_dawn loads the LDR-only set, fit only for a map that does not use HDR.

Common pitfalls

  • Standard-range source. A .png or .jpg holds nothing brighter than white, so it has no high dynamic range to capture. The bundle still writes the HDR files, but from a standard-range source they carry the same range as the LDR set. For a skybox that genuinely gains from HDR, such as a bright sun or an overbright sky, start from a .exr or .hdr file.
  • Wrong folder. The files must sit under materials/skybox/ exactly. The zip already nests them that way, so unzip at the game or mod root and leave the folder structure intact.
  • Deleting the HDR set. Both the LDR and HDR versions ship on purpose. Source picks between them based on whether the player has HDR rendering enabled, so deleting the HDR files breaks the sky for anyone playing with HDR on.
  • Oversized faces. A 2048-pixel bundle is twelve large VTF files. For most Source maps, 512 or 1024 is plenty, and the recommended dot points at a sensible default.
  • Sky-name mismatch. The skyname must never include a face suffix. The engine adds ft, bk, and the rest itself. For an HDR map that means sky_dusk_hdr, not sky_dusk_hdrft.

Coming from Blender?

If you are building the panorama in Blender, render it as a 2:1 equirectangular image first, saved as a .hdr or .exr file. Then bring it into the converter and follow the steps above. The HDRI in Blender guide covers the camera and World setup.

Open the converter