Newbie Spellweaver
- Joined
- Apr 18, 2024
- Messages
- 10
- Reaction score
- 24
PW Client Asset Viewer (Rust + Bevy)
I’ve been working on a 3D model viewer for Perfect World client assets, built with Rust + Bevy.
The viewer reads assets directly from .pck archives, so there’s no need to unpack the client files first.
Video:
Current state
So far I’ve implemented parsers for most of the Angelica engine formats:
- PCK archives
- split archives (.pkx)
- zlib compression
- v2 / v3 support
- SKI meshes
- skinned meshes
- rigid meshes
- versions 8 / 9 / 100 / 101
- BON skeletons
- bone hierarchy
- bind poses
- STCK animations
- v1 segment-based animations
- v2 compressed animations
- quaternion NO_W handling
- SPHY collision
- OBB hit boxes
- capsule shapes
Parser is done, although the client files I checked seem to ship mostly empty SPHY data.
- ECM
- model container parsing
- DDS / TGA textures
- automatically resolved from the model directory
- GBK filename support
- Chinese filenames load correctly
Viewer features
At the viewer level, I currently have:
- virtual-scrolled model browser
Works fine even with 50,000+ entries - GPU skinning
Using Bevy’s SkinnedMesh - animation playback
- play / pause
- timeline scrubber
- Blender-style camera controls
- MMB orbit
- Shift + MMB pan
- mouse wheel zoom
- properties panel
- model info
- texture list
- sub-mesh info
- background PCK loading
Archives load in the background so the app window does not freeze on startup - CJK font support
Chinese model names display properly in the UI
Project structure
Everything related to loading/parsing is implemented as a reusable Bevy plugin crate:
bevy_pw_loader
The actual viewer is a separate tool built on top of that crate.
Planned next steps
- GLB / glTF export
- map / terrain viewer
If anyone here has worked with other Perfect World / Angelica engine formats, I’d be interested to compare notes.

