<?xml version="1.0" encoding="utf-8" standalone="yes"?><rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom"><channel><title>Animation on GameSweetGame</title><link>https://gamesweetgame.com/en/tags/animation/</link><description>Recent content in Animation on GameSweetGame</description><generator>Hugo -- gohugo.io</generator><language>en</language><lastBuildDate>Thu, 19 Feb 2026 00:56:00 +0900</lastBuildDate><atom:link href="https://gamesweetgame.com/en/tags/animation/index.xml" rel="self" type="application/rss+xml"/><item><title>Adding Mixamo Control Rig in Blender</title><link>https://gamesweetgame.com/en/p/adding-mixamo-control-rig-in-blender/</link><pubDate>Thu, 19 Feb 2026 00:56:00 +0900</pubDate><guid>https://gamesweetgame.com/en/p/adding-mixamo-control-rig-in-blender/</guid><description>&lt;p&gt;There&amp;rsquo;s a Mixamo Control Rig addon for Blender.&lt;/p&gt;
&lt;p&gt;It makes editing animations super easy.&lt;/p&gt;
&lt;p&gt;Make sure to attach the control rig while the model is in T-Pose to minimize errors.&lt;/p&gt;</description></item><item><title>Extract Animation Clips from FBX in Unity</title><link>https://gamesweetgame.com/en/p/extract-animation-clips-from-fbx-in-unity/</link><pubDate>Tue, 10 Feb 2026 11:29:00 +0900</pubDate><guid>https://gamesweetgame.com/en/p/extract-animation-clips-from-fbx-in-unity/</guid><description>&lt;p&gt;Select the FBX file and press &lt;strong&gt;Ctrl+D&lt;/strong&gt; to duplicate just the animation clip.&lt;/p&gt;
&lt;p&gt;&lt;img alt="FBX animation extraction" loading="lazy" sizes="(max-width: 767px) calc(100vw - 30px), (max-width: 1023px) 700px, (max-width: 1279px) 950px, 1232px"&gt;&lt;/p&gt;
&lt;p&gt;Make sure to finalize all settings before extracting.&lt;/p&gt;</description></item><item><title>Edit Game Animations with Blender and Mixamo Rig</title><link>https://gamesweetgame.com/en/p/edit-game-animations-with-blender-and-mixamo-rig/</link><pubDate>Tue, 20 Jan 2026 12:00:00 +0900</pubDate><guid>https://gamesweetgame.com/en/p/edit-game-animations-with-blender-and-mixamo-rig/</guid><description>&lt;p&gt;I previously applied motion capture poses to a model, but they looked a bit awkward.&lt;/p&gt;
&lt;p&gt;(&lt;a class="link" href="https://gamesweetgame.com/en/posts/motion-capture-to-game/" &gt;Previous post: Applying Custom Animations to Your Game&lt;/a&gt;)&lt;/p&gt;
&lt;p&gt;Let&amp;rsquo;s edit the animation in Blender.&lt;/p&gt;
&lt;p&gt;After struggling with building bone controllers from scratch, I found something great — the &lt;a class="link" href="https://extensions.blender.org/add-ons/mixamo-rig/" target="_blank" rel="noopener"
 &gt;Mixamo Rig addon&lt;/a&gt;.&lt;/p&gt;
