Tutorial
Heading

Upload avatars to VRChat cross-platform (PC and Oculus Quest)

We'll learn how to upload your own 3D character to VRChat to use as an avatar

The Mission

Uploading a character to VRChat for use as an avatar can be a bit challenging and messy, especially if you want it to be cross-platform. Here, we will learn how to accomplish this.

Resources

  • Unity latest stable version
  • Mixamo

Introduction

Before proceeding, it's important to determine if your character is compatible to serve as a Cross-Platform Avatar. Here are the optimization requirements for mobile devices:

  • The character's size should not exceed 5-8 MB.
  • It must have fewer than 5,000 triangles.
  • Limited to just 1 Skinned Mesh.
  • Each avatar should have 1 material, with a maximum of 2 when necessary.
  • Textures should be no larger than 1024x1024.

For additional details about the permissible and restricted features of your avatar, please refer to this website:

https://docs.vrchat.com/docs/quest-content-optimization

Prepare Unity to be able to upload avatars to VRChat

To upload your custom avatars to VRChat, ensure you have the following prerequisites in place:

  • A valid VRChat account (Note that custom character uploads are not supported through Steam accounts).
  • The latest stable version of Unity.
  • The VRChat SDK installed.

These elements are essential for the process of uploading your own avatars to the VRChat platform.

The requirements and instructions for setting up the SDK are explained in the following link:https://docs.vrchat.com/docs/setting-up-the-sdk

Based on my personal experience, the setup worked for me without installing the

Unity “Mitigation Tool”. Therefore, I don't recommend its installation. It's possible that this outcome is coincidental. To import the SDK, follow these steps:

Navigate to “Assets” > “Import Package” and choose the SDK from the designated folder.

Note: When importing the SDK, please be aware that its effects will be limited to the current Unity project. For each Unity project where you intend to upload content to VRChat, you'll need to perform the import process separately.

If this is your initial login using the SDK with your account, you'll need to wait until you gain the ability to upload content to VRChat.

Setting up the character in Unity

Once you've set up the Unity project with the SDK and have your rigged character ready, it's time to add it to a scene.

To import the FBX model, navigate to:  “Assets” > “Import New Asset”.

You can also import textures in the same manner, or you have the option of dragging them directly into the “Project” tab.

Setting up the character in Unity

After importing both the model and textures, proceed to drag the model into a new scene. You can create a new scene using any of the following methods:

  • Navigate to “File” > “New Scene”.
  • Right-click on the “Project” tab, then select “Create” > “Scene”.
  • Simply press Ctrl + N.

This will set up a new scene where you can work with your imported model.

Change the scale

To gain an understanding of your character's size in relation to the environment, follow these steps:

  • Go to “GameObject” > “3D Object” > “Cube”. This will place a 1x1x1 cube in the scene, allowing for a comparison with your character.

If you need to modify the character's scale, it's crucial to avoid making direct changes to the Transform component within the scene. This could result in unintended issues down the line. Instead:

  • In the “Project” tab, select your character.
  • In the “Inspector” tab, navigate to “Model” in the character's settings.
  • Adjust the Scale Factor value until you achieve the desired size.
  • Don't forget to click “Apply” to observe the changes reflected in the scene.

Character scale changing in Unity

Create a Material

To generate a new material within the “Project” Tab, perform the following steps:

  • Right-click and choose “Create” > “Material”.
  • Left-click on the newly created material.
  • The configuration settings for the material will appear in the “Inspector” Tab.

Left-click on the circle located between the square and "Albedo." This action will open a new window displaying all the textures within your project. From this window, select the desired texture for your model. Once this is done, proceed to drag the material from the “Project” tab and drop it onto the character model within the “Scene” tab. If everything is set up correctly, the model should now display the texture accurately.

Creating new material in Unity

An alternative method is to follow these steps:

  • In the “Project” tab, click on your character.
  • Go to the “Material” section.
  • Click on the circle within the list of materials.
  • Choose the material you previously created.

Alternative way of new material creation in Unity

Quick Tip: In this version of Unity, if you need to rename an item within the project (such as a material), you can simply press F2.

Add the VRC Component

Now, select the parent object of your character and direct your attention to the “Inspector” panel. Click on "Add Component," then search for "VR" and add the "VRC_Avatar_Descriptor."

Within this component, modify the "View Position" parameters to ensure alignment in front of the character. This will determine the position of the First Person Camera during gameplay with this character. In theory, this should be sufficient for uploading the character. However, for safety, let's perform a final check to identify any significant issues.

Access the VRChat SDK > “Show Build Panel Control”, which will display a compact window. Examine the messages located below the "Build & Publish" button to ensure there are no major problems.

Adding the VRC component in Unity

If you want to incorporate Visemes into your character to make its mouth move while you talk, I recommend checking out our Visemes Guide at:

https://www.polygonalmind.com/blog-posts/create-and-upload-a-vrchat-avatar-with-blend-shapes-visemes

TIP: In Unity 2018, remember to enable Legacy Blendshape Normals. Failure to do so could result in odd shading effects on your character's mouth when talking. Additionally, not enabling this feature might cause your upload to exceed 10 MB, potentially preventing you from successfully uploading your avatar.

Legacy Blendshape Normals enabling tab

Thanks to @franadaVRC for the tip.

Fix the Rig

Select your character in the “Project” Tab, then navigate to the “Rig” section. Change the “Animation Type” to Humanoid.

Fixing the rig in Unity

Go back to the VRChat tab.

VRChat tab in Unity

If you encounter this issue, follow these steps: Click on “Rig” > “Configure”. In the “UpperChest” box, select “None” and change the Chest bone to Spine2. Also, ensure that you have at least 3 fingers rigged: Thumb, Index, and Middle. This will enable Full IK and Tracking functionality later on.

Configurating rig in Unity

Fingers rigging in Unity

Build and publish character rigging in Unity

If there are no red errors, you should be in good shape. Now, proceed to click on “Build & Publish”. Keep in mind that the build process might take a while, varying based on your computer's performance and the complexity of the model you are uploading.

New Avatar creation last steps in Unity

This information should appear in the "Game" tab. Within this section, you can assign a name to the avatar, provide a description, specify if there are any content warnings, and determine whether it can be shared. It's crucial to verify that you possess the rights to the characters you are uploading. Uploading a character that you do not own the rights to could lead to potential legal issues in the future.

To alter the preview image, navigate to the Scene Tab and adjust the new VRCCam placement within the scene. Once you've completed these steps, click on Upload and patiently wait for the process to conclude.

Avatars
Unity
VRChat
Polygonal Mind
Creative Development 3D Studio

Since 2015 creating cool experiences, games and avatars on digital platforms

News
Transforming Icons: Bored Ape Yacht Club 3D Avatar Collection
Tutorial
How to import Decentraland SkyboxEditor into Unity
Tutorial
Doing a MANA transaction in a Decentraland scene