Section 2: Textures
Every Avatar has a Texture that is used to present how it looks in it's final form. Without Textures, we'd be seeing flat-colored Objects. That would be so weird to see!
There are different types of Textures used on a Model. I will be going over the different types of Textures and how it affects your Avatar on a global scale.
2.1 - Image Format
Unity supports a wide range of Texture formats. When you upload your Avatar, they are re-encoded by Unity for use in-game at runtime.
It is recommended to keep your Textures in a lossless format so that the details are better preserved over the long term. The most common file format to use is PNG as it supports up to 16-bit Depth.
Of course, you are allowed to use other formats for your Textures if you so wish to. However, you must keep in mind of their properties as different formats can greatly affect it's lifetime in terms of quality and compression. Here are the following image formats that Unity supports:
- PNG (Recommended)
Never use JPG/JPEG for textures! JPG is a lossy format, meaning that your source files are never kept at full quality. Use lossless formats like PNG, TGA, or PSD instead.
2.2 - Texture Resolution
Your texture resolution is the number of pixels in each direction. It is recommended that your Textures are Square and have dimensions that are a power of two - 256, 512, 1024, 2048, or 4096. Unity works best when textures are powers of two, especially when resizing textures.
Always use a power-of-two resolution! The most common power-of-two resolutions are 256, 512, 1024, 2048 and 4096.
If your Texture is set nowhere around a power-of-two, it can cause more blurry results when resizing to a power-of-two resolution.
2.3 - Your Textures and it's VRAM Consumption
One of the most misunderstood areas around using Textures on your Avatars is how much VRAM it can consume on your Graphics Card.
VRAM (Video Random Access Memory) usage is the amount of memory that will be used by a texture when it is loaded. All assets used by the GPU must be loaded into VRAM before they can be used, and there's only a limited amount of VRAM available on a single Graphics Card.
When the GPU runs out of VRAM, it will start to move textures into system memory, which causes latency and slows down the game. If you ever wondered "why is VRChat so damn laggy?" It's because of this exactly. Someone could be using an Avatar in your instance that is consuming a ridiculous amount of VRAM on your GPU! Whether it's intentional or not, it's always their fault that your game is running slow.
VRChat refers to it as "Texture Memory" as of the UI 2.0 Update, released in October 2022.
2.3.1 - Recommended Texture Sizes
Textures are the largest contributors to VRAM usage. Reducing the size and amount of textures will reduce VRAM usage and make your avatar more performant.
It is recommended that you keep your Textures anywhere around 2048 at best. If you prefer using 4096 resolution, use it wisely! Only use 4096 Textures in areas where you think you absolutely need it. If you use an anthropomorphic Avatar like a Nardoragon or a Rexouium, for example, it may be beneficial to prioritize it's Body texture to use 4096.
Avoid using Textures that are 8192 resolution! These Textures will consume the highest amount of VRAM on both yourself and everyone else showing your Avatar! So please avoid using 8192 Textures!
2.3.2 - Compression
By default, Unity will use Normal Quality on Textures imported. This means the details on your lossless Texture will be preserved well enough to be satisfactory. Sticking with Normal Quality is the most common setting used on Avatars.
This can of course be changed. You can either set it to Low Quality or High Quality. Both of which will have different results in terms of how the Texture will be rendered at runtime.
Be extremely careful if you choose to use High Quality or No Compression at all! While doing this can make your Textures look 1:1 with how it was originally, it will dramatically increase the Download Size of your Avatar and possibly your VRAM consumption!
Next to this is Crunch Compression. This is an algorithm that will (metaphorically speaking), squeeze your Textures down to a smaller size. The disadvantage of this is that you may see some loss of color in areas that have significant gradients, as well as introduced noise.
Crunch Compression your textures is in no way mandatory, however, it can greatly reduce the Download Size of your Avatar! This is especially helpful to users who have weaker internet. Be careful with doing this with high-res textures as they will be uncompressed at runtime when the Avatar is loaded for the user, causing a noticeable frame drop.
Crunch Compression does NOT help reduce VRAM! This is a common misconception so let's get this straight: Textures that are Crunch Compressed WILL get uncompressed at runtime once the Avatar is fully loaded for the user. The VRAM consumption will always remain the same as the resolution that the Avatar is set to!
SO DO NOT THINK that Crunch Compression will help your VRAM consumption, because it will never!
2.3.3 - Normal Maps
While the Main Texture you use will be the most frequent item you will choose, there are also other types of Textures that serve different purposes.
One of which is Normal Maps. These pink-like Textures are unique in their own way. With the right shading, Normal Maps can create an illusion that the Texture has a more detailed, physical appearance. Avatar Creators use Normal Maps to get away with expressing very nice details without having to sacrifice Polygons in order to get the intended look. Normal Maps are most commonly used on PBR-based Shaders since those Shaders are made to bring out more realistic detail.
Be careful with the resolution of your Normal Maps! Compared to a normal Albedo texture, Normal Maps can greatly contribute to higher VRAM consumption and file size, much more so than normal Textures!