Skip to content

Latest commit

 

History

History
1430 lines (870 loc) · 40.5 KB

README.md

File metadata and controls

1430 lines (870 loc) · 40.5 KB

Carbon Copy

GitHub stars GitHub Tags GitHub release (latest by date including pre-releases) GitHub issues GitHub last commit Discord

By Dreadrith and JustSleightly

CC Showcase Mirror-Multi gif

Carbon Copy is a feature-rich constraint-based clone system built for VRChat users and designed with performers in mind. Its features are entirely customizable and modular while optimizing parameter memory, and can be installed with one-click without any VRChat 3.0 or advanced Unity experience whatsoever.

With the earliest prototypes/teasers of the system dating back to 2020, we've spent many years polishing these features for you...

Available now on gumroad

Features

Specifications Stats
Memory 9 - 22
Icons 38
FX Layers 30
Animation Clips 106

System Features

  • Drag and drop setup - works with any humanoid avatar
  • Supports 2 clone suites - Mimic and Mirror
  • Dynamically lock and unlock the offset (without reset) of your Mimic clone with real body movement using the Confirm feature
  • Supports 3 different Mirror clone modes - Standard, Radial, and Vertical
  • Independently control the visibility of yourself or your clone with Invis and Hide
  • Instantaneously swap visibility from yourself to your clone with Swap
  • Freeze your clone or drop a frozen clone in place
  • Control where your clone appears before it's visible with Anchor
  • Pick up, grab, or bind your clone to different parts of your body
  • Pass your clone like a spring-joint ball between your hands or orbiting around your body
  • Supports custom bind targets, such as other bones, props, or even full compatibility with other systems like this one
  • Intentionally lag your clone by dropping its simulated FPS as a bonus effect
  • Scale your clone up or down to whatever % you configure
  • Control whether your clone follows your movement proportionally or not on the Y axis or XZ plane
  • Quick toggle between scaled and unscaled clones
  • On-screen toggleable HUD icons indicating what features are active without looking down or opening your menu
  • Toggleable Gesture Control for Gesture-Hold based activation of the core clone features
  • Toggleable Jutsu Control for Gesture-Combo-Toggle based activation of the core clone features
  • Toggle whether PhysBones Invert while in Mirror Vertical mode
  • Automatically shrinks the clone's head when near your own during swap locally

Tool Features

  • Supports running the script multiple times for multiple clones on the same avatar automatically
  • Can replicate your lip-sync visemes to your clone
  • Can automatically copy all animations to your clone without using more layers (supports blendtrees and sub-state-machines)
  • Can automatically remove certain component types from the clone
  • Automatic Write Defaults detection and compatibility with both on/off
  • Automatically disable facial expressions while using gesture/jutsu control
  • Automatically adds descriptor colliders and senders to the clone and includes them in PhysBones with Allow Collision
  • Automatically optimizes your parameter memory saving up to 20 memory other systems would use. Up to 28/29 (96%) of the menu options fit within 8 memory!
  • System can be removed with one-click removal

Showcase

Full Demo GIF

CC Full Window Demo gif


Requirements

  1. Basic Unity experience + VRChat SDK3 uploading experience.
  2. A validated license key for first time activation.
    1. License keys can be purchased from the store.
  3. An active internet connection while in Unity in order to use the tool - cannot be used offline.
  4. Only compatible with Unity for Windows - not compatible with Unity for Mac/Linux at this time. Windows 11 is now compatible.
  5. Pre-requisite import - VRChat Creator Companion SDK version 3.1.13 or newer.

Installation

Unity Installation Videos

Using the Editor Window

Carbon Copy can be accessed from the top toolbar by clicking DreadTools > Carbon Copy.

If you have never used this on this PC before, you will see a field labeled Enter your license key. Input your license key from your purchase and click activate. This is a one-time-use key that will authorize the current PC for future use of Carbon Copy.

If your license key is not working due to it already being in use, click the Transfer License option.

CC Thank You png

After first time successful validation, you will have the opportunity to choose between Guided Mode or Advanced Mode.

Guided Mode

CC Guided png

Follow the instructions on the installer window to proceed with installing Carbon Copy with its default configuration. If you'd like to further customize the Carbon Copy installation, you will need to use Advanced Mode.

Advanced Mode

CC Default Window png

Main

CC Main png

Avatar

The Avatar that you want to apply Carbon Copy to. Must have a VRC Avatar Descriptor.

Clone Name

The name of the clone in the hierarchy.

Clone Type

The clone mode(s) to include in the Carbon Copy generation.

