Skip to content

How to rip | Recovering a Project

FACS01-01 edited this page Sep 12, 2024 · 9 revisions

I want to explain a little how to correctly use FACS Utilities, in combination with other programs, to recover the assets of your lost Unity project. This will be aimed at recovering avatars and worlds uploaded to VRChat.

What is "ripping"?

First, I want to make a distinction between Ripping and other means or techniques for recovering avatars and worlds in VRChat.

Ripping refers to the process of extracting and recovering the original assets (or as close to the originals as possible) from a single Avatar Bundle (VRCA) or World Bundle (VRCW).

Ripping is not the same as Reuploading or Hotswapping. In those other methods, the Avatar/World file is modified slightly so that it can be uploaded "as is" to VRChat, without getting any assets, without being able to create a Unity Project or edit what you are about to upload.

Use the right word for the right situation, please.

Also, by its basic definition, Ripping is not "stealing". If you rip your own content, you're not "stealing from youself". If you [rip | reupload | hotswap] someone else's content, then you are "stealing". Many creators claim that their content is being "ripped" by others, although in most instances, its simply being "reuploaded".

What are Asset Bundles?

When you upload an avatar or world to VRChat, what Unity does is taking all required assets, optimizing them, and putting them in an Asset Bundle, then this Bundle is uploaded to the VRChat servers. An Asset Bundle is basically a container file for the compressed and optimized assets.

You can learn more about Asset Bundles here.

VRChat renames their Asset Bundles with different file extensions depending if you are creating an avatar or a world:

  • Bundle containing an Avatar: .VRCA
  • Bundle containing a World: .VRCW

So to be clear, what we will be doing is ripping the content of Asset Bundles, or Bundles in short. This methodology can be applied to other Unity games as well.

AssetRipper

AssetRipper is a program for extracting assets from Unity serialized files and Unity Asset Bundles, and converting them into Unity Editor format.

The process of converting internal Bundle assets to Unity Editor assets is very complex, but even so this program does a great job. Though its not guaranteed to get a perfect Project out of a rip, without having to do some manual fixing.

VRChat's avatars and worlds are not too complicated to rip for this program, but there are still bugs and limitations that you may encounter, for example Shaders not being 100% usable.

If you know what you're doing and want to report a bug to AssetRipper, you must refer to your files as Asset Bundles, not VRCA/VRCW files.

AssetRipper doesn't support theft of content from other creators, especially on VRChat, so please report bugs only from content you own.

Steps

  1. Get your Bundle file, from your VRChat Cache or from any other means.

  2. Using AssetRipper, select your Bundle file and Export All Files. Select a new/empty folder for the export destination; AssetRipper will delete all files from the folder if it wasn't empty.

  3. Navigate to the destination folder, then go into the "ExportedProject" folder, and you will find the ripped "Assets" folder. That folder and its content are the only relevant files from the rip, all other folders can be deleted. You can rename the ripped "Assets" folder to whatever you want.

  4. Inside "Assets" you will find the folders "Scripts" and "Shader". Rename them to ".Scripts" and ".Shader", to hide them from Unity file system and avoid script compilation errors, and for later using Easy Shader Reassign and Fix Scripts.

    * (The program A.R.C can help you with all previous steps)

  5. Create a new Unity Project, or reuse an existing one, with the VRChat SDK already installed (plus any other required scripts).

  6. Look into the ".Shader" folder to know what shaders the Bundle used, and try to find and import the same ones from their original sources.

  7. Import (drag and drop) the ripped "Assets" folder into the Project's Assets folder. If, for example, you choose to rename the ripped "Assets" folder to "My Rip", you should end up with a folder path like "/Assets/My Rip/".

  8. Use Easy Shader Reassign to reassign the missing shaders on the ripped Materials to the original ones. When you are done, you can delete the ".Shader" folder from the Project (Unity won't show this hidden folder, so you'll have to use a File Explorer).

  9. Use Fix Scripts on Automatic Mode, and select the ripped "Assets" folder as Target Folder.

    1. If all scripts were correctly fixed, skip steps 10 and 11.
    2. If some scripts weren't fixed, try find and import their original Packages, and run Fix Scripts again.
  10. Use Remove Missing Scripts to remove broken scripts (MonoBehaviours) from GameObjects.

    1. If fixing an Avatar, use it on the avatar's Prefab.
    2. If fixing a World, use it on every root GameObject from the world's Scene.
  11. If you lost a Component (the things attached to GameObjects), or somehow it wasn't correctly ripped, you can use Copy Components to copy it from the Bundle.

    1. The Bundle can be loaded into the Editor using FACS Load Bundle.
    2. Copy Components can copy all "numeric" and "text" properties in a Component, but it can't copy asset references (like Materials, Meshes, Textures, etc), because assets from Bundle don't really exist in your Project, and as soon as the Bundle is unloaded those asset references would get lost.
      • An exception to this are Unity Default Resources.
  12. Use Fix Animations to repair ripped Animation Clips.

    1. If the project uses assets with "optimization/trimming" features (like Poiyomi Shaders), activate those optimizations before running Fix Animations.