Introduction

After loading a level, open View → Texture Editor to launch the Texture Editor. It browses and edits the level's texture package under RENDERABLE (e.g. LEVEL_TEXTURES.ALL.PAK / LEVEL_TEXTURE_HEADERS.ALL.BIN). The window, shown below with a texture selected, has three columns: the texture list with Import New and Export All under it, the preview in the middle, and the per-texture buttons and flags on the right.

The Texture Editor window with a level texture selected, showing the texture tree on the left, the streamed preview with its mip slider and metadata in the middle, and the edit buttons and flag checkboxes on the right.

The Texture Editor with ayz\diffuse\boombox[d].tga selected: tree and import/export buttons on the left, preview in the middle, per-texture actions and flags on the right.

Global textures used to sit in a separate, read-only source. They are now imported into the level automatically when it loads, which makes each level completely self-contained and means the textures it shares with the rest of the game can be edited like any other. There's no longer a source to switch between — everything the level uses is in one list.

The same window can open as a picker (with a Select This Texture button in the bottom-right corner) from the Material Editor (Pick Texture… / Edit Texture…), from an EnvironmentMap entity's Texture parameter in the entity inspector (where it lists only the level's cubemaps), and when adding a decal in the Character Asset Editor. Materials assigned this way show up on models in the Model Editor when textured preview is enabled.

Browsing & Preview

The left tree lists the level's textures. Use Search to filter by name. The preview title shows the texture name and format (ayz\diffuse\boombox[d].tga [BC7] in the figure above), and the Metadata panel gives width, height, depth, mips and size for whatever is on screen.

Under each preview is a mip level slider. A texture is stored as a chain of progressively smaller copies, and the top one tells you least about how it was authored — step down the chain to see what the game actually shows at distance, and to check that a texture you imported built a sensible chain. The label beside the slider names the level and its size, as below, while the Metadata panel keeps describing the whole texture. For a cubemap the slider is greyed out: its content is six chains rather than one, so the preview shows the whole face strip instead.

The streamed preview with the mip slider moved three levels down the chain, showing the 128 by 128 level and its label.

The mip slider three levels down the streamed chain: the label names the level and its size, and the Metadata panel still describes the full 1024 × 1024 texture.

Streamed & Persistent

A texture has two slots, shown as the Streamed and Persistent preview tabs. Empty slots show (none) and disable their tab.

  • Streamed — the full-resolution chain, loaded on demand.
  • Persistent — the copy that stays resident in memory, so it's meant to be the smaller of the two.

The Persistent tab of the preview showing the 128 by 128 resident copy of the same texture, with its own mip slider and metadata.

The Persistent tab for the same texture: 128 × 128 with six mip levels and 21 KB, against 1024 × 1024 with nine and 1.33 MB in the Streamed tab.

In the shipped data the persistent copy is never a separately compressed image — it's the streamed chain starting a few levels in. OpenCAGE reproduces that exactly when it writes one, so an imported texture is stored the way the game stores its own. You can see it in the figure above: the streamed copy of boombox[d].tga is 1024 × 1024 with nine levels, and its persistent copy is 128 × 128 with six — the same chain, starting three levels in. Earlier versions wrote the same full-resolution data into both slots, which was wrong; persistent copies are now correctly smaller.

Cubemaps

Cubemaps can be viewed either as 2D faces — the six faces side by side in one strip — or in 3D, mapped onto a cube you can drag to rotate and scroll to zoom. Selecting a cubemap adds a Cubemap view row above the preview. 3D is the default and swaps the Streamed / Persistent tabs for the cube, as shown below; 2D faces brings the tabs back with the strip in place of the image. The Source dropdown beside the radio buttons picks which slot the cube is built from, but it's only enabled when a cubemap has both slots filled — every cubemap the game ships is streamed-only, so for those it stays greyed out.

The Texture Editor preview showing a cubemap mapped onto an interactive 3D cube, with the Cubemap view radio buttons and the greyed-out Source dropdown above it.

A cubemap in the 3D view. The Source dropdown is greyed out because, like every cubemap the game ships, this one has only a streamed copy.

The same cubemap in 2D faces mode: the six faces side by side in a strip on the Streamed tab, with the mip slider greyed out and the metadata panel below.

The same cubemap as 2D faces: the six 128 × 128 faces in one strip on the Streamed tab, with the mip slider greyed out.

Import & Export

Supported Formats