&lt;p&gt;&lt;img alt="Control rig created" loading="lazy" sizes="(max-width: 767px) calc(100vw - 30px), (max-width: 1023px) 700px, (max-width: 1279px) 950px, 1232px"&gt;&lt;/p&gt;
&lt;p&gt;With just one click, a control rig was generated. Easy.&lt;/p&gt;</description></item><item><title>Applying Custom Motion Capture Animations to Your Game</title><link>https://gamesweetgame.com/en/p/applying-custom-motion-capture-animations-to-your-game/</link><pubDate>Tue, 20 Jan 2026 11:00:00 +0900</pubDate><guid>https://gamesweetgame.com/en/p/applying-custom-motion-capture-animations-to-your-game/</guid><description>&lt;p&gt;I want to make a polished action game. Let&amp;rsquo;s custom-make the attack animations.&lt;/p&gt;
&lt;p&gt;I referenced this motion capture project on GitHub:&lt;/p&gt;
&lt;p&gt;&lt;a class="link" href="https://github.com/SAKTHIVINASH2/3D-Motion-Capture-From-Video" target="_blank" rel="noopener"
 &gt;GitHub - 3D Motion Capture From Video&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;Using a Python pose estimation library, you can extract keypoint coordinates for head, shoulders, arms, legs, etc. These coordinates are then converted for use in Unity.&lt;/p&gt;
&lt;h2 id="overall-flow"&gt;Overall Flow
&lt;/h2&gt;&lt;ul&gt;
&lt;li&gt;External pose data (33 keypoints)&lt;/li&gt;
&lt;li&gt;Convert to Unity coordinate system&lt;/li&gt;
&lt;li&gt;Point objects (P0~P32)&lt;/li&gt;
&lt;li&gt;Estimate rotation relative to bind direction&lt;/li&gt;
&lt;li&gt;Root direction (yaw + slight tilt) estimation with smoothing&lt;/li&gt;
&lt;/ul&gt;
&lt;h2 id="normalizing-file-values--axis-correction"&gt;Normalizing File Values + Axis Correction
&lt;/h2&gt;&lt;div class="highlight"&gt;&lt;pre tabindex="0" style="color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;-webkit-text-size-adjust:none;"&gt;&lt;code class="language-csharp" data-lang="csharp"&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#66d9ef"&gt;float&lt;/span&gt; px = &lt;span style="color:#66d9ef"&gt;float&lt;/span&gt;.Parse(toks[i * &lt;span style="color:#ae81ff"&gt;3&lt;/span&gt; + &lt;span style="color:#ae81ff"&gt;0&lt;/span&gt;]) / scaleXY;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#66d9ef"&gt;float&lt;/span&gt; py = &lt;span style="color:#66d9ef"&gt;float&lt;/span&gt;.Parse(toks[i * &lt;span style="color:#ae81ff"&gt;3&lt;/span&gt; + &lt;span style="color:#ae81ff"&gt;1&lt;/span&gt;]) / scaleXY;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#66d9ef"&gt;float&lt;/span&gt; pz = &lt;span style="color:#66d9ef"&gt;float&lt;/span&gt;.Parse(toks[i * &lt;span style="color:#ae81ff"&gt;3&lt;/span&gt; + &lt;span style="color:#ae81ff"&gt;2&lt;/span&gt;]) / scaleZ;
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;ul&gt;
&lt;li&gt;Different XY/Z scales: Video-based pose estimation has much more noise in depth (Z)&lt;/li&gt;
&lt;li&gt;invertZ: Corrects coordinate system difference between MediaPipe and Unity&lt;/li&gt;
&lt;/ul&gt;
&lt;h2 id="storing-bind-rotation"&gt;Storing Bind Rotation
&lt;/h2&gt;&lt;div class="highlight"&gt;&lt;pre tabindex="0" style="color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;-webkit-text-size-adjust:none;"&gt;&lt;code class="language-csharp" data-lang="csharp"&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;lUpperBind = lUpperArm.rotation;
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;Reference rotation from the T-Pose.&lt;/p&gt;
&lt;h2 id="automatic-bind-direction-estimation"&gt;Automatic Bind Direction Estimation
&lt;/h2&gt;&lt;div class="highlight"&gt;&lt;pre tabindex="0" style="color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;-webkit-text-size-adjust:none;"&gt;&lt;code class="language-csharp" data-lang="csharp"&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;lUpperBindDir = (lLowerArm.position - lUpperArm.position).normalized;
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;The core concept: &lt;strong&gt;which direction was this bone originally facing?&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;UpperArm → LowerArm direction = &lt;strong&gt;bone&amp;rsquo;s reference forward vector&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;&lt;img alt="Motion capture result" loading="lazy" sizes="(max-width: 767px) calc(100vw - 30px), (max-width: 1023px) 700px, (max-width: 1279px) 950px, 1232px"&gt;&lt;/p&gt;
&lt;p&gt;A bit rough, but the motion came through. Now it&amp;rsquo;s time to refine it in Blender.&lt;/p&gt;</description></item><item><title>Assimp FBX Model Loading &amp; Skinning Animation</title><link>https://gamesweetgame.com/en/p/assimp-fbx-model-loading-skinning-animation/</link><pubDate>Tue, 02 Jan 2024 00:00:00 +0900</pubDate><guid>https://gamesweetgame.com/en/p/assimp-fbx-model-loading-skinning-animation/</guid><description>
 &lt;blockquote&gt;
 &lt;p&gt;Current status: Implementing in a simple project structure first, then porting to the team engine.&lt;/p&gt;

 &lt;/blockquote&gt;
