When Lloyd Bannings is assigned to Crossbell's Special Support Section, he and his new teammates must prove themselves as they fight to overcome the injustice of a city gripped by corruption.
Hi everyone!
As I mentioned in [url=https://store.steampowered.com/news/app/1668510/view/3361388019335519328]the first part of the series[/url] — be sure to check it out if you haven't done so yet — I originally intended for this to be the usual one-off behind the scenes blog post I do for our releases, but the sheer amount of changes and improvements in Zero made that infeasible, So here is the second part in the series, this time focusing on game assets, and more specifically on sprites, UI textures, map textures, and even the maps themselves.
In the first post I noted that to fully understand this version, it's helpful to know the history of Trails from Zero's releases. You can find the same summary of this history here again as a refresher:
[expand]The game was originally released for PSP by Falcom, with a Chinese PC release licensed to the company Joyoland following soon after. This release was eventually used as the basis for a fan translation by the "Geofront" team.
Independently, Falcom much later on developed a Playstation 4 version of the game known as "Kai", which serves as the basis for our version. That version did not include everything that was in the Joyoland version, or that was eventually added by the Geofront modders, so it fell to us to adopt or sometimes recreate these contents.
I'll refer to all of these versions as "PSP", "Joyoland", "Geofront" and "Kai" respectively.[/expand]
[h1]Character Sprites[/h1]
The Crossbell games are the final series by Falcom to use the 2D-sprites-on-3D-maps look which was a hallmark of the Trails in the Sky series, and is also featured in some beloved Ys titles. Since they make up such a significant part of the overall presentation, the quality of the sprites is a fundamental aspect of the look of the game, and we wanted to make sure that we go for the best possible option here.
The sprites for PSP were by necessity rather low resolution, and the Kai version uses upsampled variants of these lower-resolution sprites. Joyoland and by extension the Geofront release have higher-resolution versions, but these are limited to an 8 bit color palette and therefore frequently show some dithering artifacts.
[img]{STEAM_CLAN_IMAGE}/40784458/a4d70d4042b505c618b37195a9e4fb4f2a629899.png[/img]
For our release, we chose to start from the higher-resolution Joyoland sprites, and de-dither them using a neural network trained for this purpose. Special thanks to our beta tester UltraSun for investigating this!
The results are clean, high-resolution sprites with full colors and no dithering artifacts, as you can see in the comparison above. These sprites are shown at 200% size (400% for PSP), which makes both the dithering artifacts in the Joyoland version as well as the relative loss of detail and some small distortions in the upsampled version quite visible.
[img]{STEAM_CLAN_IMAGE}/40784458/29db5fdcdcd160bc1609280be924a06e1a0d349d.png[/img]
One thing you might also have spotted is that the color saturation and brightness is slightly different between the Joyoland (and thus our) version and the PSP version (and thus its Kai upscale). This would of course be relatively easy to adjust by simply editing the assets, but in our internal testing we had diverging opinions on which one actually manifests the original artistic intent, and which one we prefer. As such, we decided not to decide and let everyone choose, by adding a "character glow" graphics option.
[h1]UI Textures[/h1]
In this category, I include not just the basic UI textures, such as icons or window decorations, but also everything which is shown in 2D and not a sprite. That means, for example, character portraits or still shots used in in-game material or cutscenes.
[img]{STEAM_CLAN_IMAGE}/40784458/a6172b64c93cdf12da93fe7140ac91e0588a5685.png[/img]
For UI textures, compared to sprites and map textures, the work we did is perhaps most diverse. It includes, of course, finding the best existing source for each type of texture, but also other options such as re-taking screenshots used for still images, or even entirely re-drawing specific types of UI textures, such as the compass you see above.
[h1]Map Textures[/h1]
In addition to character sprites, map textures make up the other most essential part of the presentation of the Crossbell games. There are 2586 unique map textures in Trails from Zero, and whatever approach we took had to be consistently applied to all of them,
The existing situation was that PSP textures were of course very low-resolution. Kai used a generic upsampling solution on these with varying success, while the Joyoland version used a mixture of original and fully redrawn textures. The latter are always higher resolution and have a higher fidelity than the PSP textures, but they also sometimes lose a bit of the original visual identity.
The nature of these textures — with highly distinct characteristics, from basic surfaces to complex composites of e.g. signage and foliage — and the fact that the best source can vary per-object makes any fully-automatic approach vary wildly in quality. At the same time, the amount of unique textures in the game does not allow for any fully manual improvement scheme to be applied consistently.
[img]{STEAM_CLAN_IMAGE}/40784458/2974a53c852b2dbca13bb26678704c12a3a5e891.png[/img]
In order to resolve this dilemma, we created a rather complicated pipeline of tools to extract and manipulate (e.g. with AI upscaling) the textures from each existing game release, all feeding into the custom tool we created for the manual part of the process — the unimaginatively named "PH3 ImageTool" — which you see depicted above.
[img]{STEAM_CLAN_IMAGE}/40784458/99e9650b99f1691c616c44c4bb980dd539d8e19c.png[/img]
This tool allows the user to quickly navigate and visualize many different versions of textures, and to select individual regions in order to compose a final version. This version can then be previewed in various transparency and tiling scenarios, and individual regions can also be marked for redrawing. Of course, this still involves a lot of manual work when going through every single texture, and we'd like to thank NISA and specifically Thomas for making this possible.
[url={STEAM_CLAN_IMAGE}/40784458/aa997c95c5b554925a026a8f2c3981954f91ceb0.jpg][img]{STEAM_CLAN_IMAGE}/40784458/78a91deae9b87503836def1cba1bb24495a911cd.jpg[/img][/url] [url={STEAM_CLAN_IMAGE}/40784458/4790af620621af7d3d38cfbaebc411c94d6ac65a.jpg][img]{STEAM_CLAN_IMAGE}/40784458/c5fea1096b8d0c21350148db1630ef497fd79b42.jpg[/img][/url] | [url={STEAM_CLAN_IMAGE}/40784458/d4b77cd16188abb2f4f3877a1a9ca5fc834610f9.jpg][img]{STEAM_CLAN_IMAGE}/40784458/d953271dcc2ffcc210ef971c8c98d25c4879f60a.jpg[/img][/url] [url={STEAM_CLAN_IMAGE}/40784458/d01e100007c13ec2499b73575b1df0f3c428ea8f.jpg][img]{STEAM_CLAN_IMAGE}/40784458/ffd0fc39fbfdcb3e982aca89346d6ffb357ad0e9.jpg[/img][/url]
Above you can see a comparison of the previous and new textures in two different areas of the game, and here is a full-size screenshot of another area:
[img]{STEAM_CLAN_IMAGE}/40784458/9a4954bf8b9452d20bbf9de9561050b1b66a8a6f.png[/img]
Not bad for a game originally developed for PSP, if you ask me.
[h1]3D Assets[/h1]
All the other work I talked about today was ultimately on 2D images. However, there were some issues we had to address which required editing 3D assets. One of them I already touched on in the previous part of this series — extending geometry beyond what is visible in a 16:9 viewport — but there are also some other use cases. One example are sporadic problems with map vertex colors that caused various small graphical anomalies. Another are offsets and holes in geometry that are often negligible at PSP resolution, but become more visible on modern platforms.
A challenge in this aspect was that we had no access to the original 3D model data, meaning that we could also not use any standard tooling. Therefore, we ended up building our own tools for exporting and importing geometry data to and from the native game file format and Blender. Luckily, we are only talking about static model data with basic vertex attributes here, which is relatively easy to deal with.
[img]{STEAM_CLAN_IMAGE}/40784458/bfdfc9801e348c4d6055cfe5900f377ecfabb154.png[/img]
In the screenshot above, you can see a pool table being edited due to a stray vertex color. Much of this editing work was performed by Geheimen, one of our intrepid QA testers. There are a surprisingly large number of these small geometry changes throughout the game, so if you spot a tiny model detail that was fixed compared to other releases, you know who to thank.
[h1]Conclusion[/h1]
Once again, I salute you if you actually made it through this entire post!
In the third and final part I'll cover some platform features that didn't make it so far, perhaps some bug fixes, and even — surprisingly — optimization.
There will also be one pretty significant [b]surprise feature[/b] which we only implemented after receiving feedback from the previous post in this series, so look forward to that!
Until next time,
Peter "Durante" Thoman, CTO, PH3