Clone Modes Description
Mimic Only Includes only the Mimic clone feature suite. Enables the option for Optimize Clone to have a better performance clone
Mimic + Mirror Includes both the Mimic and Mirror clone feature suites. Uses significantly heavier performance
HUD Position

Select the general position on your screen where the Carbon Copy HUD should be displayed.

HUD Color

Select the HDR color and opacity of the HUD that will be displayed.

Existing Clones

Lists any existing clones on the currently selected Avatar.

Clicking an existing clone's name will now highlight it.

Existing clones can be hidden and unhidden with the eye icon next to their names.

Scaling

Adds scaling functionality to your clone. Uses +8 Memory. Enabled by default.

CC Scaling png

Stabilize Scale

Helps keep the clone in place while scaling. Uses +1 Memory. Enabled by default.

Save Scale

Scale will persist across instances and avatar load. Disabled by default.

Min/Max %

The minimum or maximum scale percentage the clone can be scaled to.

Proxy

Allows using a different humanoid Avatar as the clone.

CC Proxy png

Proxy Type
Model Only Merge avatar model only without any FX animations/menus
FX Avatar Merge Merge entire avatar as a clone including FX functionality and menus. Will increase required expression parameter memory by the Proxy's memory usage.
Clone FX

FX layer Animations will affect the clone as well if the hierarchy matches. Allows your clone to do the same animations as you. Incompatible with Proxy FX Avatar Merge.

Proxy Avatar

The Avatar to be used as the clone in Carbon Copy. Requires a humanoid Avatar to use as a clone for CarbonCopy.

Force T-Pose

Forces the two avatars into a T-Pose, this will help making the constraints on the clone be more accurate.

Preferences

Select whether the below settings will be saved to persist across instances and avatar loads, and if they are enabled or disabled by default.

CC Preferences png

Scale Proportional Movement XZ

When enabled, clone will move proportionally to its own scale on the XZ plane.

Scale Proportional Movement Y

When enabled, clone will move proportionally to its own scale on the Y axis.

HUD Displays On Screen

When enabled, a HUD displays on the screen to show you your current active functions and settings.

Vertical Inverts PhysBones Gravity

When enabled, Vertical Mirror will invert the gravity/force on PhysBones.

Configuration

CC Configuration png

Lag Frame Rate

Define how many simulated frames the clone should have when you enable Lag in the Quick Menu

PhysBone Handling

How to deal with PhysBones that exist on the humanoid armature.

Option Description
Regenerate Recursively apply the same PhysBone to its children until it's not a humanoid bone
Ignore Don't apply the mimic or mirror constraint logic to these bones
Apply Anyway Pretend there's no PhysBone
Extra Bind Type

What the last extra Binding button should bind to.

Option Description
Spring Ball A simple spring ball system will be generated and the clone binds to it
Target Choose a target transform that the Clone will bind itself to
Anchor Direction

What direction the mirror clone's anchor should align to.

Option Description
Head Mirror starting from the direction your head is looking in (original behaviour)
Hips Mirror starting from the direction your hips are facing
Root Mirror starting from the direction your playspace is oriented in (thumbstick control)

CC Anchor Direction gif

Clone FX Animations

FX layer Animations will affect the clone as well. Allows your clone to do the same animations as you. Incompatible with Proxy FX Avatar Merge.

Clone LipSync

Generates viseme parameter controlled Lipsync for the clone based off of your current viseme blendshapes.

No Gesture Expressions

Sets your facial expressions to the idle state when Gesture or Jutsu controls are enabled, or when using Spring Ball Bind gestures.

Optimize Mimic

Replaces PhysBones with Rotation Constraints on Mimic. Incompatible with Mirror, and is disabled if Mimic + Mirror is selected under Clone Type.

Descriptor Colliders

Adds colliders to the Clone's hands and fingers based on the avatar descriptor's colliders.

Descriptor Senders

Adds contact senders to the clone based on the avatar descriptor's colliders.

Clean FX Controller

FX Controller will be optimized in size by removing any sub-asset that's not used in the controller. This feature is available for manual use in Controller Editor.

Proximity Head Shrink

If enabled, the clone's head will locally shrink while your head is inside it during Swap. This may cause PhysBones on your clone's head to exhibit weird behaviours in mirrors only to yourself due to PhysBones scaling to 0.

Write Defaults

Set the Write Defaults that Carbon Copy will generate its animator states with. This will attempt to be automatically detected based on your existing FX playable layer.

Generated Assets Path

Define where all the newly generated folders and assets will be generated.

