Convert an equirectangular panorama to cubemap faces online, right in your browser. No signup. No upload.
Drop your panorama here
or click to browse · JPG / PNG / WebP · up to 50 MB
No panorama yet?
Your panorama never leaves your device. All conversion runs locally in your browser using Canvas — no upload, no server, no account.
Pick the naming convention that matches your tool-chain: the Unity preset names each file after the Skybox/6 Sided material’s own slots (front/back/left/right/up/down) so you can match file to slot by name, px/nx/py/ny/pz/nz suits Three.js and most general-purpose tools, and OpenGL tutorials usually use pos_x/neg_x style names.
Unlike Photoshop scripts or paid tools, this is a free, no-account utility. Made by Panorama Generator to support the panorama-to-game-engine workflow.
Grab all 6 faces as a single ZIP, or download faces individually if you only need certain sides.
Convert to 512×512, 1024×1024, or 2048×2048 cubemap faces. Pick smaller for mobile or older GPUs; larger when your source resolution is high enough to fill it.
Upload your panorama and drag to inspect the full sphere before converting. Catch composition issues and seam problems early — without ever leaving the page.
Drop or pick a 2:1 equirectangular panorama (JPG/PNG/WebP). Your file stays on your device.
Confirm you uploaded the right scene using the embedded 360° viewer.
Pick a face size (512/1024/2048) and naming convention, then click Convert. The equirectangular to cubemap conversion runs in your browser in 2-3 seconds.
Get all 6 faces named for your engine, ready to drag into a Unity 6-Sided skybox material or a Three.js CubeTextureLoader.
A cubemap is a set of six square images that form the faces of an imaginary box around the viewer. It holds the same 360° scene as an equirectangular panorama, projected onto a cube instead of a sphere.
Run the equirectangular to cubemap conversion when your target is a legacy Unity built-in pipeline skybox, a mobile GPU without high-precision panoramic sampling, or a Three.js CubeTextureLoader — those all want six discrete faces. If your engine accepts equirectangular directly (URP/HDRP, modern WebGL, or Unreal — which unwraps an .hdr panorama into a TextureCube on import and feeds HDRI Backdrop), you may not need to convert at all. For the full decision tree, see Skybox Formats Explained.
| Aspect | Cubemap | Equirectangular |
|---|---|---|
| Layout | Six square images, one per face | One 2:1 image, like a world map |
| Distortion at poles | No polar singularity; mild corner stretch | Pixels stretched hard at zenith and nadir |
| GPU sampling | Works on GPUs without panoramic sampling | Needs high-precision panoramic sampling |
| Typical consumers | Legacy Unity skybox, Three.js CubeTextureLoader | URP/HDRP, modern WebGL, Unreal, 360° viewers |
| Best for | Shipping a cubemap skybox into an engine | One-file storage, editing, and previewing |
Create a Material and set its shader to Skybox/6 Sided. Export with the Unity naming preset, then drag each PNG into the slot with the same name (Front, Back, Left, Right, Up, Down) and assign the material in Lighting → Environment. Tip: Unity’s slot labels already account for its axis quirk — just match names. Alternatively, import the original panorama directly and set Texture Shape = Cube with a Skybox/Cubemap material.
Unreal doesn’t assemble cubemaps from 6 separate images — skip the conversion and import your source 2:1 panorama directly (ideally as .hdr): UE unwraps it into a TextureCube on import, ready for HDRI Backdrop or a skysphere material. Use the 6 faces only for engines and libraries that take individual faces.
const loader = new THREE.CubeTextureLoader(); const texture = loader.load(['px.png','nx.png','py.png','ny.png','pz.png','nz.png']); scene.background = texture; Export with the Three.js preset and the 6 files come out in exactly the [px, nx, py, ny, pz, nz] order CubeTextureLoader expects.
Every cube map naming scheme below describes the same six faces — only the filename differs.
| Face (what you see) | Three.js / generic | Unity 6-Sided slot | OpenGL |
|---|---|---|---|
| Right of view | px | left | pos_x |
| Left of view | nx | right | neg_x |
| Above | py | up | pos_y |
| Below | ny | down | neg_y |
| Center (front) | pz | front | pos_z |
| Behind | nz | back | neg_z |
The swapped Unity column is deliberate — files are named after the material slot they belong in, not the axis, because Unity’s Left [+X] slot actually holds the right-hand view. Match file name to slot name and the skybox comes out correct.
Uploaded face previews also recognize posx/negx names (three.js’s own example assets) and right/left/top/bottom/front/back names (common in other converter tools).
An inside-out or mirrored cubemap usually means faces landed in the wrong slots. Re-run the panorama to cubemap export with your engine’s naming preset, trust Unity’s slot labels over axis names, and verify in the preview tab.
The Horizontal rotation slider, not a re-export, fixes a skybox that faces the wrong way. Set it anywhere from 0-360° before converting so your chosen landmark or key light lands on the cubemap’s front face.
Blurry cubemap faces mean the requested face size exceeds the source panorama’s vertical resolution. Keep the face size at or below the source height, or generate a larger source with the AI Skybox Generator.
Generate one in 30 seconds with our AI Skybox Generator. Prompt-driven, 2:1 equirectangular, ready to become a cubemap skybox in this converter.
No — your image is never uploaded. The image to cubemap conversion runs 100% in your browser using Canvas, and we never see your file.
Equirectangular (also called a sphere map or spherical panorama) is one image (2:1 ratio, like a world map). Cubemap is the same scene unfolded into 6 square faces of an imaginary box around the viewer. Modern engines often accept equirectangular directly, but legacy pipelines and mobile GPUs still want cubemaps. Read more in our Skybox Formats guide.
Use the Unity preset for a Skybox/6 Sided skybox, px/nx/py/ny/pz/nz for Three.js and most other tools, or the pos_x/neg_x preset for OpenGL projects. The Unity preset names each file after the material’s own six Inspector slots — including its counter-intuitive labelling, where Left [+X] holds the face that sits on your right when you face forward, and Right [-X] holds the one on your left — so you just drag each file into the slot with the matching name. Unreal users don’t need cubemap faces at all: Unreal Engine has no official importer for 6 loose face images and instead unwraps an equirectangular panorama — ideally an .hdr — into a TextureCube on import. Re-export with a different convention any time; no re-upload needed.
1024 px is a safe default for desktop and modern mobile VR. Use 512 for older mobile GPUs or to save memory. Use 2048 only when you have a very high-resolution source (e.g., 8192×4096) and the engine target supports it. Output face size cannot exceed the source’s vertical resolution.
This page’s converter accepts JPG, PNG, and WebP only. For .hdr and .exr files, use the dedicated HDRI to Cubemap Converter — it keeps the floating-point data intact and exports true HDR cube faces for IBL lighting.
You can view a cubemap online by uploading its 6 faces to the “Preview a cubemap” tab on this page — they are stitched into an interactive 360° sphere so you can check face orientation and spot seams. To merge faces back into a single 2:1 equirectangular image, use the Cubemap to Panorama Converter.
If the source panorama doesn’t wrap seamlessly (left edge ≠ right edge), the cubemap will show that same discontinuity at face boundaries. AI-generated panoramas from Skybox Generator are wrap-corrected; camera-captured panoramas typically wrap correctly; stitched panoramas may not.
The horizontal rotation slider changes which direction the cubemap faces before you convert. It shifts which longitude of your panorama lands on each cube face, so you can put a specific building, horizon feature, or light source on the front face without re-editing the source image in Photoshop.