<?xml version="1.0"?>
<feed xmlns="http://www.w3.org/2005/Atom" xml:lang="en">
	<id>https://wiki.vrchat.com/index.php?action=history&amp;feed=atom&amp;title=Guides%3AShader_Motion</id>
	<title>Guides:Shader Motion - Revision history</title>
	<link rel="self" type="application/atom+xml" href="https://wiki.vrchat.com/index.php?action=history&amp;feed=atom&amp;title=Guides%3AShader_Motion"/>
	<link rel="alternate" type="text/html" href="https://wiki.vrchat.com/index.php?title=Guides:Shader_Motion&amp;action=history"/>
	<updated>2026-06-03T22:45:29Z</updated>
	<subtitle>Revision history for this page on the wiki</subtitle>
	<generator>MediaWiki 1.43.6</generator>
	<entry>
		<id>https://wiki.vrchat.com/index.php?title=Guides:Shader_Motion&amp;diff=66834&amp;oldid=prev</id>
		<title>Usr 8ee44c1a-f905-4e08-bb61-e1cd34e09fc0: Usr 8ee44c1a-f905-4e08-bb61-e1cd34e09fc0 moved page Guide:Shader Motion to Guides:Shader Motion: Misspelled title: &quot;Guides&quot; namespame, not Guide</title>
		<link rel="alternate" type="text/html" href="https://wiki.vrchat.com/index.php?title=Guides:Shader_Motion&amp;diff=66834&amp;oldid=prev"/>
		<updated>2026-04-01T07:15:03Z</updated>

		<summary type="html">&lt;p&gt;Usr 8ee44c1a-f905-4e08-bb61-e1cd34e09fc0 moved page &lt;a href=&quot;/index.php?title=Guide:Shader_Motion&amp;amp;action=edit&amp;amp;redlink=1&quot; class=&quot;new&quot; title=&quot;Guide:Shader Motion (page does not exist)&quot;&gt;Guide:Shader Motion&lt;/a&gt; to &lt;a href=&quot;/wiki/Guides:Shader_Motion&quot; title=&quot;Guides:Shader Motion&quot;&gt;Guides:Shader Motion&lt;/a&gt;: Misspelled title: &amp;quot;Guides&amp;quot; namespame, not Guide&lt;/p&gt;
&lt;table style=&quot;background-color: #fff; color: #202122;&quot; data-mw=&quot;interface&quot;&gt;
				&lt;col class=&quot;diff-marker&quot; /&gt;
				&lt;col class=&quot;diff-content&quot; /&gt;
				&lt;col class=&quot;diff-marker&quot; /&gt;
				&lt;col class=&quot;diff-content&quot; /&gt;
				&lt;tr class=&quot;diff-title&quot; lang=&quot;en&quot;&gt;
				&lt;td colspan=&quot;2&quot; style=&quot;background-color: #fff; color: #202122; text-align: center;&quot;&gt;← Older revision&lt;/td&gt;
				&lt;td colspan=&quot;2&quot; style=&quot;background-color: #fff; color: #202122; text-align: center;&quot;&gt;Revision as of 07:15, 1 April 2026&lt;/td&gt;
				&lt;/tr&gt;&lt;tr&gt;&lt;td colspan=&quot;4&quot; class=&quot;diff-notice&quot; lang=&quot;en&quot;&gt;&lt;div class=&quot;mw-diff-empty&quot;&gt;(No difference)&lt;/div&gt;