Import no longer requires a DDS in exactly the right format. OpenCAGE reads DDS, PNG, JPEG, TGA, BMP, TIFF, Radiance HDR and ASTC, and converts to whichever of the game's formats you pick.

Two encoders do the work, both carried inside OpenCAGE and unpacked when first needed — Microsoft's texconv for the block and uncompressed formats the PC game uses, and Arm's astcenc for ASTC. A DDS that's already in the format you asked for is passed straight through without running either, which is the common case when you export from a texture tool.

ASTC is offered on mobile builds only. Nothing in the PC data uses it, and offering it elsewhere would just be a way to make a texture the game can't load. See Multiple Game Installs for working with the iOS / Android / Switch ports.

Import & Replace

  • Import New — adds a new texture. You choose its name as part of the import (type \ in it to put the texture in folders), with the clash check running as you type.
  • Replace Selected — overwrites the selected texture with a new image. The slot keeps its usage flags, since those describe what the texture is for rather than the image in it.

Either way, an options dialog asks what to do with the image before anything is written. It opens with the file's name and size on its top line, as below:

The Import texture dialog with a name box, the Store as format dropdown set to BC7, a Mipmaps slider, and the persistent-copy checkbox and slider.

The import options for a new 1024 × 1024 texture: name, format, how much of a mip chain to build, and where the persistent copy starts.

  • Store as — which of the game's formats to store it in; each entry in the list says what the format suits. When replacing, this defaults to whatever the texture already is, so bringing a texture back in leaves the slot as the game shipped it. A brand new texture defaults to BC7, which is what seven of every ten textures in the game already use.
  • Mipmaps — how much of a mip chain to build, from the top level alone up to as many as the image allows; the label beside the slider says how small the chain gets. A DDS that already carries a chain caps the slider at what it has.
  • Keep a smaller copy in the persistent slot — whether to keep one, and how many levels down the chain it should start; the label shows the size that gives. When replacing, this follows the split the slot already has, as below. For a cubemap or a volume texture the box is fixed, because the game only ever stores those in one slot (streamed for cubemaps, persistent for volumes).

The Replace texture dialog for the same image: no name box, the Store as dropdown set to BC7, the Mipmaps slider at its maximum, and the persistent-copy slider preset to three levels down, with Replace and Cancel buttons.

The same dialog when replacing boombox[d].tga: no name box, the format preset to the slot's BC7, and the persistent slider preset to three levels down — the split the slot already has.

Export & Delete

  • Export Selected — write one texture as DDS, PNG, or JPG.
  • Export All — pick a folder, choose Export all as (DDS / PNG / JPG), then export the whole list. The folder opens when finished.
  • Delete Selected — removes a texture after confirmation.

ASTC textures export through the same route, so a mobile build's textures come out as ordinary images rather than as something only the game can read.

Flags

State flags and Usage flags are the two checkbox lists on the right of the window, shown below for boombox[d].tga. State covers ALLOW SRGB, CUBE, NON SOLID, SWIZZLED, VOLUME, EXPORTED WITH WARNINGS and FLASH TEXTURE; usage covers POST PROCESSING, LENS FLARE, GALAXY, LENS DUST, IS LEVEL PACK and IS GLOBAL PACK. Both lists are greyed out until a texture is selected. Ticking a box updates the texture in memory straight away and refreshes the preview — there's nothing to apply, but the change isn't on disk until you save the level. Usage options are power-of-two style flags from the game's texture usage enum.

The State flags and Usage flags checkbox lists on the right of the Texture Editor.

The flag lists for boombox[d].tga: ALLOW SRGB set for state, IS LEVEL PACK for usage.

Saving

The Texture Editor has no separate Save button. Persist level texture changes with File → Save Level (Ctrl+S), which writes LEVEL_TEXTURES.ALL.PAK / LEVEL_TEXTURE_HEADERS.ALL.BIN (or the compressed .PAK.FZIP variant) under the level's RENDERABLE folder.

Saving closes the game if it's running so install files aren't locked. Because global textures are imported into the level on load, edits to them are written into the level's own package — the game's global texture pak isn't modified, and the change applies to the level you're editing rather than to every level at once.

Related Tools

  • Material Editor — assign textures to material samplers via Pick Texture… / Edit Texture…
  • Model Editor — textured preview and export that depend on materials and their samplers
  • Material Mapping Editor — From→To remaps that swap which materials (and textures) apply at instance time