Citra Texture Dumping and Custom Textures Guide
Citra offers the ability to extract in-game textures and apply custom texture packs. Extracted textures are saved as .png
files, while custom texture packs can include files in .png
, .dds
, or .ktx
formats. Supported compression techniques include BCn and various ASTC block styles.
How to Extract Textures
- Access the Settings:
- Open Emulation > Configure… in the Citra menu.
- Navigate to Graphics > Enhancements and activate Dump Textures, then click OK.
- Start Playing:
- Launch a game and play. Textures used during gameplay will automatically save as
.png
files.
- Launch a game and play. Textures used during gameplay will automatically save as
- Locate Dumped Textures:
- Right-click the game in the library and select Open Texture Dump Location to find the saved textures.
- Template File:
- Inside the dump folder, you’ll find a
pack.json
template file. Copy this file to the load folder for proper configuration.
- Inside the dump folder, you’ll find a
How to Apply Custom Textures
- Open Texture Load Folder:
- Right-click your game in the library and choose Open Custom Texture Location.
- Add Custom Textures:
- Place your custom
.png
files in the folder.
- Place your custom
- Enable Custom Textures:
- In Emulation > Configure… > Graphics > Enhancements, activate Use Custom Textures and confirm with OK.
- To preload custom textures into RAM for better performance, enable Preload Custom Textures. Keep in mind this will increase memory usage.
Texture Dumping Details
- Dumping Process:
- Textures are saved when accessed from the game’s VRAM and uploaded to host memory. Only textures with power-of-two dimensions are dumped, excluding host framebuffers.
- Dumped File Information:
- Texture filenames provide details such as dimensions, hash values, pixel format, and mipmap levels. For example,
tex1_256x256_543624189C94B105_12_mip0.png
describes:- Dimensions:
256x256
- Hash:
543624189C94B105
- Pixel Format:
12
- Mipmap Level:
mip0
- Dimensions:
- Texture filenames provide details such as dimensions, hash values, pixel format, and mipmap levels. For example,
- Configuration File:
- A
pack.json
file is automatically generated in the dump folder and must be placed in the load folder for proper texture pack usage.
- A
Pack Configuration
- JSON File:
- Custom textures now use a JSON configuration file (
pack.json
) for metadata, including pack name, author, hash format, and options for mipmap generation or texture flipping. - Compressed formats do not support mipmap generation or flipping.
- Custom textures now use a JSON configuration file (
- Hashing:
- The newer hashing method is faster and more compatible across APIs, making it the preferred choice. However, older formats are still supported to ensure compatibility with existing packs.
- Custom Filenames:
- Hash mappings allow arbitrary filenames. For instance:jsonCopy code
"textures": { "114BFC385ED72F15": "logo.png", "22B8C43233F640AE": "sky.png" }
- Hash mappings allow arbitrary filenames. For instance:jsonCopy code
Adding Custom Normal Maps
- Purpose:
- Normal maps add detailed textures to objects, enhancing visual quality beyond basic diffuse maps.
- Filename Structure:
- Normal maps use the same base filename as their diffuse counterpart, with
.norm
added before the extension. For example:- Diffuse Map:
texture.png
- Normal Map:
texture.norm.png
- Diffuse Map:
- Normal maps use the same base filename as their diffuse counterpart, with
- Limitations:
- Normal maps only function when fragment lighting is enabled in the scene. If lighting is absent, they will not display and an error will appear in the log.
[ 24.086113] Render.OpenGL <Warning> video_core\renderer_opengl\gl_rasterizer.cpp:OpenGL::RasterizerOpenGL::BindMaterial:598: Custom normal map used but scene has no light enabled
By following this guide, you can effectively manage both texture dumping and custom texture implementation in Citra for a tailored gaming experience.