HDRISKYBOX

Cubemap or equirectangular?

Most engines accept an equirectangular HDRI directly and project it internally. A few do not. A few workflows benefit from explicit control over the six cube faces. This guide explains which case applies to your engine.

The short answer

Most real-time engines and 3D applications accept an equirectangular HDRI directly and project it onto a cube for you, so you never handle six faces yourself. The exceptions are engines whose skybox format is six faces by design. This table sorts the common targets, and the sections below explain each one.

Engine / toolAccepts equirectangular?Needs six faces?
UnityYes, Skybox/Panoramic shaderLegacy only
Unreal EngineYes, HDRI Backdrop or Sky LightNo
BlenderYes, World shaderNo
Maya (Arnold)Yes, aiSkyDomeLightNo
GodotYes, PanoramaSkyMaterialNo
Source engineNoRequired
RobloxNoRequired
idTech / GoldSrcNoRequired
Raw OpenGL / DirectXRarelyUsually

Unity

Unity reads an equirectangular HDR directly. Set the imported texture's Shape to Cube and Unity reprojects it for you. Or assign the equirectangular map to a material that uses the built-in Skybox/Panoramic shader, which samples it at render time. A Reflection Probe then captures ambient light from the result. Importing six separate faces still works, but Unity treats it as legacy. Use an explicit cubemap only when you need per-face compression, a different resolution per side, or a shader that samples one face on its own.

Dedicated guide: HDRI to Unity skybox

Unreal Engine

Unreal consumes a single equirectangular HDR in several places: the HDRI Backdrop actor for an instant lit backdrop, a Sky Light for image-based ambient lighting, and reflection captures for local reflections. You can also build a TextureCube asset from an equirectangular HDR and let Unreal handle the projection at import. You rarely need a hand-authored, pre-filtered six-face cubemap. Use one only when you build a specialized cubemap asset rather than light a level from an HDRI.

Dedicated guide: HDRI in Unreal Engine

Blender

Blender lights a scene from an HDRI through the World shader: an Environment Texture node feeds an .hdr or .exr straight into the world surface, used for both image-based lighting and the visible background. No cubemap conversion happens at any stage. Six faces matter only when you export from Blender to a game engine that requires them.

Dedicated guide: How to use an HDRI in Blender

Maya (Arnold)

In Maya with Arnold, an aiSkyDomeLight takes the equirectangular HDR directly. It provides image-based lighting and also serves as the visible background. Other renderers expose the same idea under a different name: a dome light or environment light fed an equirectangular map. None of them need a six-face cubemap. The dome-light workflow stays equirectangular throughout. Cube faces matter only if you export the environment onward to an engine that requires them.

Godot

Godot's Sky resource takes a PanoramaSkyMaterial, which accepts an equirectangular HDR directly. Assign the file and the environment lights the scene. Godot also supports cubemap-based skies through other sky materials and can convert between the two. The panorama path is the default and the simplest. Unless you have a specific reason to give Godot pre-split faces, the equirectangular HDR is the input to use.

Dedicated guide: HDRI to Godot skybox

Source engine

The Source engine has no equirectangular path. A Source skybox is six VTF (Valve Texture Format) face textures with matching VMT (Valve Material Type) materials, named to a fixed convention and placed in materials/skybox/. The engine samples those six faces around the level. The converter is built for this case: load an equirectangular HDRI, export the bundle, and copy the files into materials/skybox/.

Dedicated guide: HDRI to Source engine skybox

Roblox

Roblox skyboxes are six separate face images assigned to a Sky object: an up face, a down face, and the four sides. There is no equirectangular input. The six faces are mandatory. Export a cubemap, upload the six images, and reference them on the Sky object. Roblox skybox faces are standard 8-bit images, so they do not carry HDR range.

idTech / GoldSrc

Quake-derived engines, including idTech branches and GoldSrc (which powered the original Half-Life), use six skybox textures with directional suffixes. The Source engine later inherited the same convention. The exact file format and naming differ by game, but every game requires the same thing: six faces and no equirectangular path. Export a cubemap and rename or convert the faces to match the target game convention.

Raw OpenGL / DirectX

When you work directly against the graphics API, a cubemap is six 2D images bound to one cube-map sampler: GL_TEXTURE_CUBE_MAP in OpenGL, or a cube texture view in Direct3D. Nothing projects an equirectangular map for you. Either sample the equirectangular texture with your own direction-to-UV math in the shader, or upload six faces and let the hardware cube sampler handle the lookup. Six faces is the usual choice because the hardware path is built around it.

When six faces are the right choice

  • The engine requires it. This covers Source, Roblox, idTech and GoldSrc, and most work written directly against OpenGL or DirectX.
  • Per-face control, when you want different compression or a different resolution on individual faces, such as a lower-detail floor.
  • Memory budgeting on mobile, where the engine can stream or drop each face to a smaller mip independently of the others.
  • Custom shaders that sample one specific face rather than a direction vector.
An unfolded cubemap cross showing the six faces and their axes (+X, -X, +Y, -Y, +Z, -Z), with a key contrasting how Blender, Unity, and Unreal name the faces against the Source engine convention.+YUp-XLeft+ZFront+XRight-ZBack-YDownBlender, Unity, Unreal: faces named by axis, +Y upSource engine: suffixes ft bk lf rt up dn, +Z up
Cubemap faces and per-engine names

If none of those apply, give your engine the equirectangular HDRI and skip the conversion.

Open the converter