By default, this is Assets/DreadScripts/Carbon Copy/GeneratedAssets/.

Clean Up

Optional mass-removal of components from the generated clone.

CC Clean Up png

Remove Clone Cameras

Removes all Camera components on the clone.

Remove Fixed Joints

Removes all Fixed Joint components on the clone. This is particularly used to make world physics fixes like SleightlyBall compatible on clones.

Remove Clone Audio

Removes all Audio Source components on the clone.

Remove Clone Colliders

Removes all Collider components on the clone.

Remove Clone Lights

Removes all Light components on the clone.

Remove Clone PhysBones

Removes all PhysBone and PhysBone Collider components on the clone.

Multi-Clone

Allows generating multiple separate clones.

CC Multi Clone png

To setup multiple clones, enable Multi-Clone and enter a unique suffix, then apply. You set them up one by one like this, and each clone needs to use a different suffix.

Multi-Clones are now automatic! Re-run the script on an avatar with Carbon Copy and it'll automatically handle creating a new separate clone.

Each clone has independent menus from one another, and can be configured with different settings. They each have their own parameters and memory cost.

Apply Carbon Copy!

Click to apply Carbon Copy according to all the inputs above.

After generation, the clone will appear as enabled, and a Hide Avatar button will appear in place of Apply Carbon Copy. Click Hide Avatar to disable the clone and finalize setup.

CC Utilities png

Utilities

CC Utilities png

Memory Calculations

Hovering over the Memory Cost will tell you what's using memory. You must have enough memory to install Carbon Copy. You may enable or disable certain features that contribute to the cost.

Feature Memory Cost
Carbon Copy 8
HUD + Cull 1
Scale 8
Stabilize Scale 1
Saved Preferences 0 - 4
Warnings/Errors
Avatar not set

Please populate an avatar to generate Carbon Copy on.

Avatar Position/Rotation is not at (0,0,0)!

Press Fix to center your Avatar at the origin to prevent world constraint issues.

Avatar doesn't have an Animator Component

Make sure your Avatar Root with the Avatar Descriptor has an Animator on it. Most FBXs come with this by default, so this might indicate something happened to yours that needs to be fixed.

Avatar's Animator requires an Avatar asset in the Animator

The Animator component doesn't have an Avatar defined in it, which means it can't tell if the Avatar is humanoid or not. Please assign the Avatar to this Avatar Descriptor.

Your Avatar's Descriptor is set as Non-Humanoid

The avatar's rig is not set to humanoid in Unity. Please set it to humanoid and map the required bones before proceeding.

Proxy Avatar not set

Only displayed if the Proxy module is in use.

Please populate a proxy avatar to generate Carbon Copy on.

Proxy Avatar requires an Avatar Asset in the Animator

Only displayed if the Proxy module is in use.

The Animator component on the proxy doesn't have an Avatar defined in it, which means it can't tell if the Avatar is humanoid or not. Please assign the Avatar to this Avatar Descriptor.

Target Avatar is not Humanoid

Only displayed if the Proxy module is in use.

The proxy avatar's rig is not set to humanoid in Unity. Please set it to humanoid before proceeding.

Face Mesh not found on Avatar

Expression Disabling and LipSync will be ignored.

Mesh Renderer Toggles Detected

Rendering component toggling is used by CarbonCopy and may override your FX animations and cause unexpected issues. Try to convert these animations to use gameobject toggles instead, or remove them entirely.

Write Defaults on FX detected as Mixed

Write Defaults will be set to Off by default. You can change this under the Configuration module.

Avatar requires __ free memory to contain the new parameters

The current avatar is currently using too much expression parameter memory. Please remove some 3.0 from your existing model to make room for Carbon Copy.

Avatar does not have enough free control slots

The Expressions Menu on the Avatar Descriptor does not have enough menu space to add the control for Carbon Copy. Free up some menu space.

Your Avatar's Action playable layer is set as FX

This is an uncommon bug due to the changing of Avatars in your Animator component or the switching between Generic/Humanoid rigs while having an Avatar Descriptor. Click Fix to resolve this, and make sure to replace your custom Action layer if you had one.

TPose Controller with WD On on the topmost default state!

Having write defaults on in the default state of the first layer of your T-Pose controller may sometimes cause obscure issues. This has been observed with Carbon Copy where the Clone would not appear in mirrors nor cameras locally.

Press Fix to set the write defaults on this state off.

Delete

Clean Up: Removes Carbon Copy from affected assets

Revert: Reverts affected assets to the originals prior to applying Carbon Copy