&lt;/td&gt;&lt;/tr&gt;
&lt;!-- diff cache key vrchat_wiki:diff:1.41:old-66778:rev-66834 --&gt;
&lt;/table&gt;</summary>
		<author><name>Usr 8ee44c1a-f905-4e08-bb61-e1cd34e09fc0</name></author>
	</entry>
	<entry>
		<id>https://wiki.vrchat.com/index.php?title=Guides:Shader_Motion&amp;diff=66778&amp;oldid=prev</id>
		<title>Usr 40be82e7-f7d5-4548-b314-3fc7b26d22ee: How to digitilize yourself, but this time it&#039;s the how to.</title>
		<link rel="alternate" type="text/html" href="https://wiki.vrchat.com/index.php?title=Guides:Shader_Motion&amp;diff=66778&amp;oldid=prev"/>
		<updated>2026-03-30T21:40:26Z</updated>

		<summary type="html">&lt;p&gt;How to digitilize yourself, but this time it&amp;#039;s the how to.&lt;/p&gt;
&lt;p&gt;&lt;b&gt;New page&lt;/b&gt;&lt;/p&gt;&lt;div&gt;{{Noticebox/Community}}&lt;br /&gt;
This guide explains how to set up and use &amp;#039;&amp;#039;&amp;#039;[[Community:ShaderMotion|ShaderMotion]]&amp;#039;&amp;#039;&amp;#039; to record avatar motion in VRChat and export it as Unity animation files. ShaderMotion is a shader-based motion-to-video codec that encodes humanoid bone rotations into video color blocks. It can be used to record performances, create animations for worlds, and stream motion for live events.&lt;br /&gt;
&lt;br /&gt;
== Requirements ==&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
! Requirement&lt;br /&gt;
! Details&lt;br /&gt;
|-&lt;br /&gt;
| &amp;#039;&amp;#039;&amp;#039;Unity&amp;#039;&amp;#039;&amp;#039;&lt;br /&gt;
| A supported version of Unity for your [[Special:MyLanguage/VRChat SDK|VRChat SDK]]&lt;br /&gt;
|-&lt;br /&gt;
| &amp;#039;&amp;#039;&amp;#039;VRChat SDK&amp;#039;&amp;#039;&amp;#039;&lt;br /&gt;
| [[Special:MyLanguage/VRChat SDK|VRCSDK3]] (Avatar 3.0)&lt;br /&gt;
|-&lt;br /&gt;
| &amp;#039;&amp;#039;&amp;#039;VR hardware&amp;#039;&amp;#039;&amp;#039;&lt;br /&gt;
| A VR headset; [[Special:MyLanguage/Full-Body Tracking|full-body tracking]] hardware (e.g., Vive trackers) is recommended for full-body recording&lt;br /&gt;
|-&lt;br /&gt;
| &amp;#039;&amp;#039;&amp;#039;ShaderMotion&amp;#039;&amp;#039;&amp;#039;&lt;br /&gt;
| Download from [https://github.com/CuteWaterBeary/ShaderMotion GitHub] and import into your Unity project&lt;br /&gt;
|-&lt;br /&gt;
| &amp;#039;&amp;#039;&amp;#039;OBS&amp;#039;&amp;#039;&amp;#039; (for streaming or recording)&lt;br /&gt;
| [https://obsproject.com/ Open Broadcaster Software] or similar video capture software&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
== Setting up an avatar for recording ==&lt;br /&gt;
&lt;br /&gt;
The VRC Avatar Addon included with ShaderMotion configures your VRChat avatar for motion recording and playback.&lt;br /&gt;
&lt;br /&gt;
=== Import ShaderMotion ===&lt;br /&gt;
&lt;br /&gt;
Copy the ShaderMotion project files into your Unity project&amp;#039;s &amp;lt;code&amp;gt;Assets&amp;lt;/code&amp;gt; folder. The project includes an example scene at &amp;lt;code&amp;gt;Example/Example.unity&amp;lt;/code&amp;gt; that demonstrates the full system.&lt;br /&gt;
&lt;br /&gt;
=== Set up the avatar ===&lt;br /&gt;
&lt;br /&gt;
# Select your avatar&amp;#039;s root GameObject — the one with a &amp;#039;&amp;#039;&amp;#039;VRCAvatarDescriptor&amp;#039;&amp;#039;&amp;#039; component.&lt;br /&gt;
# In the &amp;#039;&amp;#039;&amp;#039;Animator&amp;#039;&amp;#039;&amp;#039; component inspector, click the gear icon.&lt;br /&gt;
# Select &amp;#039;&amp;#039;&amp;#039;&amp;quot;SetupAvatar&amp;quot;&amp;#039;&amp;#039;&amp;#039; from the menu.&lt;br /&gt;
&lt;br /&gt;
This prepares the avatar&amp;#039;s animator for ShaderMotion integration.&lt;br /&gt;
&lt;br /&gt;
=== Add a Motion Recorder ===&lt;br /&gt;
&lt;br /&gt;
# With the avatar still selected, click the gear icon in the Animator inspector.&lt;br /&gt;
# Select &amp;#039;&amp;#039;&amp;#039;&amp;quot;Setup Motion Recorder&amp;quot;&amp;#039;&amp;#039;&amp;#039;.&lt;br /&gt;
&lt;br /&gt;
This adds a &amp;#039;&amp;#039;&amp;#039;SkinnedMeshRenderer&amp;#039;&amp;#039;&amp;#039; to your avatar that outputs motion data as a grid of colored blocks on screen. The motion data is a 6x45 grid of color blocks (within the full 80x45 frame grid) positioned on the left or right side of the screen. By default, the recorder is only visible to an orthographic camera with farClip set to 0, to reduce visual interference.&lt;br /&gt;
&lt;br /&gt;
The &amp;lt;code&amp;gt;rootBone&amp;lt;/code&amp;gt; property of the SkinnedMeshRenderer determines the origin of the recording space. By default it is set to the recorder itself. To record locomotion (movement through the world), set it to a fixed Transform and use an emote or gesture toggle to keep it stationary in world space.&lt;br /&gt;
&lt;br /&gt;
=== Add a Motion Player (optional) ===&lt;br /&gt;
&lt;br /&gt;
# Click the gear icon in the Animator inspector.&lt;br /&gt;
# Select &amp;#039;&amp;#039;&amp;#039;&amp;quot;Setup Motion Player&amp;quot;&amp;#039;&amp;#039;&amp;#039;.&lt;br /&gt;
&lt;br /&gt;
This adds a &amp;#039;&amp;#039;&amp;#039;MeshRenderer&amp;#039;&amp;#039;&amp;#039; that receives motion data from &amp;lt;code&amp;gt;Motion.renderTexture&amp;lt;/code&amp;gt; for local playback. This is useful for testing and for setting up MotionLink on your avatar.&lt;br /&gt;
&lt;br /&gt;
=== Set up the Animator ===&lt;br /&gt;
&lt;br /&gt;
# Click the gear icon in the Animator inspector.&lt;br /&gt;
# Select &amp;#039;&amp;#039;&amp;#039;&amp;quot;Setup Animator&amp;quot;&amp;#039;&amp;#039;&amp;#039;.&lt;br /&gt;
&lt;br /&gt;
For Avatar 3.0, this modifies the FX layer and expressions. For Avatar 2.0, it modifies the override controller.&lt;br /&gt;
&lt;br /&gt;
=== Upload the avatar ===&lt;br /&gt;
&lt;br /&gt;
Upload the configured avatar to VRChat using the VRChat SDK control panel.&lt;br /&gt;
&lt;br /&gt;
== Recording motion in VRChat ==&lt;br /&gt;
&lt;br /&gt;
# Launch VRChat and switch to the avatar you set up with ShaderMotion.&lt;br /&gt;
# Open &amp;#039;&amp;#039;&amp;#039;OBS&amp;#039;&amp;#039;&amp;#039; (or other video capture software) and configure it to capture the VRChat game window.&lt;br /&gt;
# Ensure the ShaderMotion color blocks are visible on screen. They appear as small colored squares along the edge of the screen.&lt;br /&gt;
# Begin recording in OBS.&lt;br /&gt;
# Perform the motion you want to capture.&lt;br /&gt;
# Stop recording in OBS when finished.&lt;br /&gt;
&lt;br /&gt;
The resulting video file contains the encoded motion data alongside the normal game footage.&lt;br /&gt;
&lt;br /&gt;
=== Recommended OBS settings ===&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
! Category&lt;br /&gt;
! Setting&lt;br /&gt;
! Recommended value&lt;br /&gt;
|-&lt;br /&gt;
| rowspan=&amp;quot;2&amp;quot; | &amp;#039;&amp;#039;&amp;#039;Video&amp;#039;&amp;#039;&amp;#039;&lt;br /&gt;
| Output resolution&lt;br /&gt;
| At least 640x360&lt;br /&gt;
|-&lt;br /&gt;
| Frame rate&lt;br /&gt;
| 60 FPS (lower frame rates are noticeable in VR)&lt;br /&gt;
|-&lt;br /&gt;
| &amp;#039;&amp;#039;&amp;#039;Output / Streaming&amp;#039;&amp;#039;&amp;#039;&lt;br /&gt;
| Bitrate&lt;br /&gt;
| 400-800 Kbps (scale proportionally if resolution or FPS is higher)&lt;br /&gt;
|-&lt;br /&gt;
| rowspan=&amp;quot;2&amp;quot; | &amp;#039;&amp;#039;&amp;#039;Advanced / Video&amp;#039;&amp;#039;&amp;#039;&lt;br /&gt;
| Color space&lt;br /&gt;
| 709&lt;br /&gt;
|-&lt;br /&gt;
| Color range&lt;br /&gt;
| Partial&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
== Exporting animations ==&lt;br /&gt;
&lt;br /&gt;
After recording, you can convert the motion video into a Unity &amp;lt;code&amp;gt;.anim&amp;lt;/code&amp;gt; file using the AnimationRecorder tool.&lt;br /&gt;
&lt;br /&gt;
=== Set up a playback character ===&lt;br /&gt;
&lt;br /&gt;
In your Unity project, set up a version of your avatar (or any humanoid character) to play back the recorded motion. The character needs a ShaderMotion player component attached.&lt;br /&gt;
&lt;br /&gt;
=== Create a C# player ===&lt;br /&gt;
&lt;br /&gt;
Select the main renderer (typically a SkinnedMeshRenderer called &amp;quot;Body&amp;quot;) on your avatar. In the Animator inspector gear menu, select &amp;#039;&amp;#039;&amp;#039;&amp;quot;CreateMeshPlayer&amp;quot;&amp;#039;&amp;#039;&amp;#039;. This creates a player that reads from &amp;lt;code&amp;gt;Motion.renderTexture&amp;lt;/code&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
Alternatively, use the &amp;#039;&amp;#039;&amp;#039;MotionPlayer&amp;#039;&amp;#039;&amp;#039; MonoBehaviour component, which can drive an animator from the motion texture. Unlike the shader-based player, the C# player requires custom scripts and does not work inside VRChat, but it is required for animation recording.&lt;br /&gt;
&lt;br /&gt;
=== Play back the video ===&lt;br /&gt;
&lt;br /&gt;
Enter Play Mode in Unity and play back the recorded video. The MotionPlayer or shader player will read the color blocks from the video and animate your character accordingly.&lt;br /&gt;
&lt;br /&gt;
=== Record the animation ===&lt;br /&gt;
&lt;br /&gt;
# In the Animator inspector gear menu, select &amp;#039;&amp;#039;&amp;#039;&amp;quot;RecordAnimation&amp;quot;&amp;#039;&amp;#039;&amp;#039;.&lt;br /&gt;
# The AnimationRecorder captures the bone motion during video playback and saves it as a &amp;lt;code&amp;gt;.anim&amp;lt;/code&amp;gt; file.&lt;br /&gt;
&lt;br /&gt;
The AnimationRecorder may run at reduced speed depending on system performance.&lt;br /&gt;
&lt;br /&gt;
=== Converting to FBX (optional) ===&lt;br /&gt;
&lt;br /&gt;
Exported &amp;lt;code&amp;gt;.anim&amp;lt;/code&amp;gt; files work directly in Unity animator controllers. To use the animation in other software (such as Blender) or to access Unity&amp;#039;s model animation import settings, third-party conversion tools can convert &amp;lt;code&amp;gt;.anim&amp;lt;/code&amp;gt; files to &amp;lt;code&amp;gt;.fbx&amp;lt;/code&amp;gt; format.&lt;br /&gt;
&lt;br /&gt;
== Setting up a world for playback ==&lt;br /&gt;
&lt;br /&gt;
ShaderMotion includes a &amp;#039;&amp;#039;&amp;#039;VRC World Addon&amp;#039;&amp;#039;&amp;#039; that provides a sample VRCSDK3 world with a video player configured to drive a puppet avatar.&lt;br /&gt;
&lt;br /&gt;
# Import the VRC World Addon into your VRChat world project.&lt;br /&gt;
# Place the provided prefab in your scene. It includes a video player and a puppet avatar.&lt;br /&gt;
# Configure the video player to play a ShaderMotion-encoded video (either a pre-recorded file or a live stream URL).&lt;br /&gt;
# The puppet avatar will automatically follow the motion encoded in the video.&lt;br /&gt;
&lt;br /&gt;
Audiences in the world can move freely around the puppet avatar and view the performance from any angle.&lt;br /&gt;
&lt;br /&gt;
== Troubleshooting ==&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
! Issue&lt;br /&gt;
! Possible cause and solution&lt;br /&gt;
|-&lt;br /&gt;
| Color blocks are not visible in OBS&lt;br /&gt;
| Ensure the ShaderMotion recorder is set up on your avatar and the correct camera view is captured. The recorder is only visible to an orthographic camera with farClip = 0 by default.&lt;br /&gt;
|-&lt;br /&gt;
| Exported animation is too slow&lt;br /&gt;
| The AnimationRecorder may run slowly under system load. Increase the playback speed in the animator controller, or edit the animation file to compress the timeline.&lt;br /&gt;
|-&lt;br /&gt;
| Motion appears jittery&lt;br /&gt;
| Check that OBS is recording at 60 FPS with the recommended bitrate (400-800 Kbps). Lower bitrates or frame rates reduce encoding quality.&lt;br /&gt;
|-&lt;br /&gt;
| Avatar does not animate during playback&lt;br /&gt;
| Verify that the MotionPlayer component is attached and that &amp;lt;code&amp;gt;Motion.renderTexture&amp;lt;/code&amp;gt; is assigned. Ensure Play Mode is active in Unity.&lt;br /&gt;
|-&lt;br /&gt;
| Locomotion is not recorded&lt;br /&gt;
| Set the &amp;lt;code&amp;gt;rootBone&amp;lt;/code&amp;gt; property of the recorder to a fixed Transform in world space. Use an emote or gesture toggle to lock it in place.&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
== See also ==&lt;br /&gt;
&lt;br /&gt;
* [[Community:ShaderMotion|ShaderMotion]]&lt;br /&gt;
* [[Community:Motion Capture|Motion capture]]&lt;br /&gt;
* [[Special:MyLanguage/Avatars|Avatars]]&lt;br /&gt;
&lt;br /&gt;
== Resources ==&lt;br /&gt;
&lt;br /&gt;
* [https://github.com/CuteWaterBeary/ShaderMotion ShaderMotion] on GitHub&lt;br /&gt;
* [https://gitlab.com/lox9973/ShaderMotion Original ShaderMotion repository] on GitLab&lt;br /&gt;
&lt;br /&gt;
[[Category:Guides{{#translation:}}]]&lt;/div&gt;</summary>
		<author><name>Usr 40be82e7-f7d5-4548-b314-3fc7b26d22ee</name></author>
	</entry>
</feed>