vExpo is a mobile project made in Unity where clients can upload content they have created to a server and have other viewers walk around their exhibition to show off their work. On this project, I have modeled, textured, and optimized a number of booths as well as implemented and decorated the viewer content for all of the booths.
Project Status
Shipped: iOS/Android
Role
Level & Game Designer, Artist
Software
Unity, Maya, Simplygon, Photoshop
vExpo
There are total of 138 generic booths and 34 VIP booths in this project. I was responsible for modeling and optimizing all of the VIP booths for mobile devices and populating all booths with content submitted by clients. I also set up the booth settings for player fast travel and NPC interactions in the Unity editor.
Contribution
The VIP booths are purchased from various external sources, after which I would reduce the poly count, texture size and draw calls so that they were optimized enough to run on mobile. An example high poly booth could be somewhere around ~80k polys, above 10 materials and multiple textures per booth. In an optimized booth I would reduce the model to ~5k polys with 2 materials and one 1024px texture.
Workflow
BOOTH B
BOOTH A
Lightmap texel density
Controlled seams during light baking
consistent shadow detail with minimal artifacts
RGBA packed textures
Packing roughness, metalness and alpha masks in one texture sheet (masks allow emissives to come through as well but those require an additional mask texture)
allows for individual control of each property with minimal impact to performance
Custom collision mesh
The custom collision is more optimized.
Allows the player to move more freely around the booth.
Adjustable incase a space is too tight to move through.
Small UV shells
Small shells allow me to group surfaces with similar properties and fit them in one texture sheet.
Small shells allow for for other more detailed textures to be visible, the extra shell space allows for each booth to have a unique identifier such as a wooden floor or a patterned surface.
Learning Outcomes
On this project I learned about optimization for mobile using Unity
packing texture data in the RGBA channels
creating different texture sets for visuals and lightmaps
creating custom collisions
These are some easy techniques to squeeze a lot of performance out of your project while keeping file size low.
Substance Painter to bake a depth mask in to imprint a high level of patterned detail onto a flat plane
Photoshop to pack textures and details into separate channels
Maya and Simplygon to Optimize meshes
Unity LODs and Imposters to optimize distant meshes