Create a Pixel-Style VRChat Avatar in Unity

A simple pixel-style avatar can be assembled from Unity Quad meshes and image textures without modelling a custom mesh in Blender. This produces a flat card-style avatar rather than a humanoid rig, so plan the viewpoint, visibility angles, animation features, and Android material separately.

Recommended setup

Use a low-resolution image on a Unity Quad, keep the avatar hierarchy simple, and test an opaque version before adding PC-only transparency.

  1. Import the artwork as a texture with Point filtering.
  2. Apply it to a material on a Unity Quad.
  3. Place the Quad under an avatar root with an Animator and Avatar Descriptor.
  4. Set the viewpoint and validate the hierarchy.
  5. Build separate PC and Android material variants when transparency differs.
Use a mesh, not SpriteRenderer

VRChat's current allowed-avatar component list includes MeshRenderer but does not list SpriteRenderer. Put the artwork on a Quad or another allowed mesh instead of relying on a SpriteRenderer component.

Choose the Avatar Structure

There are two supported levels of complexity.

Structure What it provides Limitation
Static Unity hierarchy A simple avatar made from Quads and other allowed components Does not provide the full Generic Avatar 3.0 feature path
Imported Generic rig Base, Action, and FX playable layers plus supported Avatar 3.0 systems Requires a properly imported Generic FBX and avatar object

VRChat documents a simple static-object path for avatars that do not need the complete Generic Avatar 3.0 feature set. Add an Animator Controller directly to the avatar root's Animator and leave its Avatar field blank. Expression Parameters and State Behaviours are among the features that require the proper Generic import path.

For a full Generic avatar, import an FBX as Generic, assign the generated avatar object to the root Animator's Avatar field, leave the root Animator Controller blank, and use the Base, Action, and FX playable-layer slots on the Avatar Descriptor.

This guide uses the simpler static hierarchy so the visible avatar can be assembled entirely in Unity.

Prepare the Pixel Artwork

Create a PNG with the final pixel dimensions and a deliberate canvas shape.

  • Use an opaque background for the most portable version.
  • Keep transparent pixels only for the PC cutout version.
  • Leave enough empty space above the character for the viewpoint if the face is close to the top edge.
  • Use one image when the avatar is a single card, or a small atlas when several appearance frames share one material.
  • Keep the artwork modest in resolution; scaling the Quad changes its world size without requiring a large source image.

Power-of-two dimensions such as 64, 128, 256, or 512 pixels are straightforward for texture import and compression. Unity supports other dimensions, but notes that non-power-of-two textures can consume more memory and sample less efficiently.

Import a Crisp Pixel Texture

Copy the image into the Unity project's Assets folder, select it, and configure the Texture Import Settings.

Setting Value to test first
Texture Type Default when the image is used by a mesh material
sRGB Enabled for ordinary colour artwork
Alpha Source Input Texture Alpha when the PC material uses transparency
Alpha Is Transparency Enable when transparent edge colours need correction
Filter Mode Point (no filter) for hard pixel edges
Wrap Mode Clamp for a single non-tiling card
Max Size The smallest value that preserves the source image
Read/Write Disabled unless a supported runtime system requires pixel access

Unity describes Point filtering as the mode that keeps pixels blocky when viewed close up. If the avatar shimmers badly at a distance, compare mipmap settings on the target headset instead of increasing the source resolution immediately.

Build the Card Mesh

  1. Create an empty GameObject at the scene origin and name it for the avatar.
  2. Reset its position and rotation, and keep its scale at 1, 1, 1.
  3. Choose GameObject > 3D Object > Quad.
  4. Make the Quad a child of the avatar root.
  5. Rotate it so the artwork faces the avatar's intended forward direction.
  6. Scale the Quad to the desired height while preserving the image's aspect ratio.
  7. Create a material and assign the imported image to its main texture slot.
  8. Assign the material to the Quad's MeshRenderer.

The Quad already contains a MeshFilter and MeshRenderer, both of which are allowed on VRChat avatars.

Make the Avatar Visible from Useful Angles

A single Quad is visible mainly from the direction its rendered face points. Select a construction based on the intended look:

Layout Result Cost
One Quad Clean front-facing card Can disappear or become extremely thin from other angles
Front and back Quads Artwork is visible from two opposite directions Adds another renderer unless combined
Two crossed Quads A recognisable silhouette from more directions Repeats the image at intersecting angles
Shallow box of Quads A deliberate cardboard or pixel-diorama look More geometry and material slots

Do not add a custom billboard script to force the card toward every viewer. Custom scripts are not allowed on avatars. A supported shader may provide a facing effect, but that behaviour must be documented by the shader and tested under VRChat's shader fallback rules.

Create the PC Material

For a rectangular opaque card, use an avatar-compatible opaque shader and keep the full image background.

