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