Both Remove Carbon Copy:

  • Deletes the CCopy World Space.
  • Removes all Carbon Copy Parameters.
  • Deletes all Carbon Copy layers from FX.

Note that the clean up doesn't delete assets in the Generated Assets folder as to avoid deleting any important files. It also does not remove any properties from animation clips or paths in masks that it previously added.

For a clean rollback, simply use your original assets again. Carbon Copy uses a copy of all assets so that no modification is permanent.

Check For Updates

Click the three lines next to the version number in the bottom left to check for any updates to Carbon Copy. Notifies you if there is one, and allows quick and easy download/import. Checks automatically once per day when opening the project.

Send Feedback

Click the three lines next to the version number in the bottom left to send feedback for Carbon Copy straight from Unity.

Verify

Click the three lines next to the version number in the bottom left to select when Carbon Copy verifies authentication.

On Display initiates authentication when the window is opened.

On Project Load initiates authentication when the project is opened.

Authorized User

If you have entered your Discord Username upon purchase, your name will appear on the tool. Otherwise, this label is hidden.


Usage

In-Game Demo Video

Carbon Copy In-Game Demo

Menu Options

Mimic Menu
Mimic

Toggles a Mimic clone that follows your movements one-to-one. Spawns where you are standing or where you had placed the anchor. Stays in place until confirmed.

Confirm

Toggles Confirm. Unlocks or locks Mimic's root movement that makes it move with you. Used to control and maintain any desired offset from the Mimic.

Mirror Menu
Standard

Toggles a Standard mirror mode clone. Spawns where you're standing. Moves as if a mirror dropped on top of you straight forward.

Radial

Toggles a Radial mirror mode clone. Same as Standard but root moves to your opposite on the XZ plane.

Vertical

Toggles a Vertical mirror mode clone. Spawns where your feet are and is flipped upside down.

Quick Menu
Invis

Hides your own avatar by disabling all rendering components.

Swap

Hides your own avatar and shows the clone. Automatically uses mimic's behavior if no clone is active.

Overrides Hide.

Anchor/Reset

Resets Clone's position and rotation to where you currently are. Disables Confirm.

If clone is disabled, sets down an anchor which can be used to make the Mimic clone spawn at that location right away.

Bind (Mimic)
Left Hand

Makes the Mimic clone move with your left hand.

Left Foot

Makes the Mimic clone move with your left foot.

Head

Makes the Mimic clone move with your head.

Extra/Ball

If you had chosen "Generate Spring Ball" with the tool in "Extra Bind Type". The Mimic clone will act like a spring ball. Fingerpoint gesture to switch hands, Open Hand gesture to make the clone orbit.

Chest

Makes the Mimic clone move with your chest.

Hips

Makes the Mimic clone move with your hips.

Right Foot

Makes the Mimic clone move with your right foot.

Right Hand

Makes the Mimic clone move with your right hand.

Lag

Reduces the clone's simulated framerate for a fake laggy effect.

Replaces Freeze if active.

Hide

Hides the clone's renderers without disabling the clone. The clone still functions normally.

Overridden by Swap and Freeze.

Freeze

Freezes the clone completely so it stays still. Compatible with Bind.

Overrides Hide. Replaces Lag if active.

Settings Menu
Dyn Invert

Toggles whether Vertical mirror will cause PhysBones to invert gravity.

Inverted PhysBone gravity will only take effect once the clone is re-enabled.

This option is not available if Carbon Copy was generated as Mimic Only.

HUD

Toggles a HUD displays on the screen to show you your current active functions and settings.

Jutsu Control

Toggle clone functions using a combination of hand gestures and trigger/reset gestures. See Gesture Mapping for a usage explanation.

Recommended for users who prefer the gestures to persist without being held.

Gesture Control

Activate clone functions by holding hand gestures. See Gesture Mapping for a usage explanation.

Recommended for users with good Gesture Locking control and want maximum responsiveness during performing.

Scale Menu
Scale Toggle

Toggles whether the Scale radial puppet should take effect or not.

Proportional Movement Menu
Y

Toggles the proportional movement of the clone on the world's Y axis.

Reset

Resets the proportional offset due to the scale of the clone. This is separate from the regular reset or anchor. Regular reset or anchor trigger this automatically.

XZ

Toggles the proportional movement of the clone on the world's XZ plane.

Scale Size

Modifies the Scale of the clone based on the percentages chosen during installation.

Gesture Controls

Gesture Mapping

The Gesture Control mapping is as follows:

Hand Gesture Layout LShift Left Hand RShift Right Hand
F2 Gesture Fist Invis Freeze
F6 Gesture Rock n Roll Mirror Radial Mirror Vertical
F7 Gesture Handgun Swap Mirror Standard
F8 Gesture Thumbs Up Mimic Confirm

To use Jutsu Control, the mapping is the same as the Gesture Control mapping above, but with two additional combo gestures to remember:

Jutsu Function Gesture Combination
Trigger Gesture Both hands Victory
Reset Gesture Both hands Rock n Roll

Gestures will be ignored until the Trigger Gesture is activated. Once the Trigger Gesture is activated, the next corresponding gesture to the Gesture Control mapping will be toggled, and persist after letting go of the gesture. To clear all active Gesture Controls, use Reset Gesture


Frequently Asked Questions

Is Carbon Copy compatible with VRChat Quest Avatars?

No, as VRChat Quest Avatars do not support Constraints at this time. Other clone systems are often not compatible either.

Is Carbon Copy compatible with Optimized Avatars?

It is not compatible by default, but manual modifications can be made to reach optimization standards. It is possible to get down as far as Good rating, assuming you had a near Excellent rating model prior to clone generation. You would have to remove the HUD mesh, and modify the Show Self and Hide Self animation clips to matswap your body mesh to an invisible material instead of toggling the body mesh to prevent yourself from being permanently culled. Any other stat reductions are dependent on what avatar you choose to use with this system.

Why do my particle systems have pink/missing material references?

Carbon Copy functions by rendering itself using the renderer property on all potential meshes. This includes the Particle System Renderer module, so if you have any particle systems that dont have the Renderer module enabled, then they will end up enabled by default even if there is no material/mesh there.

To resolve this, go to any of these unused renderer modules on your particle systems and set their render mode to None.

Why does my clone jitter in mirrors/cameras?

This is a side effect of the performance optimization implemented in Carbon Copy starting from version 1.2.5 that significantly improves performance for the wearer with no change to others.

To remove this performance optimization and jitter, you can delete the CarbonCopy Optimizer layer in the FX controller.

Why does my clone head have frozen PhysBones in mirrors?

Due to the way mirrors work in VRChat, the local head hiding of your clone when it's near your head causes PhysBones in the mirror to freeze

How do I fix No Gesture Expressions to also disable non-blendshapes (Tongues/Eyes)?

Navigate through your project files to your Avatar's Generated Assets folder for Carbon Copy and locate the animation clips for Gesture and Jutsu in the UI folder. You can add extra properties to this clip to account for resetting your non-blendshape animations.

How do I export Carbon Copy with my commercial package?

Assuming you have a commercial license for Carbon Copy, you will want to export the respective Generated Assets folder for your avatar alongside the rest of your avatar package.

You can find these generated resources at Save File Path/GeneratedAssets/. By default, this is Assets/DreadScripts/Carbon Copy/GeneratedAssets/.

Why is my project crashing after importing Carbon Copy?

Remove Carbon Copy via Windows File Explorer and check your project to see if it currently contains Cinemachine. You can locate this by clicking on Window > Package Manager from the top toolbar, and browsing the packages currently in your project. If Cinemachine is added, remove it. It is sometimes added through the VRChat Worlds SDK, so you may need to remove any remnants of the Worlds SDK from your project and this package manager window before removing Cinemachine.

Can I change the computer my license is registered to?

Yes, in the event you change hardware, you can use the Transfer License option when trying to verify your license key in Unity on the new hardware. There is a cooldown period to prevent abuse, and these logs will be monitored for misuse. If you need to re-transfer sooner than this transfer period, open a support ticket on discord.

Can I upgrade my personal license?

Yes, open a support ticket on discord and we can get that process started for you.

My license key isn't working!

Open a ticket on discord.

Where do I report a bug?

You can add issues to this github repository, or post it in the #bug-report channel for Carbon Copy on discord.

Where can I request features/make suggestions?

Feel free to leave these in the #suggestions channel on discord and we can discuss them in more detail.

I need more help!

If you need help with using Carbon Copy, reach out in the designated #support channel on discord so we or a community member can help. If you have private issues involving purchase details, open up a ticket instead.


Special Thanks

ksivl - For the knowledge regarding relational positioning world constraints that contributed to the development of the dynamic positioning of the clone via Confirm

Quantum - For developing the HUD shader over many months with JustSleightly just for this project to combat the loss of toggle indicators in the Expressions Menu due to memory optimization

Joshuarox100 - Whose logic in Inventory Inventor is directly used for the memory optimization in this system