For a cutout silhouette on PC:

  1. Use a shader that explicitly supports alpha cutout on avatars.
  2. Assign the PNG and set its cutout threshold so intended pixels remain visible.
  3. Prefer cutout over soft alpha blending when the artwork has hard pixel edges.
  4. Check the shader's fallback tags so safety fallbacks still resemble the avatar.

Transparency increases rendering cost and can sort incorrectly where multiple cards overlap. Keep transparent layers and overlapping Quads to a minimum.

Create the Android Material

VRChat only permits the mobile shaders included with the SDK on Android avatars. The current Toon Standard shader supports configurable backface culling and works across PC, Android, and iOS, but it does not support transparency.

For a reliable Android version:

  1. Put the pixel character on an opaque rectangular background.
  2. Use an allowed shader under VRChat/Mobile, such as Toon Standard or Toon Lit, according to the required lighting style.
  3. Enable GPU Instancing on the material.
  4. Keep the texture small and compressed with an Android platform override.
  5. Avoid outlines when the Android version uses Toon Standard; the outline variant is PC-only.

VRChat recommends designing around transparency on mobile because alpha fill rate is expensive. If the silhouette requires transparent pixels, publish a simplified opaque Android representation rather than assuming the PC material will survive platform conversion.

Add the Avatar Components

On the avatar root:

  1. Add an Animator component.
  2. For the simple static-object path, assign an Animator Controller and leave the Animator's Avatar field blank.
  3. Add a VRC Avatar Descriptor.
  4. Move the Descriptor's viewpoint to the character's eye or face position.
  5. Disable or leave unconfigured eye-look and lip-sync features the card does not implement.
  6. Keep all visible Quads and materials under this one avatar root.

The viewpoint controls where the user's view originates. Test it at avatar scale rather than placing it from the Scene camera alone.

Add Simple Animation

The static-object route can use its root Animator Controller for straightforward Unity animation states. Useful pixel-style effects include:

  • swapping the material texture or texture offset for an appearance frame;
  • toggling child Quads for alternate faces;
  • scaling a small child element for a pulse; or
  • rotating a separate card element around a fixed pivot.

Keep the controller recoverable and avoid adding extra Animator components. VRChat's performance system counts Animators, renderers, material slots, texture memory, and bones when assigning an avatar rank.

If the avatar needs Expression Parameters, State Behaviours, or the Generic playable-layer system, move to a properly imported Generic FBX rather than extending the simplified static hierarchy beyond its documented feature path.

Original Video Companion

The original Akalink video demonstrates a Unity-only sprite avatar concept. Use it for the visual idea, then follow the current component, shader, and platform guidance above when rebuilding the avatar.

Test and Upload

  1. Check the avatar at front, side, back, above, and below viewing angles.
  2. Confirm the viewpoint stays inside the intended head or face region.
  3. Test the card under bright, dark, and coloured world lighting.
  4. Check mirrors and the personal camera for missing backfaces or sorting problems.
  5. Review texture memory, material slots, mesh renderers, bounds, and Animators in the SDK statistics.
  6. Use Build & Test before publishing the PC avatar.
  7. Switch to Android, apply the opaque mobile material, and use Android Build & Test on a supported device.
  8. Confirm both platform versions use the same avatar ID when publishing a cross-platform avatar.
The pixel artwork looks blurry in Unity.

Set the texture's Filter Mode to Point, check that Max Size is not scaling it below the source dimensions, and Apply the import changes. Also verify the material is not using a separate blurred texture.

A coloured fringe appears around transparent pixels.

Enable Alpha Is Transparency on the texture and inspect the source PNG's edge colours. Then retest the material's cutout threshold rather than switching immediately to soft alpha blending.

The avatar disappears when viewed from behind.

The material is probably culling backfaces. Use a shader with documented double-sided support or add a second Quad facing backward, then check the renderer and material cost.

The Quad is visible in Unity but missing after upload.

Confirm the Quad is under the Avatar Descriptor root, its MeshRenderer is enabled, and its shader is permitted on the target platform. Resolve SDK validation errors before rebuilding.

The Android version has a solid rectangle around the character.

The current mobile Toon Standard shader is opaque. Design an intentional background for Android or use geometry to shape the silhouette; do not assume the transparent PC material is supported.

The view starts outside the character.

Move the Avatar Descriptor viewpoint to the intended face position while judging the avatar at its actual scale. Use Build & Test to confirm the first-person view rather than relying only on the Scene gizmo.

Expression Parameters do not work on the simple hierarchy.

VRChat documents the static-object hierarchy as a limited path. Import a proper Generic FBX, assign its generated avatar object to the root Animator, and use the Generic Base, Action, and FX playable layers for the complete supported feature path.

Official References

Related Guides

Topics: pixel avatars, Unity Quads, avatar textures, Generic avatars, Android compatibility