{"id":517,"date":"2015-10-13T08:34:05","date_gmt":"2015-10-13T08:34:05","guid":{"rendered":"http:\/\/avastar.online\/?page_id=517"},"modified":"2015-10-13T08:34:05","modified_gmt":"2015-10-13T08:34:05","slug":"motion-transfer","status":"publish","type":"page","link":"https:\/\/avalab.org\/avastar\/279\/help\/toolshelf\/animation\/motion-transfer\/","title":{"rendered":"Motion Transfer"},"content":{"rendered":"<div class=\"row-fluid\">\n<div class=\"rhcol span10\">\n<h2><image src=\"\/avastar\/279\/wp-content\/uploads\/2018\/08\/approve_logo.png\" style=\"width:60px;vertical-align:middle;margin-left:0px;\"><\/image> Motion Transfer Tools<\/h2>\n<\/div>\n<div class=\"rhcol span2\">\n<a class=\"mamap\" href=\"https:\/\/avalab.org\/avastar\/279\/wp-content\/uploads\/2018\/08\/panel_animation.png\" target=\"_blank\"><img decoding=\"async\" alt=\"\" src=\"https:\/\/avalab.org\/avastar\/279\/wp-content\/uploads\/2018\/08\/panel_animation.png\" \/><\/a>\n<\/div>\n<\/div>\n<div style=\"padding:70% 0 0 0;position:relative;\"><iframe src=\"https:\/\/player.vimeo.com\/video\/235418617?h=1c1d395c65&amp;badge=0&amp;autopause=0&amp;player_id=0&amp;app_id=58479\" frameborder=\"0\" allow=\"autoplay; fullscreen; picture-in-picture\" allowfullscreen style=\"position:absolute;top:0;left:0;width:100%;height:100%;\" title=\"vimeo video\"><\/iframe><\/div><script src=\"https:\/\/player.vimeo.com\/api\/player.js\"><\/script>\n<div class=\"symple-toggle state-closed \"><h3 class=\"symple-toggle-trigger \"><strong>keywords<\/strong><\/h3><div class=\"symple-toggle-container symple-clearfix\">\n<ul>\n<li>retarget tool<\/li>\n<li>rig transfer, motion transfer<\/li>\n<li>animation transfer, animation copy<\/li>\n<li>fbx, dae, bvh<\/li>\n<\/ul>\n<\/div><\/div>\n<div class=\"row-fluid\">\n<div class=\"rhcol span12\">The Motion Transfer Tools are designed to transfer the Animation of an imported BVH file to an Avastar rig. So you will typically first create an Avastar character (the Target), then import the Animation, map it to Avastar, and finally transfer the Motion to the Avastar Timeline.<\/div>\n<\/div>\n<div class=\"row-fluid\">\n<div class=\"span6 rhcol\">\n<h4>In a Nutshell<\/h4>\n<\/div>\n<div class=\"span6 rhcol\"><a class=\"mamap\" href=\"\/\/avastar.online\/wp-content\/uploads\/2015\/10\/map_retarget.png\" target=\"_blank\"><img decoding=\"async\" alt=\"\" src=\"\/\/avastar.online\/wp-content\/uploads\/2015\/10\/map_retarget.png\" \/><\/a><\/div>\n<\/div>\n<div class=\"row-fluid\">\n<div class=\"rhcol span7\">\n<ul>\n<li>Create a new Avastar Character (or use an existing one).<\/li>\n<li>Import your BVH animation file.<\/li>\n<li>Map the corresponding Bones.<\/li>\n<li>Transfer the Animation.<\/li>\n<\/ul>\n<\/div>\n<div class=\"rhcol span5\">You find the entire import functionality in the Tool Shelf, Animation Tab, in the <em>Pose Setting panel<\/em> and the <em>Motion Transfer panel<\/em>.<\/div>\n<\/div>\n<h4>Loading an animation file<\/h4>\n<p>Blender supports the import of BVH files out of the Box. You find the importer in the Top menu at:<\/p>\n<pre>File -&gt; Import -&gt; Motion Capture<\/pre>\n<p>&nbsp;<\/p>\n<div class=\"row-fluid\">\n<div style=\"text-align: Left;\" class=\"span6 rhcol\">\n<div id=\"attachment_22075\" style=\"width: 230px\" class=\"wp-caption aligncenter\"><img loading=\"lazy\" decoding=\"async\" aria-describedby=\"caption-attachment-22075\" class=\"wp-image-22075 size-full\" src=\"\/\/blog.machinimatrix.org\/wp-content\/uploads\/2014\/08\/retarget_02.png\" alt=\"retarget_02\" width=\"220\" height=\"232\" \/><p id=\"caption-attachment-22075\" class=\"wp-caption-text\">The Import options are at the lower left corner of the tool shelf <strong><span style=\"color: #993300;\"><sup>(2)<\/sup><\/span><\/strong><\/p><\/div>\n<\/div>\n<div class=\"span6 rhcol\">\n<div id=\"attachment_22074\" style=\"width: 232px\" class=\"wp-caption aligncenter\"><a href=\"\/\/blog.machinimatrix.org\/wp-content\/uploads\/2014\/08\/retarget_01.png\"><img loading=\"lazy\" decoding=\"async\" aria-describedby=\"caption-attachment-22074\" class=\"wp-image-22074 size-full\" src=\"\/\/blog.machinimatrix.org\/wp-content\/uploads\/2014\/08\/retarget_01.png\" alt=\"retarget_01\" width=\"222\" height=\"364\" \/><\/a><p id=\"caption-attachment-22074\" class=\"wp-caption-text\">Bvh File imported <br \/>with wrong scaling <span style=\"color: #993300;\"><sup><strong>(1)<\/strong><\/sup><\/span><\/p><\/div>\n<\/div>\n<\/div>\n<p><strong><span style=\"color: #993300;\">Note<sup>(1)<\/sup>:<\/span> <\/strong>If you import an animation that was made for Secondlife then its unit of measurement is Inches. In that case you can use the factor 0.0254 to rescale the figure to Blender units when you import the BVH file.<\/p>\n<p><span style=\"color: #993300;\"><strong>Note<sup>(2)<\/sup>:<\/strong><\/span> You can set &#8211; but you do not strictly have to set &#8211; the Scale factor to match the imported Armature and the Avastar armature. However if you do not fix the scaling during import then you can easily end up in a situation like in the image above.<\/p>\n<h4>Quick fix for Scaling mismatch<\/h4>\n<div class=\"row-fluid\">\n<div class=\"span6 rhcol\">Even if the BVH Scaling matches roughly to the Avastar size, in most cases the match is not perfect. Because of this we have added the <em><span style=\"color: #ff6600;\">Match Scales<\/span> <\/em>function at the bottom of the Motion Transfer Panel (see image) The tool is displayed after you have imported the BVH file. We get back to this again in a moment.<\/div>\n<div class=\"rhcol span6\"><a href=\"https:\/\/avalab.org\/avastar\/279\/wp-content\/uploads\/2015\/10\/Image436.png\"><img loading=\"lazy\" decoding=\"async\" class=\"aligncenter size-full wp-image-2162\" src=\"https:\/\/avalab.org\/avastar\/279\/wp-content\/uploads\/2015\/10\/Image436.png\" alt=\"\" width=\"293\" height=\"289\" \/><\/a><\/div>\n<\/div>\n<p>The <em>Match Scales<\/em> function rescales the imported Animation rig in Object space to match the Avastar rig&#8217;s Skeleton. However, we get the scaling value only from the Z-Axis and apply that value to the X- and Y- axes as well. In most cases the result is good enough to work with. But you always can manually adjust the armature scale in Object mode.<\/p>\n<div class='et-box et-warning'>\n\t\t\t\t\t<div class='et-box-content'>If you need to edit the rigs to get better results, then always(!) edit only the Avastar Rig. Do your editing before you do the motion transfer! Editing the imported rig will destroy your animation.<\/div><\/div>\n<p>&nbsp;<\/p>\n<h4 id=\"guess_bone_map\">Mapping bones<\/h4>\n<div class=\"row-fluid\">\n<div class=\"span6 rhcol\">\n<p>When you import a BVH file, then the used Bones can have arbitrary names. Also your animation Rig can have different bones than the target Rig. This issue can be solved by using a Bone Map.<\/p>\n<p>By default the Bone map is collapsed and hidden inside the <em>Guess mapping<\/em> button. You can expand the Map by clicking on the small + Icon left to that button. A list of Bones shows up.<\/p>\n<p>The left column (Target) is a read only list of Bones in the target Rig (Avastar in our case). While the right Column is a list of bone names which appear in the just imported Rig. Initially the Map is empty and you have to fill it manually.<\/p>\n<\/div>\n<div class=\"span6 rhcol\"><a href=\"\/\/blog.machinimatrix.org\/wp-content\/uploads\/2014\/08\/retarget_041.png\"><img loading=\"lazy\" decoding=\"async\" class=\"aligncenter size-full wp-image-22084\" src=\"\/\/blog.machinimatrix.org\/wp-content\/uploads\/2014\/08\/retarget_041.png\" alt=\"retarget_04\" width=\"262\" height=\"403\" \/><\/a><\/div>\n<\/div>\n<p>However, we have added a Map Guessing tool, which works nicely for Animations that already have been made for SL. You can just test the Guessing tool and see if your imported Animation rig is recognized. In the case above the guessing tool has identified the Animation Rig to be an SL\/OpenSim compatible rig, thus all available Bones are automatically assigned and we do not need to bother with that.<\/p>\n<h4>The Bone Picker<\/h4>\n<div class=\"row-fluid\">\n<div class=\"span6 rhcol\">\n<p><em><span style=\"color: #ff6600;\">The Bone picker<\/span><\/em> lets you select one Source bones from the Animation rig and manually map it to a bone on the Target rig:<\/p>\n<ul>\n<li>Open the Animation source Rig in pose mode<\/li>\n<li>Select a bone<\/li>\n<li>Click on the corresponding assign icon in the map (see image)<\/li>\n<\/ul>\n<\/div>\n<div class=\"span6 rhcol\"><a href=\"\/\/blog.machinimatrix.org\/wp-content\/uploads\/2014\/08\/retarget_06.png\"><img loading=\"lazy\" decoding=\"async\" class=\"aligncenter wp-image-22094\" src=\"\/\/blog.machinimatrix.org\/wp-content\/uploads\/2014\/08\/retarget_06.png\" alt=\"retarget_06\" width=\"439\" height=\"291\" \/><\/a><\/div>\n<\/div>\n<p>Now the source bone is assigned to the corresponding target bone (In the example rThigh of the Animation Source is assigned to HipRight in the Avastar target)<\/p>\n<h4>The Range Mirror Copy<\/h4>\n<div class=\"row-fluid\">\n<div class=\"span6 rhcol\">\n<p><em id=\"copy_other_side\"><span style=\"color: #ff6600;\">The Range Mirror Copy<\/span><\/em> lets you copy the limbs. Thus you only need to assign one half of the bones, then use this tool to automatic fill the symmetric bones on the other side.<\/p>\n<ul>\n<li>Assign one side of your animation source Rig to the corresponding bones in the Avastar rig<\/li>\n<li>Click on <em><span style=\"color: #ff6600;\">Mirror Copy<\/span><\/em> to transfer the assignments to the other side of the Rigs.<\/li>\n<\/ul>\n<p><em id=\"clear_bone_map\"><span style=\"color: #ff6600;\">The Clear Tool<\/span> <\/em>removes all associations in the Bone Map.<\/p>\n<\/div>\n<div class=\"span6 rhcol\"><img loading=\"lazy\" decoding=\"async\" class=\"aligncenter size-full wp-image-22093\" src=\"\/\/blog.machinimatrix.org\/wp-content\/uploads\/2014\/08\/retarget_05.png\" alt=\"retarget_05\" width=\"252\" height=\"340\" \/><\/div>\n<\/div>\n<h4><\/h4>\n<h4>Pose tools<\/h4>\n<div class=\"row-fluid\">\n<div class=\"span6 rhcol\">In order to transfer the animation we not only need the Bone Map, but we also need one timeframe in which the Source animation and the target animation use the same pose (at least a closely matching pose). This Reference Frame will then be used as guideline for the transformation tool. If both Rigs use the same restpose then you can simply enable the Use Restpose option. Then the Ref Frame option is greyed out and you do not need to create a reference frame<\/div>\n<div class=\"span6 rhcol\"><a href=\"https:\/\/avalab.org\/avastar\/279\/wp-content\/uploads\/2015\/10\/Image435.png\"><img loading=\"lazy\" decoding=\"async\" class=\"aligncenter size-full wp-image-2163\" src=\"https:\/\/avalab.org\/avastar\/279\/wp-content\/uploads\/2015\/10\/Image435.png\" alt=\"\" width=\"293\" height=\"289\" \/><\/a><\/div>\n<\/div>\n<p><strong><span style=\"color: #ff6600;\">Note:<\/span> <\/strong>The Reference Frame does not need to be part of the transferred set of timeframes. Actually in most cases the timeframe 0 is not used by the imported Animation. So it can be used to create a matching pose. <div class=\"symple-toggle state-closed \"><h3 class=\"symple-toggle-trigger \">Create a reference Frame<\/h3><div class=\"symple-toggle-container symple-clearfix\"> The following approach is only one possible way to go. This works nicely when both the target rig and the Avastar rig use the same rest pose (namely the T-Pose). The workflow is as follows:<\/p>\n<ul>\n<li>Set the timeline to timeframe 0 (or any timeframe which is convenient for you)<\/li>\n<li>Ensure the Avastar Rig is in Rest pose.<\/li>\n<li>Open the Source Animation rig in pose mode<\/li>\n<li>Select all Pose bones<\/li>\n<li>Reset Scale, Rotation and Transformation of the source rig (ALT +S, ALT +R, ALT +G)<\/li>\n<li>In the Viewport press &#8220;i&#8221; and select &#8220;Rotation&#8221;. This creates a new keyframe for the Rest Pose.<\/li>\n<li>Ensure the RefFrame in the Motion Transfer Panel is set to the timeframe where you just added the T-Pose (timeframe 0)<\/li>\n<li>Now you are prepared to Transfer single poses or the entire Motion (see below)<\/li>\n<\/ul>\n<\/div><\/div>\n<h4 id=\"transfer_pose\">Transfer Pose<\/h4>\n<div class=\"row-fluid\">\n<div class=\"span6 rhcol\">Provided that the RefFrame contains the same Pose for the Animation Source Rig and the Avastar Target rig. In that case the Transfer Pose tool transfers the pose of the current timeframe from the Source rig to the currently selected Bones of Avastar Rig. You can select whichever timeframe you want to copy.<\/div>\n<div class=\"span6 rhcol\">This is the timeframe as it looks after the Pose has been transferred: <a href=\"\/\/blog.machinimatrix.org\/wp-content\/uploads\/2014\/08\/retarget_10.png\"><img loading=\"lazy\" decoding=\"async\" class=\"aligncenter size-full wp-image-22102\" src=\"\/\/blog.machinimatrix.org\/wp-content\/uploads\/2014\/08\/retarget_10.png\" alt=\"retarget_10\" width=\"325\" height=\"65\" \/><\/a><\/div>\n<\/div>\n<p><strong><span style=\"color: #ff6600;\">Note:<\/span><\/strong> Timeframe 0 contains the Reference pose, while timeframe 1 has been transferred from the imported animation to the Avastar timeline.<\/p>\n<div class=\"row-fluid\">\n<div class=\"span6 rhcol\">\n<div id=\"attachment_22100\" style=\"width: 440px\" class=\"wp-caption aligncenter\"><img loading=\"lazy\" decoding=\"async\" aria-describedby=\"caption-attachment-22100\" class=\"wp-image-22100\" src=\"\/\/blog.machinimatrix.org\/wp-content\/uploads\/2014\/08\/retarget_08.png\" alt=\"retarget_08\" width=\"430\" height=\"301\" \/><p id=\"caption-attachment-22100\" class=\"wp-caption-text\">Timeframe 1 before pose has been transferred<\/p><\/div>\n<\/div>\n<div class=\"span6 rhcol\">\n<div id=\"attachment_22101\" style=\"width: 442px\" class=\"wp-caption aligncenter\"><img loading=\"lazy\" decoding=\"async\" aria-describedby=\"caption-attachment-22101\" class=\"wp-image-22101\" src=\"\/\/blog.machinimatrix.org\/wp-content\/uploads\/2014\/08\/retarget_09.png\" alt=\"retarget_09\" width=\"432\" height=\"302\" \/><p id=\"caption-attachment-22101\" class=\"wp-caption-text\">Timeframe 1 after pose has been transferred<\/p><\/div>\n<\/div>\n<\/div>\n<h4 id=\"match_scales\">Match Scales<\/h4>\n<div class=\"row-fluid\">\n<div class=\"span6 rhcol\">The match scales function rescales the imported Animation rig such that it matches the Avastar rig. In detail the Rigs are compared in their Rest Pose. And actually it is the ratio of the Skeleton heights (Z) which determine the scale factor. Of course this approach only works when the Source Rig and the Avastar Rig have comparable topology.<\/div>\n<div class=\"span6 rhcol\"><a href=\"\/\/blog.machinimatrix.org\/wp-content\/uploads\/2014\/08\/retarget_11.png\"><img loading=\"lazy\" decoding=\"async\" class=\"aligncenter size-full wp-image-22107\" src=\"\/\/blog.machinimatrix.org\/wp-content\/uploads\/2014\/08\/retarget_11.png\" alt=\"retarget_11\" width=\"255\" height=\"99\" \/><\/a><\/div>\n<\/div>\n<div class=\"row-fluid\">\n<div class=\"span6 rhcol\">\n<div id=\"attachment_22108\" style=\"width: 440px\" class=\"wp-caption aligncenter\"><img loading=\"lazy\" decoding=\"async\" aria-describedby=\"caption-attachment-22108\" class=\"wp-image-22108\" src=\"\/\/blog.machinimatrix.org\/wp-content\/uploads\/2014\/08\/retarget_12.png\" alt=\"retarget_12\" width=\"430\" height=\"300\" \/><p id=\"caption-attachment-22108\" class=\"wp-caption-text\">Before <em><span style=\"color: #ff6600;\">Match Scales<\/span><\/em> has been applied<\/p><\/div>\n<\/div>\n<div class=\"span6 rhcol\">\n<div id=\"attachment_22109\" style=\"width: 440px\" class=\"wp-caption aligncenter\"><img loading=\"lazy\" decoding=\"async\" aria-describedby=\"caption-attachment-22109\" class=\"wp-image-22109\" src=\"\/\/blog.machinimatrix.org\/wp-content\/uploads\/2014\/08\/retarget_13.png\" alt=\"retarget_13\" width=\"430\" height=\"300\" \/><p id=\"caption-attachment-22109\" class=\"wp-caption-text\">After <em><span style=\"color: #ff6600;\">Match scales<\/span><\/em> has been applied<\/p><\/div>\n<\/div>\n<\/div>\n<p>&nbsp;<\/p>\n<h4>Make Seamless animations (experimental)<\/h4>\n<div class=\"row-fluid\">\n<div class=\"span6 rhcol\">This tool is used when you want to create a periodic Animation cycle. Lets assume your imported animation was not exactly created for looping. then this tool can be used to interpolate rotation changes and location changes such that the first frame and the last frame of the animation loop smoothly.<\/div>\n<div class=\"span6 rhcol\">\n<div id=\"attachment_22110\" style=\"width: 268px\" class=\"wp-caption aligncenter\"><img loading=\"lazy\" decoding=\"async\" aria-describedby=\"caption-attachment-22110\" class=\"wp-image-22110 size-full\" src=\"\/\/blog.machinimatrix.org\/wp-content\/uploads\/2014\/08\/retarget_14.png\" alt=\"retarget_14\" width=\"258\" height=\"122\" \/><p id=\"caption-attachment-22110\" class=\"wp-caption-text\">The numbers define the timeframe range over which the easing shall take place.<\/p><\/div>\n<\/div>\n<\/div>\n<h4>Simplify (experimental)<\/h4>\n<div class=\"row-fluid\">\n<div class=\"span6 rhcol\">\n<p>Simplify can be used to reduce the number of keyframes used in the imported Animation. We provide 3 options here:<\/p>\n<ul>\n<li>No Simplification (default)<\/li>\n<li>Lowes Global<\/li>\n<li>Lowes Local<\/li>\n<\/ul>\n<\/div>\n<div class=\"span6 rhcol\"><strong><span style=\"color: #ff6600;\">Note:<\/span> <\/strong>The Simplify feature makes only sense when your animation contains hundreds of keyframes. This mostly happens when you import motion captured animations. Handle this feature with care.<\/div>\n<\/div>\n<p>These simplification methods are described nicely by Eyuphan Bulut in a scientific paper about <a href=\"http:\/\/www.cs.rpi.edu\/~bulute\/cvbulut.pdf\" target=\"_blank\" rel=\"noopener noreferrer\">Keyframe extraction from Motion data<\/a><\/p>\n<h4 id=\"transfer_motion\">Transfer Motion<\/h4>\n<div class=\"row-fluid\">\n<div class=\"span6 rhcol\">The most important function in this panel is the Transfer Motion function. This will transfer the motion stored in your imported animation timeline to the Avastar timeline. You have to ensure that all parameters as explained above are correctly set. otherwise your animation will become distorted.<\/div>\n<div class=\"span6 rhcol\">\n<p><a href=\"\/\/blog.machinimatrix.org\/wp-content\/uploads\/2014\/08\/retarget_15.png\"><img loading=\"lazy\" decoding=\"async\" class=\"aligncenter size-full wp-image-22111\" src=\"\/\/blog.machinimatrix.org\/wp-content\/uploads\/2014\/08\/retarget_15.png\" alt=\"retarget_15\" width=\"259\" height=\"72\" \/><\/a><\/p>\n<div id=\"delete_motion\">The little white cross is a nice helper tool too. Lets say you have found your animation is broken in the Avastar timeline, then you can wipe it out by clicking on this erase button.<\/div>\n<\/div>\n<\/div>\n<p>&nbsp;<\/p>\n","protected":false},"excerpt":{"rendered":"<p>Motion Transfer Tools The Motion Transfer Tools are designed to transfer the Animation of an imported BVH file to an Avastar rig. So you will typically first create an Avastar character (the Target), then import the Animation, map it to Avastar, and finally transfer the Motion to the Avastar Timeline. In a Nutshell Create a [&hellip;]<\/p>\n","protected":false},"author":2,"featured_media":22075,"parent":3776,"menu_order":0,"comment_status":"closed","ping_status":"closed","template":"","meta":{"_et_pb_use_builder":"","_et_pb_old_content":"","_et_gb_content_width":"","footnotes":""},"categories":[4],"tags":[],"class_list":["post-517","page","type-page","status-publish","has-post-thumbnail","hentry","category-help"],"_links":{"self":[{"href":"https:\/\/avalab.org\/avastar\/279\/wp-json\/wp\/v2\/pages\/517","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/avalab.org\/avastar\/279\/wp-json\/wp\/v2\/pages"}],"about":[{"href":"https:\/\/avalab.org\/avastar\/279\/wp-json\/wp\/v2\/types\/page"}],"author":[{"embeddable":true,"href":"https:\/\/avalab.org\/avastar\/279\/wp-json\/wp\/v2\/users\/2"}],"replies":[{"embeddable":true,"href":"https:\/\/avalab.org\/avastar\/279\/wp-json\/wp\/v2\/comments?post=517"}],"version-history":[{"count":0,"href":"https:\/\/avalab.org\/avastar\/279\/wp-json\/wp\/v2\/pages\/517\/revisions"}],"up":[{"embeddable":true,"href":"https:\/\/avalab.org\/avastar\/279\/wp-json\/wp\/v2\/pages\/3776"}],"wp:featuredmedia":[{"embeddable":true,"href":"https:\/\/avalab.org\/avastar\/279\/wp-json\/"}],"wp:attachment":[{"href":"https:\/\/avalab.org\/avastar\/279\/wp-json\/wp\/v2\/media?parent=517"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/avalab.org\/avastar\/279\/wp-json\/wp\/v2\/categories?post=517"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/avalab.org\/avastar\/279\/wp-json\/wp\/v2\/tags?post=517"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}