Here are some of my collected notes on things that I’ve found helpful when it comes to building avatars for VRChat.
The intention is that this will be a living document that I add to as I learn more.
Existing avatar bases
Really, the best way to get started with avatar creation is to purchase someone else’s base mesh and pick it apart to see how it all works.
Here’s a few base meshes that I’ve found particularly useful for these purposes:
Dom’s Wolfiiyan
Flufi and Sanobu by Zoidberg656
The Jinxed Kobold by dont_jinxit
There’s also a few free ones out there that you can use as a reference; Ghostt’s Morph is particularly interesting in terms of a lot of its design aspects and demonstrations of how to do some pretty intense things in VRChat.
And, of course, my own avatars might be helpful for someone.
Modeling
Most folks model using Blender. Blender is kind of hard to learn, and the UI changes enough over time that you often have to re-learn things. But it’s worth keeping up with, as it’s a quite powerful modeling package with a lot to offer!
Here are some tutorials I’ve found particularly helpful:
How to model a stylized female body by Astria
2D Drawing to 3D Model by Eve Sculpts
Blender Modelling for Absolute Beginners by PIXXO 3D
Do you really need to spend $500 on a Blender? by America’s Test Kitcheeeey waitaminute
A lot of guides on VRChat modeling in particular suggest using the Cats Blender Plugin, although it seems to always be a few Blender versions behind and I’ve never managed to get it working. With my particular modeling workflow, I’ve never found it to be all that necessary.
I tend to keep all of my avatar components within a single mesh object (which is way better for performance anyway) and use material slots to distinguish different parts. This means there’s no reason to bake a mesh down (since it’s already a single mesh to begin with), and for things like polygon decimation I use the built-in mesh decimator.
Decimation
One annoying thing about the built-in decimator is that, at least as of Blender 3.6.0, there’s no way to target a specific polygon count; it’s all based on ratio. My solution to this:
Right-click on the status bar and make sure “scene statistics” are enabled
Divide your target triangle count by the “tris” count in the status bar and round down to the thousands place (for example, if your scene shows 45.962 triangles and you want to get down to 20,000 triangles, your ratio would be \(\frac{20,000}{45,962} = 0.435\))
Use that value in the Mesh > Clean Up > Decimate Geometry popup for each of your meshes
This won’t get an exact count (for example, when I decimate my 30,620-triangle avatar with a ratio of 0.489 I end up with an output of 14973) but it’s Close Enough. Ideally Blender would let you target a count and/or provide more digits of precision, but it’s all just numbers, man.
Weight Painting
Doing your mesh bone weight painting is really annoying. However, one trick I’ve found that makes it a little easier is to go into Pose mode and then moving the skeleton around until something looks off with your mesh. Then go into weight painting mode, and the mesh will reflect your current weights relative to the pose, which makes it much easier to see how your painting/blending/blurring/etc. is fixing things as you go.
Maybe this is obvious to everyone else, but I think it’s neat.
Blend shapes/shape keys
Please, please, please make sure you’re on your Basis shape key if you’re trying to make a change for the mesh as a whole. I’ve lost track of all the times I’ve been doing some major edits to the mesh only to realize too late that I was on one of my visemes!
If you do end up doing this and the edits you were making were localized to specific body parts, you can usually fix this by selecting the affected polygons, and then going to Vertex > Propagate to shapes. But note that if these vertices are otherwise affected by some of your other shape keys, you’ll probably have to redo those shape keys!
Symmetry
Also please do yourself (and others who are editing your mesh) a favor, and make sure that your mesh’s symmetry is staying, well, symmetrical, wherever appropriate. It’s really annoying to try editing some aspect of a mesh (such as ear sizes, pawpad thickness, etc.) only to find that the mesh symmetry has been messed up.
One quick way to check to see where your mesh’s symmetry has fallen apart is to select all vertices and then mirror your selection (ctrl+shift+M by default) once or twice. Any vertices that are no longer selected are also not symmetrical.
Sometimes you can recover the symmetry by selecting the affected vertices and then Mesh > Snap to symmetry and fiddling with things until they work out, but often you’re going to have to redo some of your mesh topology.
And of course there are often parts of the mesh that you want to be asymmetric (such as hair or snaggly teeth or the like). That complicates things, of course.
A tiny rant about a tiny thing in Blender
I really wish the “triangulate faces” tool had a confirmation on it. There are so many times that I accidentally press ⌘T instead of ⌘R and don’t notice that all of my quads have been turned into tris until it’s too late (usually when I go to add another edge loop somewhere and I’m like WHY ISN’T THIS WORKING).
Sometimes you can recover from that with Face > Tris to quads but in my experience you have to be very careful with that as both operations are destructive and lossy.
FBX export
Another thing that Cats automates is the actual export of your model as an FBX. Here are the settings that I use:
Limit the export to “visible objects” (and make sure anything you don’t want to export, such as scale references, scene lights, etc. are disabled)
Under “Transform,” make sure “Scale” is 1.0 and “Apply Scalings” is set to “FBX Units Scale”
Under “Geometry,” make sure that “Apply modifiers” is disabled
There’s a little “operator presets” thing you can use to save your settings for easy recall. Unfortunately there doesn’t appear to be an easy way to import/export settings.
Subdivision modeling
When I’m working out an avatar’s proportions and general shape, I like to keep the mesh as a subdivision surface, using the subdivision modifier, and I wait until pretty much the last minute to apply the modifier permanently. This includes me setting up my basic blendshapes (or shape keys, as Blender calls them) while still in subdivision mode. However, there isn’t an easy built-in way to apply the subdivision modifier while preserving the shape keys.
Fortunately, there’s a very handy script which allows you to apply your subdivision modifier while preserving all shape keys. While I’m still working on the rough body shape I’ll save, then run that before doing my FBX export, export, then undo. Sometimes the mesh gets corrupted during the undo for some reason, which is why I save beforehand.
Texturing
First off, Blender’s built-in UV unwrapping is pretty okay, although it works a lot better if you remembre to add texture seams to your object so it can automatically split your islands.
It’s pretty abysmal at texture packing, though. I use UVPackmaster, which costs money ($44 at the time of this writing, although there’s often discounts available) but is well worth it.
A lot of people use Substance Painter for their texturing. I am personally not a fan of it for multiple reasons.
Fortunately, Blender has a Texture Paint mode built-in that’s sorta okay. Its UI is a lot better than Substance, anyway.
Unfortunately, it’s only sorta okay. It’s missing a lot of stuff that would make it truly stellar. Most notably it doesn’t seem to support any sort of “layers” concept, and only lets you modify one channel at a time. It’s good for roughing stuff out but not great for doing fine detail work.
In my texturing workflow, what I do is use Texture Paint mode to draw layer masks for different elements, and then import those masks into Krita as a “transparency mask.” Most of the texturing I do is in the form of large patches of solid colors, so that works out okay for me.
Another useful thing that’s easy to miss is “Quick Edit,” which captures a high-resolution screenshot of your model, sends it to your image editor of choice, then projects the resulting image back onto the texture. This is a really good way to tweak details where Blender’s own paint brush tools fall flat. Explaining it in text is a little tricky, so here’s a pretty good quick tutorial.
Shaders
This is where a lot of fun comes into VRChat. In general, there are two shaders you want to seriously consider using:
Poiyomi, an incredibly comprehensive collection of shader techniques in one big master shader that gives you incredible expressiveness (with both free versions and paid; I’ve only used the free version, personally)
Warren’s Fast Fur, perfect for a wide variety of soft surfaces. I own the paid version, but the free version is quite good too.
There’s a few other shader things to look at though:
Shader Forge, a visual shader authoring environment (similar to Unreal’s material graphs)
Normalized Crow’s Lava lamp, great for adding ambient energy to things and generally being Weird (although note that it’s very poorly-performing in general)
VRChat Goo Shader which is great for both being a gooey mess but also for having incredibly intense transformation animations between other materials
Almost all of the shader work I do is using Poiyomi. It’s incredibly versatile and pretty much everything I’ve wanted to implement a shader for myself is included in it.
For example, here’s a TV static material and its associated texture, which is all done using stock, free Poiyomi!
Fallback avatars
There’s a slightly confusing thing about what a “fallback” avatar is in VRChat. There are two things commonly referred to as a fallback:
You’re on desktop and you select an avatar that has a Quest version, and Quest users see that Quest version
You’re on desktop and you select an avatar that doesn’t have a Quest version, and Quest users see your global fallback
For the second one, most people just settle for one of the public fallbacks that VRChat provides, as setting a fallback requires being able to upload your own avatar and doing a bunch of extra work to make it a fallback in the first place.
In the first case (Quest version of PC avatar), it’s important to keep your various expression parameters in sync, and a good idea to try to keep your physbone counts the same with the order in sync. If your expression parameters fall out of sync, weird things happen, like your clothing or material setup will be vastly different for PC vs. Quest users, and if your physbones fall out of sync, then goofy stuff happens like a Quest user will tug on your ear and PC users will see your tail move instead.
In the second case, it’s much less important for things to stay synchronized; when people see your global fallback, they aren’t seeing any of your expression stuff from the avatar that you’re wearing. The global fallback will be scaled to more or less be the same size as your current avatar, and it’ll track your visemes and position and so on, but parameterized things will not synchronize between the two. And that’s a good thing!
Anyway. When creating a global fallback avatar, PolyTool makes the process a lot easier. It has builtins for converting your avatar over to a Quest fallback, including mesh decimation and material atlassing and so on. It’s not a one-and-done thing and there’s a few fussy things to worry about. At some point I might make a full tutorial on how to use it for those purposes, although there’s a brief explanation about how I have it set up in my critter avatar’s documentation files.
However, in general, I find that Polytool’s mesh decimator isn’t all that great, and I’ve had much better luck using Blender’s mesh decimation for producing the 15K and 10K polygon versions (for the Quest version and the global fallback, respectively). And this is also something the Cats Blender Plugin will theoretically help with.
On that note, a nice thing about how Unity’s FBX importer works is that you can do your avatar setup on your full-resolution mesh and then have the Quest versions inherit from the main mesh:
It’s a fairly small thing but it makes at least that thing slightly less obnoxious.
Useful libraries and Unity plugins
As I mentioned in my cross-platform material switching explanation, one of the most useful tools for managing VRChat avatars is VRCFury, which makes a lot of things a lot easier:
Managing animation layers, especially on cross-platform avatars
Adding attachment accessories with toggles
Simplifying menu management
and so much more
One of the things that VRCFury makes really easy is adding GoGo Loco, which gives you a whole bunch of useful stuff on your avatar:
Various sit and lie poses (especially helpful if you don’t have full-body tracking)
Avatar size adjustments (although VRChat are changing the way this works and this might be disappearing at some point)
Adding various flight options, including being able to carry other people while you fly
Thry’s avatar performance tools are really handy for keeping track of a bunch of stuff.
VRC Gesture Manager makes testing your avatar infinitely easier.
PumkinsAvatarTools are handy for a lot of initial setup and also correcting a bunch of common issues with your rig.
EasyQuestSwitch makes it easy to switch between Quest and PC builds, notably turning on and off different avatar instances depending on your current build target.
Random Q&A-type stuff
See also my material switching tutorial, which covers a lot of issues you might run into when uploading or with your uploaded avatar’s performance.
The VRC SDK control panel shows no errors with my avatar, but the “Build & Publish” button is grayed out!
That button unfortunately requires all avatars in the active scene to be in an error-free state, for some reason, not just the currently-selected one. If you have a broken avatar, or one that would be broken if it were uploaded to your current platform (e.g. a desktop avatar while you’re trying to build for mobile), you need to disable it before that button will turn active. EasyQuestSwitch helps with this.
comments
#VRChat
#avatars
#resources
#tutorials
(via busybee)
beesbuzz.biz