Windows desktop browser for ArcheAge 10.x client models: weapons, armor and costumes as an icon grid, click a tile for a rotatable 3D preview.
- Reads straight from the client
game_pak(opened read-only, shared) or an unpackedgamefolder. - Item list, names (any client language), icons and model paths come from the pak's own
compact.sqlite3. - Armor/costumes: every race/gender variant, optionally shown on the matching nude body + default face/hair,
with the armor's
cutvolume hiding the skin underneath like the game does. - Export the converted model as
.glb, or save a transparent PNG screenshot.
src\ModelBrowser\bin\Release\net10.0-windows\AAModelBrowser.exe [game_pak | game folder] [--item <id>] [--race <model id>]
Or publish a self-contained build (see Build below; no .NET install needed to run it). Needs the Edge WebView2 runtime (ships with Windows 11).
First start: Open game_pak… and pick the game_pak file in your client folder. The last source reopens automatically.
Model ids for --race: 10/11 Nuian M/F, 16/17 Elf, 14/15 Dwarf, 18/19 Harani, 20/21 Firran, 24/25 Warborn, 13 Fairy F.
Left drag rotate · right drag pan · wheel zoom · double-click a surface to orbit around it.
Keys: R reset, 1 front, 3 side, U stand weapons upright, A auto-rotate, W wireframe, G grid,
D double-sided, T material tint, N normal maps, B light background.
dotnet build src\ModelBrowser -c Release
dotnet publish src\ModelBrowser -c Release -r win-x64 --self-contained -o dist
| Path | What |
|---|---|
src/ModelBrowser |
WPF app (Fluent dark theme), WebView2 host, three.js viewer in wwwroot/ |
src/ModelBrowser.Core |
Game sources (PakGameSource, FolderGameSource), item catalog (SQLite), CDF resolving, GLB conversion + cache |
src/ModelBrowser.Core/Pak |
AAPak reader, copied from AAEmu.Commons/Utils/AAPak (originally ZeromusXYZ/AAEmu-Packer) |
src/ModelBrowser.Cli |
mbcli headless smoke test: `mbcli <pak |
external/Cryengine-Converter |
Vendored CgfConverter project from Markemp/Cryengine-Converter (GPLv2, upstream commit 7b951db), with local patches below |
- Weapons:
items → item_weapons.asset_id → item_assets.path(group fromholdables) - Armor/costumes:
items → item_armors.asset_id → armor_assets → item_armor_assets → item_assets(one row permodel_id= race/gender) - Icons:
items.icon_id → icons.filenameunderui/icon/; names fromlocalized_texts - A
.cdfis XML naming the mesh (Model File) + material override, plusCA_SKINattachments.
CgfConverter.csproj:InternalsVisibleTo ModelBrowser.Core(so we can buildArgsdirectly).BaseGltfRenderer.Geometry.cs: bones sharing a controller ID (ArcheAge hair) were collapsed onto one node, producing a cyclic node graph that three.js can't load. Nodes are now only reused when the bone name matches, and skin joints come from the per-bone node map.MaterialTextureManager.cs: materials listing bothBumpmapandNormalmapcrashed with a duplicate key; the_ddnone wins.
%LOCALAPPDATA%\AAModelBrowser\ — settings.json, app.log, cache\db (compact.sqlite3 extracted from the pak),
cache\models (converted GLBs; "Clear cache" in the status bar), WebView2 (viewer profile).
GPLv2 (see LICENSE), since the bundled converter is GPLv2. three.js (wwwroot/lib/three) is MIT. The AAPak reader is from ZeromusXYZ/AAEmu-Packer.
No game assets are included; the app reads them from your own client install.