&lt;h2 id="version-issues"&gt;Version Issues
&lt;/h2&gt;&lt;p&gt;The bone count was way too high, so I tested by switching Assimp versions:&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Latest version (v143)&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;&lt;img alt="Latest version - 67 bones" loading="lazy" sizes="(max-width: 767px) calc(100vw - 30px), (max-width: 1023px) 700px, (max-width: 1279px) 950px, 1232px"&gt;&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;v140&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;&lt;img alt="v140 - 2 bones" loading="lazy" sizes="(max-width: 767px) calc(100vw - 30px), (max-width: 1023px) 700px, (max-width: 1279px) 950px, 1232px"&gt;&lt;/p&gt;
&lt;p&gt;This is from checking a single mesh. The latest version reports 67 bones, while the older version correctly shows 2.&lt;/p&gt;
&lt;h2 id="skinning-animation--head-and-arms-stretching-bug"&gt;Skinning Animation — Head and Arms Stretching Bug
&lt;/h2&gt;&lt;p&gt;Skinning animation works, but the head and arms stretch out way too long.&lt;/p&gt;
&lt;p&gt;&lt;img alt="Head/arms stretching" loading="lazy" sizes="(max-width: 767px) calc(100vw - 30px), (max-width: 1023px) 700px, (max-width: 1279px) 950px, 1232px"&gt;&lt;/p&gt;
&lt;p&gt;&lt;del&gt;After debugging for a while, I found that the bones in the FBX file were sticking out above the head.&lt;/del&gt;&lt;/p&gt;
&lt;p&gt;I experimented in Blender and confirmed that when vertex positions are slightly above the bones on the Y axis, the arms and hands stretch. Since my animation causes stretching, the bones must be slightly offset downward.&lt;/p&gt;
&lt;p&gt;&lt;img alt="Checking bone positions in Blender" loading="lazy" sizes="(max-width: 767px) calc(100vw - 30px), (max-width: 1023px) 700px, (max-width: 1279px) 950px, 1232px"&gt;&lt;/p&gt;
&lt;h2 id="model-lying-down-after-blender-export"&gt;Model Lying Down After Blender Export
&lt;/h2&gt;&lt;p&gt;Check the &lt;strong&gt;Y Up&lt;/strong&gt; option in the export settings.&lt;/p&gt;
&lt;p&gt;&lt;img alt="Blender export settings" loading="lazy" sizes="(max-width: 767px) calc(100vw - 30px), (max-width: 1023px) 700px, (max-width: 1279px) 950px, 1232px"&gt;&lt;/p&gt;
&lt;p&gt;If the model is still lying down, try changing Y Up to something else, export, then switch back to Y Up and export again. That fixed it.&lt;/p&gt;</description></item></channel></rss>