This was quite interesting format to dig into. Despite being built with 4.13 engine, it's using ubulk files for high-quality lods, while uasset contains only low-poly versions (affects only static meshes).
That's how layout of uasset looks like right before going into lods serialization (
image): lods count which should be loaded from external ubulk, total lods count (including those from uasset itself), then headers for external lods (flags, sizes and stuff), then header for current internal lod (constant and sizes) -> then we have sections for current internal lod and buffers for serialization, they're all standard for that engine version. In the meantime, ubulk layout (
image) also contains sections and buffers for serialization, also all standard.
The problem is that umodel was not designed for such approach - apparently, ubulk is supposed to be used only in 4.23+ games, while sections are supposed to be stored in uasset and ubulk should contain only raw buffers for serializations. I've managed to create stable solution only for internal lods, with materials and everything, since you only need to skip that headers part, but it's not very useful, except for materials (see
first screenshot). And for testing purposes I've also managed to load version from ubulk by manually replacing corresponding ubulk data into uasset (see
second screenshot). It's less interesting to dig into "low level" bulk serialization functions, but eventually it may work... probably.
Mesh, used in the example:
link