PW (maybe angelica) Models viewer [WIP, showcase]

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.
 
I'm also currently working on a mini editor for the Angelica engine
 
I'm also currently working on a mini editor for the Angelica engine
I decided not to go this way cuz it would be easier to implement .glb import & export and leave those who want to edit models with ability to use blender

Update:
Tweaked the UI, added .glb export

TODO:
1. add .glb import
2. make project related structure
3. release on github

 
Last edited:
I'll be looking forward to the GitHub repository. I'll definitely give it a star 👍
 
Back