{"id":1238,"date":"2016-08-28T15:42:34","date_gmt":"2016-08-28T15:42:34","guid":{"rendered":"http:\/\/avastar.online\/?page_id=1238"},"modified":"2016-08-28T15:42:34","modified_gmt":"2016-08-28T15:42:34","slug":"the-sl-skeleton","status":"publish","type":"page","link":"https:\/\/avalab.org\/avastar\/300\/knowledge\/the-sl-skeleton\/","title":{"rendered":"The SL Skeleton"},"content":{"rendered":"<h2><image src=\"\/avastar\/292\/wp-content\/uploads\/2019\/08\/approve_logo_wip.png\" style=\"width:120px;vertical-align:middle;margin-left:0px;margin-right:10px;\"><\/image> The SL Skeleton<\/h2>\n<div class=\"row-fluid\">\n<div class=\"rhcol span6\"><img decoding=\"async\" class=\"aligncenter size-full wp-image-32834\" src=\"http:\/\/blog.machinimatrix.org\/wp-content\/uploads\/2012\/07\/reference-079.png\" alt=\"reference-079\" width=\"492\" height=\"417\" \/><\/div>\n<div class=\"rhcol span6\">\n<p>Creating the <a href=\"http:\/\/blog.machinimatrix.org\/avatar-workbench\/\">Avatar Workbench<\/a> and <a href=\"http:\/\/blog.machinimatrix.org\/avastar\/\">Avastar<\/a> has given us great insight on the SL avatar. The goal of this article is to give you detailed information about the construction of the Second Life avatar and what you can do with it.<\/p>\n<p>We will also talk about some areas where we simply do not know what happens, or where there are inconsistencies and the techniques are highly experimental. We&#8217;ll update the page as we learn more.<\/p>\n<\/div>\n<\/div>\n<p>This page includes the Bento Bone definitions which will come to the Second Life main grid sometime this year (2016)<\/p>\n<h3>In a nutshell&#8230;<\/h3>\n<p>The Second Life Skeleton supports:<\/p>\n<div class=\"row-fluid\">\n<div class=\"span6 rhcol\">\n<h4>Basic Bones<\/h4>\n<ul>\n<li>26 Basic bones<\/li>\n<li>32 Basic Attachment Points<\/li>\n<li>26 Collision Volumes<\/li>\n<\/ul>\n<\/div>\n<div class=\"span6 rhcol\">\n<h4>Extended Bones<\/h4>\n<ul>\n<li>104 Extended Bones<\/li>\n<li>13 Extended Attachment Points<\/li>\n<\/ul>\n<\/div>\n<\/div>\n<p>The Skeleton is further controlled by a set of 120 Shape parameters (Accessible via the Appearance Editor in the SL Viewer) to define the character&#8217;s general Shape (tall-tiny, fat-slim, muscular-shape, etc&#8230;)<\/p>\n<p><!--more--><\/p>\n<h2>Conceptual information<\/h2>\n<div class=\"row-fluid\">\n<div class=\"span6 rhcol\">\n<h3>The Base Skeleton<\/h3>\n<p>The skeleton uses 26 bones for driving<\/p>\n<ul>\n<li>the body (split into two meshes upper and lower),<\/li>\n<li>the head and hair meshes,<\/li>\n<li>the skirt mesh,<\/li>\n<li>the eye meshes.<\/li>\n<\/ul>\n<p><strong>Note:<\/strong> 5 Bones are not used for weighting of the System Avatar. The bone names are displayed in Cyan blue in the Listings below.<\/p>\n<\/div>\n<div class=\"span6 rhcol\">\n<h3>The 26 Base Bones<\/h3>\n<p><span style=\"color: #33cccc;\"><img decoding=\"async\" class=\"aligncenter size-full wp-image-22297\" src=\"http:\/\/blog.machinimatrix.org\/wp-content\/uploads\/2014\/09\/rigging_05.png\" alt=\"rigging_05\" width=\"289\" height=\"429\" \/><\/span><\/p>\n<\/div>\n<\/div>\n<p>The defined Base Bones are:<\/p>\n<div class=\"row-fluid\">\n<div class=\"span6 rhcol\">\n<ul>\n<li><span style=\"color: #33cccc;\">mEyeLeft<\/span><\/li>\n<li>mCollarLeft<\/li>\n<li>mShoulderLeft<\/li>\n<li>mElbowLeft<\/li>\n<li>mWristLeft<\/li>\n<li>mHipLeft<\/li>\n<li>mKneeLeft<\/li>\n<li>mAnkleLeft<\/li>\n<li>mFootLeft<\/li>\n<li><span style=\"color: #33cccc;\">mToeLeft<\/span><\/li>\n<\/ul>\n<ul>\n<li><span style=\"color: #33cccc;\">mSkull<\/span><\/li>\n<li>mHead<\/li>\n<li>mNeck<\/li>\n<li>mChest<\/li>\n<li>mTorso<\/li>\n<li>mPelvis<\/li>\n<\/ul>\n<\/div>\n<div class=\"span6 rhcol\">\n<ul>\n<li><span style=\"color: #33cccc;\">mEyeRight<\/span><\/li>\n<li>mCollarRight<\/li>\n<li>mShoulderRight<\/li>\n<li>mElbowRight<\/li>\n<li>mWristRight<\/li>\n<li>mHipRight<\/li>\n<li>mKneeRight<\/li>\n<li>mAnkleRight<\/li>\n<li>mFootRight<\/li>\n<li><span style=\"color: #33cccc;\">mToeRight<\/span><\/li>\n<\/ul>\n<\/div>\n<\/div>\n<p>So only 21 base bones are effectively used to create animations for the system Avatar, and only these bones are associated with weighting information for the Base Bones of the Avatar. That is, even if you animate the remaining 5 bones, the animation will not contribute any skin movement to the system Avatar.<\/p>\n<p>However, we will see later that you can use all 26 bones for weighting and animating your own custom meshes.<\/p>\n<div class=\"symple-box  yellow center \" style=\"text-align:left;width: 80%;\"> Side note: Mesh attachments and complete Mesh characters are handled in exactly the same way, so whatever is true for Mesh attachments is also valid for complete characters.<\/div>\n<h3>The Extended Skeleton<\/h3>\n<p>The Basic Skeleton is only capable to animate very simple movements. Large portions of the mesh are simply left out and can not be animated in detail (at least not directly, see below) Especially non human creatures can not be nicely animated only with the base Skeleton. This gap is filled by the Extended Bones, a set of 104 extra Bones which are organized into 5 Subsets:<\/p>\n<h4>Face Bones: (44 regular bones + Face Root)<\/h4>\n<div class=\"row-fluid\">\n<div class=\"span6 rhcol\">\n<p>The face rig is connected to the SL Appearance Sliders. That is the Face bones move along with the Appearance sliders. So if your mesh characters are weighted to the Face bones, then many of the face appearance sliders now also affect your character look.<\/p>\n<p>But note that the shape sliders affect bone location (bone translation). So the face shape may be affected by custom animations as well (see below for details).<\/p>\n<\/div>\n<div class=\"span6 rhcol\"><img decoding=\"async\" class=\"aligncenter size-full wp-image-32813\" src=\"http:\/\/blog.machinimatrix.org\/wp-content\/uploads\/2012\/07\/reference-073.png\" alt=\"reference-073\" width=\"916\" height=\"557\" \/><\/div>\n<\/div>\n<div class=\"symple-toggle state-closed \"><h3 class=\"symple-toggle-trigger \">Avastar: Face Weight Generator<\/h3><div class=\"symple-toggle-container symple-clearfix\">\n<p>We have created a Face Weight generator, a tool that is aimed to help creating weights more easy. However this tool is a bit experimental. It might work well or not for your particular mesh creations.<\/p>\n<h4>Calling the Face Map Generator<\/h4>\n<div class=\"row-fluid\">\n<div class=\"span6 rhcol\">\n<p>You find the generator in the Weight Map Control panel within the Toolshelf (You need to open the Avastar vertical Tab first and your mesh must be in weight paint mode)<\/p>\n<\/div>\n<div class=\"span6 rhcol\"><img decoding=\"async\" class=\"aligncenter size-full wp-image-32866\" src=\"http:\/\/blog.machinimatrix.org\/wp-content\/uploads\/2012\/07\/reference-081.jpg\" alt=\"reference-081\" width=\"234\" height=\"166\" \/><\/div>\n<\/div>\n<h4>Tweaking the Maps<\/h4>\n<div class=\"row-fluid\">\n<div class=\"span6 rhcol\">\n<p>Once you called the Generator it will operate on the weight maps for the selected bones and when done it opens an Operator Redo panel at the bottom of the Tool shelf. There you can tweak the parameters further to optimize your weight maps.<\/p>\n<\/div>\n<div class=\"span6 rhcol\">\n<p><img decoding=\"async\" class=\"aligncenter size-full wp-image-32872\" src=\"http:\/\/blog.machinimatrix.org\/wp-content\/uploads\/2012\/07\/reference-080.png\" alt=\"reference-080\" width=\"274\" height=\"224\" \/><\/p>\n<\/div>\n<\/div>\n<\/div><\/div>\n<div class=\"symple-toggle state-closed \"><h3 class=\"symple-toggle-trigger \">An animation pitfall<\/h3><div class=\"symple-toggle-container symple-clearfix\">\n<p>The Face bones are used by the appearance slider system to adjust the facial shape also for mesh heads. But the bones are also moved by the Second Life animation system. This results in a possible dependency between the Face Shape and facial animations (smile, frown, &#8230;).<\/p>\n<div class=\"row-fluid\">\n<div class=\"span6 rhcol\">\n<h4>Rotation Animation<\/h4>\n<p>As long as an animation only uses bone rotations the animation plays on top of the shape and the facial shape will be more or less preserved while the animation plays.<\/p>\n<\/div>\n<div class=\"span6 rhcol\">\n<h4>Translation Animation<\/h4>\n<p>The SL animation system also allows to use Translation animation. However this interferes strongly with the appearance slider system.<\/p>\n<p style=\"padding-left: 60px;\"><strong><span style=\"color: #ff6600;\">An animation that modifies bone location while playing will always destroy the face shape while playing.<\/span><\/strong><\/p>\n<\/div>\n<\/div>\n<div class=\"symple-box  yellow center \" style=\"text-align:left;\"> We recommend that you use only rotation animation when you attempt to create reusable (shape independent) animations.<\/div>\n<h4>Note for Avastar users<\/h4>\n<div class=\"row-fluid\">\n<div class=\"span6 rhcol\">\n<p>You can enforce to export only rotation channels when you use the Avastar .anim (or .bvh) exporter (see image):<\/p>\n<p>When you disable the Option &#8220;Use Translations&#8221; then the exporter only exports rotation information. But note, this can potentially end up with unexpected results when you later play the animation on your character.<\/p>\n<p>side note: We may need to add some work into the exporter to map transition changes into bone rotation changes (which can be done if the local root bones are not moved)<\/p>\n<\/div>\n<div class=\"span6 rhcol\">\n<p><img decoding=\"async\" class=\"aligncenter size-full wp-image-32905\" src=\"http:\/\/blog.machinimatrix.org\/wp-content\/uploads\/2012\/07\/reference-082.png\" alt=\"reference-082\" width=\"251\" height=\"328\" \/><\/p>\n<\/div>\n<\/div>\n<\/div><\/div>\n<h4>Face Bones (46)<\/h4>\n<div class=\"row-fluid\">\n<div class=\"rhcol span6\">\n<ul>\n<li>mFaceEyeAltLeft<\/li>\n<li>mFaceForeheadLeft<\/li>\n<li>mFaceEyebrowOuterLeft<\/li>\n<li>mFaceEyebrowCenterLeft<\/li>\n<li>mFaceEyebrowInnerLeft<\/li>\n<li>mFaceEyeLidUpperLeft<\/li>\n<li>mFaceEyeLidLowerLeft<\/li>\n<li>mFaceEyecornerInnerLeft<\/li>\n<li>mFaceEar1Left<\/li>\n<li>mFaceEar2Left<\/li>\n<li>mFaceNoseLeft<\/li>\n<li>mFaceCheekLowerLeft<\/li>\n<li>mFaceCheekUpperLeft<\/li>\n<li>mFaceLipUpperLeft<\/li>\n<li>mFaceLipCornerLeft<\/li>\n<li>mFaceLipLowerLeft<\/li>\n<\/ul>\n<ul>\n<li>mFaceRoot<\/li>\n<li>mFaceForeheadCenter<\/li>\n<li>mFaceNoseCenter<\/li>\n<li>mFaceNoseBridge<\/li>\n<li>mFaceNoseBase<\/li>\n<li>mFaceLipLowerCenter<\/li>\n<li>mFaceLipUpperCenter<\/li>\n<li>mFaceJaw<\/li>\n<li>mFaceJawShaper<\/li>\n<li>mFaceChin<\/li>\n<li>mFaceTeethLower<\/li>\n<li>mFaceTeethUpper<\/li>\n<li>mFaceTongueBase<\/li>\n<li>mFaceTongueTip<\/li>\n<\/ul>\n<\/div>\n<div class=\"rhcol span6\">\n<ul>\n<li>mFaceEyeAltRight<\/li>\n<li>mFaceForeheadRight<\/li>\n<li>mFaceEyebrowOuterRight<\/li>\n<li>mFaceEyebrowCenterRight<\/li>\n<li>mFaceEyebrowInnerRight<\/li>\n<li>mFaceEyeLidUpperRight<\/li>\n<li>mFaceEyeLidLowerRight<\/li>\n<li>mFaceEyecornerInnerRight<\/li>\n<li>mFaceEar1Right<\/li>\n<li>mFaceEar2Right<\/li>\n<li>mFaceNoseRight<\/li>\n<li>mFaceCheekLowerRight<\/li>\n<li>mFaceCheekUpperRight<\/li>\n<li>mFaceLipUpperRight<\/li>\n<li>mFaceLipCornerRight<\/li>\n<li>mFaceLipLowerRight<\/li>\n<\/ul>\n<\/div>\n<\/div>\n<h4>Hand Bones (15 per Hand)<\/h4>\n<div class=\"row-fluid\">\n<div class=\"span6 rhcol\">The hand bones are very closely adjusted to the System character hands. This will allow to create animations for hand gestures very similar to what the System character can do. But since animations are completely free, you can animate the hands to do whatever you like.<\/div>\n<div class=\"span6 rhcol\">\n<p><img decoding=\"async\" class=\"aligncenter size-full wp-image-32814\" src=\"http:\/\/blog.machinimatrix.org\/wp-content\/uploads\/2012\/07\/reference-074.png\" alt=\"reference-074\" width=\"715\" height=\"557\" \/><\/p>\n<\/div>\n<\/div>\n<div class=\"symple-toggle state-closed \"><h3 class=\"symple-toggle-trigger \">Avastar: Constrained FK and IK Rig<\/h3><div class=\"symple-toggle-container symple-clearfix\">\n<p>When you use Avastar then you get 2 extra features for easy hand animation creation, that is:<\/p>\n<ul>\n<li>Constrained FK: Allows you to curl fingers in a natural way by grabbing the finger root bone and rotate it along the bone&#8217;s local X axis<\/li>\n<li>IK: Allows to place IK targets to which the finger tips approach (and keep glued to)<\/li>\n<\/ul>\n<\/div><\/div>\n<p>The hand Bones are:<\/p>\n<div class=\"row-fluid\">\n<div class=\"rhcol span6\">\n<ul>\n<li>mHandMiddle1Left<\/li>\n<li>mHandMiddle2Left<\/li>\n<li>mHandMiddle3Left<\/li>\n<li>mHandIndex1Left<\/li>\n<li>mHandIndex2Left<\/li>\n<li>mHandIndex3Left<\/li>\n<li>mHandRing1Left<\/li>\n<li>mHandRing2Left<\/li>\n<li>mHandRing3Left<\/li>\n<li>mHandPinky1Left<\/li>\n<li>mHandPinky2Left<\/li>\n<li>mHandPinky3Left<\/li>\n<li>mHandThumb1Left<\/li>\n<li>mHandThumb2Left<\/li>\n<li>mHandThumb3Left<\/li>\n<\/ul>\n<\/div>\n<div class=\"rhcol span6\">\n<ul>\n<li>mHandMiddle1Right<\/li>\n<li>mHandMiddle2Right<\/li>\n<li>mHandMiddle3Right<\/li>\n<li>mHandIndex1Right<\/li>\n<li>mHandIndex2Right<\/li>\n<li>mHandIndex3Right<\/li>\n<li>mHandRing1Right<\/li>\n<li>mHandRing2Right<\/li>\n<li>mHandRing3Right<\/li>\n<li>mHandPinky1Right<\/li>\n<li>mHandPinky2Right<\/li>\n<li>mHandPinky3Right<\/li>\n<li>mHandThumb1Right<\/li>\n<li>mHandThumb2Right<\/li>\n<li>mHandThumb3Right<\/li>\n<\/ul>\n<\/div>\n<\/div>\n<h4>Tail Bones (6)<\/h4>\n<div class=\"row-fluid\">\n<div class=\"span6 rhcol\">\n<p>Not much to say here.<\/p>\n<\/div>\n<div class=\"span6 rhcol\"><img decoding=\"async\" class=\"aligncenter size-full wp-image-32815\" src=\"http:\/\/blog.machinimatrix.org\/wp-content\/uploads\/2012\/07\/reference-075.png\" alt=\"reference-075\" width=\"715\" height=\"557\" \/><\/div>\n<\/div>\n<div class=\"symple-toggle state-closed \"><h3 class=\"symple-toggle-trigger \">Avastar: IK Rig<\/h3><div class=\"symple-toggle-container symple-clearfix\">\n<p>When you use Avastar then you also get an IK Meta rig for the tail: Just grab and move the tip around and the other bones follow nicely.<\/p>\n<\/div><\/div>\n<p>The tail Bones are:<\/p>\n<div class=\"row-fluid\">\n<div class=\"rhcol span12\">\n<ul>\n<li>mTail1<\/li>\n<li>mTail2<\/li>\n<li>mTail3<\/li>\n<li>mTail4<\/li>\n<li>mTail5<\/li>\n<li>mTail6<\/li>\n<\/ul>\n<\/div>\n<\/div>\n<h4>Hind Bones (2*4 plus Hind Root Bone)<\/h4>\n<div class=\"row-fluid\">\n<div class=\"span6 rhcol\">Not sure how we will support this within Avastar (We need to do some experiments first, maybe add IK Targets for the hind feet?)<\/div>\n<div class=\"span6 rhcol\">\n<p><img decoding=\"async\" class=\"aligncenter size-full wp-image-32816\" src=\"http:\/\/blog.machinimatrix.org\/wp-content\/uploads\/2012\/07\/reference-076.png\" alt=\"reference-076\" width=\"665\" height=\"557\" \/><\/p>\n<\/div>\n<\/div>\n<div class=\"row-fluid\">\n<div class=\"rhcol span6\">\n<ul>\n<li>mHindLimb1Left<\/li>\n<li>mHindLimb2Left<\/li>\n<li>mHindLimb3Left<\/li>\n<li>mHindLimb4Left<\/li>\n<\/ul>\n<ul>\n<li>mHindLimbsRoot<\/li>\n<\/ul>\n<\/div>\n<div class=\"rhcol span6\">\n<ul>\n<li>mHindLimb1Right<\/li>\n<li>mHindLimb2Right<\/li>\n<li>mHindLimb3Right<\/li>\n<li>mHindLimb4Right<\/li>\n<\/ul>\n<\/div>\n<\/div>\n<h4>Wing Bones (2*5 plus Wing Root Bone)<\/h4>\n<div class=\"row-fluid\">\n<div class=\"span6 rhcol\">Not much to say here.<\/div>\n<div class=\"span6 rhcol\">\n<p><img decoding=\"async\" class=\"aligncenter size-full wp-image-32818\" src=\"http:\/\/blog.machinimatrix.org\/wp-content\/uploads\/2012\/07\/reference-077.png\" alt=\"reference-077\" width=\"717\" height=\"557\" \/><\/p>\n<\/div>\n<\/div>\n<div class=\"symple-toggle state-closed \"><h3 class=\"symple-toggle-trigger \">Avastar: IK Rig<\/h3><div class=\"symple-toggle-container symple-clearfix\">\n<p>When you use Avastar then you an IK Meta rig for the Wings: Just grab and move the tips around and the other bones follow nicely.<\/p>\n<\/div><\/div>\n<p>The Wing Bones are:<\/p>\n<div class=\"row-fluid\">\n<div class=\"rhcol span6\">\n<ul>\n<li>mWing1Left<\/li>\n<li>mWing2Left<\/li>\n<li>mWing3Left<\/li>\n<li>mWing4Left<\/li>\n<li>mWing4FanLeft<\/li>\n<\/ul>\n<ul>\n<li>mWingsRoot<\/li>\n<\/ul>\n<\/div>\n<div class=\"rhcol span6\">\n<ul>\n<li>mWing1Right<\/li>\n<li>mWing2Right<\/li>\n<li>mWing3Right<\/li>\n<li>mWing4Right<\/li>\n<li>mWing4FanRight<\/li>\n<\/ul>\n<\/div>\n<\/div>\n<h4>Spine &amp; Groin (4+1)<\/h4>\n<div class=\"row-fluid\">\n<div class=\"span6 rhcol\"><span style=\"color: #ff6600;\"><strong>Note:<\/strong><\/span> The Spine bones are folded into the legacy Skeleton and can be unfolded for custom rigs (you need to upload with Joint Positions enabled in that case)<\/div>\n<div class=\"span6 rhcol\">\n<p><img decoding=\"async\" class=\"aligncenter size-full wp-image-32821\" src=\"http:\/\/blog.machinimatrix.org\/wp-content\/uploads\/2012\/07\/reference-078.png\" alt=\"reference-078\" width=\"795\" height=\"557\" \/><\/p>\n<\/div>\n<\/div>\n<p>The Extra Spine and Groin bones are:<\/p>\n<div class=\"row-fluid\">\n<div class=\"rhcol span12\">\n<ul>\n<li>mGroin<\/li>\n<li>mSpine1<\/li>\n<li>mspine2<\/li>\n<li>mSpine3<\/li>\n<li>mSpine4<\/li>\n<\/ul>\n<\/div>\n<\/div>\n<h3>120 Appearance parameters<\/h3>\n<div class=\"row-fluid\">\n<div class=\"rhcol span8\">\n<p>The character can be shaped to a large extent by using the SL appearance editor. The shape parameters can be changed by use of shape sliders.<\/p>\n<p>Within the appearance editor you find 3 sections with 23 shape parameters for the body, torso, and legs. Another 6 sections with 55 shape parameters for eyes, ears, and mouth, as well as for the nose, chin, and the head form. In addition there are 42 controls for the clothes morphs.<\/p>\n<\/div>\n<div class=\"rhcol span4\">\n<table style=\"width: 1px;\" border=\"0\">\n<tbody>\n<tr>\n<td><span style=\"color: #ff6600;\"><strong>Body<\/strong><\/span><\/td>\n<td>3<\/td>\n<td><span style=\"color: #ff6600;\"><strong>Shirt<\/strong><\/span><\/td>\n<td>7<\/td>\n<\/tr>\n<tr>\n<td><span style=\"color: #ff6600;\"><strong>Torso<\/strong><\/span><\/td>\n<td>12<\/td>\n<td><span style=\"color: #ff6600;\"><strong>Pants<\/strong><\/span><\/td>\n<td>6<\/td>\n<\/tr>\n<tr>\n<td><span style=\"color: #ff6600;\"><strong>Legs<\/strong><\/span><\/td>\n<td>8<\/td>\n<td><span style=\"color: #ff6600;\"><strong>Socks<\/strong><\/span><\/td>\n<td>1<\/td>\n<\/tr>\n<tr>\n<td><\/td>\n<td><\/td>\n<td><span style=\"color: #ff6600;\"><strong>Shoes<\/strong><\/span><\/td>\n<td>7<\/td>\n<\/tr>\n<tr>\n<td><span style=\"color: #ff6600;\"><strong>Head<\/strong><\/span><\/td>\n<td>11<\/td>\n<td><span style=\"color: #ff6600;\"><strong>Jacket<\/strong><\/span><\/td>\n<td>6<\/td>\n<\/tr>\n<tr>\n<td><span style=\"color: #ff6600;\"><strong>Eyes<\/strong><\/span><\/td>\n<td>11<\/td>\n<td><span style=\"color: #ff6600;\"><strong>Skirt<\/strong><\/span><\/td>\n<td>7<\/td>\n<\/tr>\n<tr>\n<td><span style=\"color: #ff6600;\"><strong>Ears<\/strong><\/span><\/td>\n<td>4<\/td>\n<td><span style=\"color: #ff6600;\"><strong>Gloves<\/strong><\/span><\/td>\n<td>2<\/td>\n<\/tr>\n<tr>\n<td><span style=\"color: #ff6600;\"><strong>Nose<\/strong><\/span><\/td>\n<td>11<\/td>\n<td><span style=\"color: #ff6600;\"><strong>Undershirt<\/strong><\/span><\/td>\n<td>4<\/td>\n<\/tr>\n<tr>\n<td><span style=\"color: #ff6600;\"><strong>Mouth<\/strong><\/span><\/td>\n<td>9<\/td>\n<td><span style=\"color: #ff6600;\"><strong>Underpants<\/strong><\/span><\/td>\n<td>2<\/td>\n<\/tr>\n<tr>\n<td><span style=\"color: #ff6600;\"><strong>Chin<\/strong><\/span><\/td>\n<td>9<\/td>\n<td><\/td>\n<td><\/td>\n<\/tr>\n<\/tbody>\n<\/table>\n<\/div>\n<\/div>\n<div class=\"row-fluid\">\n<div class=\"span6 rhcol\">\n<p>When you just work with the default avatar, then you can create small and fat avatars as well as large and slim characters only by adjusting the shape parameters according to your taste. You can do all of that in your Viewer without need to use an external 3D tool.<\/p>\n<p>However, when you use Custom Meshes then some different rules apply&#8230;<\/p>\n<\/div>\n<div class=\"span6 rhcol\">\n<p><a href=\"http:\/\/blog.machinimatrix.org\/wp-content\/uploads\/2012\/07\/morphs.png\"><img decoding=\"async\" class=\"size-full wp-image-10955 aligncenter\" title=\"morphs\" src=\"http:\/\/blog.machinimatrix.org\/wp-content\/uploads\/2012\/07\/morphs.png\" alt=\"\" width=\"309\" height=\"336\" \/><\/a><\/p>\n<\/div>\n<\/div>\n<h3>Mesh and Appearance Sliders<\/h3>\n<p>If your 3D world supports mesh items (like Second Life, OpenSim, RealExtend, inWorldz and others&#8230;), you also can create your own character meshes. You can create mesh based attachments for either the standard character or for your own mesh based characters.<\/p>\n<div class=\"symple-box  yellow center \" style=\"text-align:left;width: 80%;\"> But keep in mind that your own mesh creations react differently to the Shape keys.<\/div>\n<p>In fact only the bone changing shape parameters influence the mesh based attachments and characters. That is, mesh attachments can not be fully customized by using the Shape sliders. This restriction can be a major problem with mesh attachments.<\/p>\n<div class=\"row-fluid\">\n<div class=\"span6 rhcol\">\n<h3>Shape and Skeleton matching<\/h3>\n<p>It is important to always remind that your Avatar Shape settings in your viewer effectively change your skeleton&#8217;s joint positions and Bone Scales. This is controlled via 20 of the available shape parameters (appearance sliders) for the Legacy Skeleton and 40 additional parameters for the Extended Skeleton (mostly for the Face expressions and Hands).<\/p>\n<p>So if you want to create a specific mesh attachment for a specific shape then you need to know exactly how the shape values are related to the joint positions (and bone scales) of your particular shape. But this information is normally not available outside of Second Life.<\/p>\n<p>Fortunately you can get around this problem by using the <em><span style=\"color: #ff6600;\">SL Restpose<\/span><\/em> for your work in your 3D Editor. However this means you create your content by using the Second Life Restpose which does never match the actual Shape that you use in Second Life.<\/p>\n<p>Actually we want to create attachments which can be adjusted (fitted) to any shape. This is where the <em><span style=\"color: #ff6600;\">Fitted Mesh <\/span><\/em>addition steps in. The basic idea is to let more Appearance sliders control the mesh. This is done by using the Fitted Mesh bones, or more precisely the <em><span style=\"color: #ff6600;\">Collision Volume Bones<\/span><\/em> to the mesh.<\/p>\n<\/div>\n<div class=\"span6 rhcol\">\n<h3>Shape parameters influencing the Base skeleton<\/h3>\n<table class=\"split\" border=\"0\">\n<tbody>\n<tr>\n<td>The list of bone length changing Shape keys. Please note, the shape keys marked in orange do also influence the Collision Volumes (see next chapter)<\/p>\n<table border=\"0\">\n<tbody>\n<tr>\n<td><span style=\"color: #ff6600;\"><strong>Section<\/strong><\/span><\/td>\n<td>Shape parameters<\/td>\n<\/tr>\n<tr>\n<td><span style=\"color: #ff6600;\"><strong>Body<\/strong><\/span><\/td>\n<td><span style=\"color: #ff6600;\">Height<\/span>,<span style=\"color: #ff6600;\"> Body thickness<\/span><\/td>\n<\/tr>\n<tr>\n<td><span style=\"color: #ff6600;\"><strong>Head<\/strong><\/span><\/td>\n<td><span style=\"color: #ff6600;\">Head Size<\/span>, Head Shape, <span style=\"color: #ff6600;\">Head Length<\/span>, Face Shear<\/td>\n<\/tr>\n<tr>\n<td><span style=\"color: #ff6600;\"><strong>Eyes<\/strong><\/span><\/td>\n<td>Eye Size, Eye Spacing, Eye depth<\/td>\n<\/tr>\n<tr>\n<td><span style=\"color: #ff6600;\"><strong>Torso<\/strong><\/span><\/td>\n<td><span style=\"color: #ff6600;\">Neck Thickness<\/span>, <span style=\"color: #ff6600;\">Neck Length<\/span>, <span style=\"color: #ff6600;\">Shoulders<\/span>, <span style=\"color: #ff6600;\">Arm Length<\/span>, <span style=\"color: #ff6600;\">Hand Size<\/span>, <span style=\"color: #ff6600;\">Torso Length<\/span><\/td>\n<\/tr>\n<tr>\n<td><span style=\"color: #ff6600;\"><strong>Legs<\/strong><\/span><\/td>\n<td><span style=\"color: #ff6600;\">Leg Length<\/span>, <span style=\"color: #ff6600;\">Hip Width<\/span>, <span style=\"color: #ff6600;\">Hip Length<\/span><\/td>\n<\/tr>\n<tr>\n<td><span style=\"color: #ff6600;\"><strong>Shoes<\/strong><\/span><\/td>\n<td>Heel Height, Platform Height<\/td>\n<\/tr>\n<\/tbody>\n<\/table>\n<\/td>\n<\/tr>\n<\/tbody>\n<\/table>\n<\/div>\n<\/div>\n<h3>Collision Volumes (Fitted Mesh)<\/h3>\n<div class=\"row-fluid\">\n<div class=\"span6 rhcol\">\n<p>The default avatar uses 24 additional so called Collision Volumes. These are simplified mesh volumes for calculating when an object or another avatar is bumping into a character. In fact the Collision Volumes are a set of 24 Octahedrons which get influenced by various shape sliders.<\/p>\n<p>Interestingly these volumes are also counted as full bones, and they can be animated and weighted just like the standard bones. The most interesting property of these bones is that they get moved and scaled by some of the shape keys. Weighting mesh clothes or avatars to these bones means they will respond to the Shape keys, for example Torso muscles.<\/p>\n<p>But note that only a very small fraction of the Shape sliders actually does influence the Collision Volumes. thus you can not expect to get a full control over your mesh object by using the Collision volumes. for example changing the breast shape is not at all mapped to collision volumes. As well as facial expressions are not supported.<\/p>\n<\/div>\n<div class=\"span6 rhcol\"><strong>All 24 available collision volumes:<\/strong><\/div>\n<div class=\"span6 rhcol\">PELVIS, BELLY, BUTT, LEFT_PEC, RIGHT_PEC, CHEST, LEFT_HANDLE, RIGHT_HANDLE, NECK, HEAD, L_CLAVICLE, L_UPPER_ARM, L_LOWER_ARM, L_HAND, R_CLAVICLE, R_UPPER_ARM, R_LOWER_ARM, R_HAND, L_UPPER_LEG, L_LOWER_LEG, L_FOOT, R_UPPER_LEG, R_LOWER_LEG, L_FOOT<br \/>\n<a href=\"http:\/\/blog.machinimatrix.org\/wp-content\/uploads\/2012\/07\/collision_shapes.png\"><img decoding=\"async\" class=\"aligncenter\" title=\"collision_shapes\" src=\"http:\/\/blog.machinimatrix.org\/wp-content\/uploads\/2012\/07\/collision_shapes.png\" alt=\"\" width=\"275\" height=\"446\" \/><\/a><\/div>\n<\/div>\n<div class=\"row-fluid\">\n<div class=\"span6 rhcol\">\n<h4>Shape keys and the Collision Volumes<\/h4>\n<p>This is the list of Shape keys which do affect the Collision Volumes. Please note, the shape keys marked in orange do also influence the Bone length (see previous chapter)<\/p>\n<\/div>\n<div class=\"span6 rhcol\">\n<table border=\"0\">\n<tbody>\n<tr>\n<td style=\"width: 0;\"><span style=\"color: #ff6600;\"><strong>Body<\/strong><\/span><\/td>\n<td style=\"width: 100%;\"><span style=\"color: #ff6600;\">Height<\/span>, <span style=\"color: #ff6600;\">Body Thickness<\/span>, Body fat<\/td>\n<\/tr>\n<tr>\n<td style=\"width: 0;\"><span style=\"color: #ff6600;\"><strong>Head<\/strong><\/span><\/td>\n<td><span style=\"color: #ff6600;\">Head Size<\/span>, Head Stretch, <span style=\"color: #ff6600;\">Head Length<\/span><\/td>\n<\/tr>\n<tr>\n<td style=\"width: 0;\"><span style=\"color: #ff6600;\"><strong>Torso<\/strong><\/span><\/td>\n<td>Torso Muscles, <span style=\"color: #ff6600;\">Neck Thickness<\/span>, <span style=\"color: #ff6600;\">Neck Length<\/span>, <span style=\"color: #ff6600;\">Shoulders<\/span>, <span style=\"color: #ff6600;\">Arm Length<\/span>, <span style=\"color: #ff6600;\">Hand Size<\/span>, <span style=\"color: #ff6600;\">Torso Length<\/span>, Love handles, Belly Size<\/td>\n<\/tr>\n<tr>\n<td style=\"width: 0;\"><span style=\"color: #ff6600;\"><strong>Legs<\/strong><\/span><\/td>\n<td>Leg Muscles,<span style=\"color: #ff6600;\"> Leg Length<\/span>, <span style=\"color: #ff6600;\">Hip width<\/span>, <span style=\"color: #ff6600;\">Hip Length<\/span>, Butt Size, Saddle Bags, Knee Angle, Foot Size<\/td>\n<\/tr>\n<\/tbody>\n<\/table>\n<\/div>\n<\/div>\n<h2 id=\"joint-positions\"><image src=\"\/avastar\/292\/wp-content\/uploads\/2019\/08\/approve_logo_wip.png\" style=\"width:120px;vertical-align:middle;margin-left:0px;margin-right:10px;\"><\/image> Modifying the Skeleton<\/h2>\n<div class=\"row-fluid\">\n<div class=\"rhcol span7\">\n<p>We already know that we can modify the Second Life default Skeleton by using the Appearance Sliders. But this is not all we can do. In fact it is possible to rearrange the Skeleton in any way we want. There are only 3 basic rules:<\/p>\n<ul>\n<li>We can only use the existing set of Joints (bones).<br \/>\nWe can not add new joints to the Skeleton.<\/li>\n<li>We must keep the hierarchical Joint structure as it is.<br \/>\nWe can not rearrange the joint hierarchy of the Skeleton.<\/li>\n<li>We are free to move the existing Joints wherever we want.<\/li>\n<\/ul>\n<\/div>\n<div class=\"rhcol span5\"><a href=\"https:\/\/avalab.org\/avastar\/300\/wp-content\/uploads\/2019\/03\/Image763.png\"><img decoding=\"async\" class=\"aligncenter size-full wp-image-4950\" src=\"https:\/\/avalab.org\/avastar\/300\/wp-content\/uploads\/2019\/03\/Image763.png\" alt=\"\" width=\"1034\" height=\"812\" srcset=\"https:\/\/avalab.org\/avastar\/300\/wp-content\/uploads\/2019\/03\/Image763.png 1034w, https:\/\/avalab.org\/avastar\/300\/wp-content\/uploads\/2019\/03\/Image763-300x236.png 300w, https:\/\/avalab.org\/avastar\/300\/wp-content\/uploads\/2019\/03\/Image763-1024x804.png 1024w, https:\/\/avalab.org\/avastar\/300\/wp-content\/uploads\/2019\/03\/Image763-768x603.png 768w\" sizes=\"(max-width: 1034px) 100vw, 1034px\" \/><\/a><\/div>\n<\/div>\n<p>In first place this might sound like a strong limitation. But you quickly see that you can create a wide variety of creatures only by rearranging the existing bones. However there are a few things you need to know before you jump into the deep waters&#8230;<\/p>\n<h3>Joint Offsets<\/h3>\n<div class=\"row-fluid\">\n<div class=\"rhcol span7\">\n<p>As mentioned before we only can rearrange the location of Joints but not their relationship. Because of this we always can define a modified skeleton just by recording how far each Joint has been moved away from its original location. This distance is the<span style=\"color: #3366ff;\"><strong><em> Joint Offset<\/em><\/strong><\/span><\/p>\n<p>So one way to define the modifications of the Skeleton is by recording the Joint offsets for all Joints (the small dots in the image on the right side).<\/p>\n<p>The image shows the default SL Skeleton in its T-Restpose (the orange skeleton). And a modified Horse Skeleton (the grey Skeleton). The blue lines mark the offsets from original joints to the modified joints.<\/p>\n<\/div>\n<div class=\"rhcol span5\">\n<p><a href=\"https:\/\/avalab.org\/avastar\/300\/wp-content\/uploads\/2016\/10\/jointpos_002.png\"><img decoding=\"async\" class=\"aligncenter wp-image-1299 size-full\" src=\"https:\/\/avalab.org\/avastar\/300\/wp-content\/uploads\/2016\/10\/jointpos_002.png\" width=\"451\" height=\"523\" srcset=\"https:\/\/avalab.org\/avastar\/300\/wp-content\/uploads\/2016\/10\/jointpos_002.png 451w, https:\/\/avalab.org\/avastar\/300\/wp-content\/uploads\/2016\/10\/jointpos_002-259x300.png 259w\" sizes=\"(max-width: 451px) 100vw, 451px\" \/><\/a><\/p>\n<\/div>\n<\/div>\n<div class=\"symple-box  red center \" style=\"text-align:left;\"> <strong>For Blender users:<\/strong><\/p>\n<div class=\"row-fluid\">\n<div class=\"rhcol span7\">\n<p>Blender uses Bones with a Head and a Tail. the Head is very similar to what other programs name Joint. The Tail is not supported by other programs. The dots at the end of a bone chain are always bone tails, so those final dots are not Joints!<\/p>\n<\/div>\n<div class=\"rhcol span5\"><a href=\"https:\/\/avalab.org\/avastar\/300\/wp-content\/uploads\/2016\/10\/jointpos_005.png\"><img decoding=\"async\" class=\"aligncenter size-full wp-image-1300\" src=\"https:\/\/avalab.org\/avastar\/300\/wp-content\/uploads\/2016\/10\/jointpos_005.png\" alt=\"jointpos_005\" width=\"236\" height=\"237\" srcset=\"https:\/\/avalab.org\/avastar\/300\/wp-content\/uploads\/2016\/10\/jointpos_005.png 236w, https:\/\/avalab.org\/avastar\/300\/wp-content\/uploads\/2016\/10\/jointpos_005-150x150.png 150w\" sizes=\"(max-width: 236px) 100vw, 236px\" \/><\/a><\/div>\n<\/div>\n<\/div>\n<h3>Defining Joint Offsets<\/h3>\n<div class=\"row-fluid\">\n<div class=\"rhcol span7\">\n<p>The good news is: You only need to move the joints of your Skeleton into place. For Blender users: You can do this by selecting your Skeleton (the Armature) in EDIT mode and then move the bones one by one.<\/p>\n<p>So, how does Second Life know if a Skeleton uses joint offsets? The Second Life importer decides this for each joint by checking if its location is close to the default joint location of the SL Skeleton in Rest pose. As soon as a joint is offset by more than 0.1 millimeter it is counted as a joint with offset.<\/p>\n<p>Note: The joint offsets are only checked when you enable &#8220;with joint positions&#8221; in the SL Importer&#8217;s Option tab.<\/p>\n<\/div>\n<div class=\"rhcol span5\">\n<div id=\"attachment_1271\" style=\"width: 430px\" class=\"wp-caption aligncenter\"><a href=\"https:\/\/avalab.org\/avastar\/300\/wp-content\/uploads\/2016\/08\/joint-offset-002.png\"><img decoding=\"async\" aria-describedby=\"caption-attachment-1271\" class=\"wp-image-1271 size-full\" src=\"https:\/\/avalab.org\/avastar\/300\/wp-content\/uploads\/2016\/08\/joint-offset-002.png\" alt=\"joint-offset-002\" width=\"420\" height=\"509\" srcset=\"https:\/\/avalab.org\/avastar\/300\/wp-content\/uploads\/2016\/08\/joint-offset-002.png 420w, https:\/\/avalab.org\/avastar\/300\/wp-content\/uploads\/2016\/08\/joint-offset-002-248x300.png 248w\" sizes=\"(max-width: 420px) 100vw, 420px\" \/><\/a><p id=\"caption-attachment-1271\" class=\"wp-caption-text\">Create your modified Skeleton by moving the joints one by one into place.<\/p><\/div>\n<\/div>\n<\/div>\n<h3>Checking your joints in the Viewer<\/h3>\n<div class=\"row-fluid\">\n<div class=\"rhcol span6\">\n<p>The SL Viewer allows you to display the Skeleton Bones. You enable the bone display in the Develop menu under:<\/p>\n<pre>Develop -&gt; Avatar -&gt; Show Bones<\/pre>\n<ul>\n<li>Joints are displayed as small dots (pink in the image for better visibility)<\/li>\n<li>Weighted Joints without Joint offset are displayed in<strong><span style=\"color: #33cccc;\"> Cyan<\/span><\/strong><\/li>\n<li>Weighted Joints With Joint offset are displayed in <strong><span style=\"color: #800000;\">Red<\/span><\/strong><\/li>\n<\/ul>\n<\/div>\n<div class=\"rhcol span6\">\n<div id=\"attachment_1272\" style=\"width: 545px\" class=\"wp-caption aligncenter\"><a href=\"https:\/\/avalab.org\/avastar\/300\/wp-content\/uploads\/2016\/08\/joint-offset-003.png\"><img decoding=\"async\" aria-describedby=\"caption-attachment-1272\" class=\"wp-image-1272 size-full\" src=\"https:\/\/avalab.org\/avastar\/300\/wp-content\/uploads\/2016\/08\/joint-offset-003.png\" alt=\"joint-offset-003\" width=\"535\" height=\"293\" srcset=\"https:\/\/avalab.org\/avastar\/300\/wp-content\/uploads\/2016\/08\/joint-offset-003.png 535w, https:\/\/avalab.org\/avastar\/300\/wp-content\/uploads\/2016\/08\/joint-offset-003-300x164.png 300w\" sizes=\"(max-width: 535px) 100vw, 535px\" \/><\/a><p id=\"caption-attachment-1272\" class=\"wp-caption-text\">The SL Viewer shows the Joints at their expected locations. But the bone orientation (the colored lines) are always taken from the Restpose Skeleton.<\/p><\/div>\n<\/div>\n<\/div>\n<div class=\"row-fluid\">\n<div class=\"rhcol span6\">\n<p>The model shown in the image above has only its right arm edited into an A Rest Pose. You can see the joint locations are displayed where we expect them to be. But the Bone orientation (the lines) are not rotated as you might expect.<\/p>\n<p>If you take a closer look into this then you find the Bones orientation is always taken from the Restpose orientation. Because of this the bones of the right arm do not line up as expected but point to the right (left from your point of view).<\/p>\n<\/div>\n<div class=\"rhcol span6\">\n<div id=\"attachment_1275\" style=\"width: 545px\" class=\"wp-caption aligncenter\"><a href=\"https:\/\/avalab.org\/avastar\/300\/wp-content\/uploads\/2016\/08\/joint-offset-004.png\"><img decoding=\"async\" aria-describedby=\"caption-attachment-1275\" class=\"wp-image-1275 size-full\" src=\"https:\/\/avalab.org\/avastar\/300\/wp-content\/uploads\/2016\/08\/joint-offset-004.png\" alt=\"joint-offset-004\" width=\"535\" height=\"293\" srcset=\"https:\/\/avalab.org\/avastar\/300\/wp-content\/uploads\/2016\/08\/joint-offset-004.png 535w, https:\/\/avalab.org\/avastar\/300\/wp-content\/uploads\/2016\/08\/joint-offset-004-300x164.png 300w\" sizes=\"(max-width: 535px) 100vw, 535px\" \/><\/a><p id=\"caption-attachment-1275\" class=\"wp-caption-text\">here you see how the &#8220;bones&#8221; are just translated (moved) from their original locations to the offsets.<\/p><\/div>\n<\/div>\n<\/div>\n<h3>A surprising behavior<\/h3>\n<div class=\"row-fluid\">\n<div class=\"rhcol span6\">\n<p>The Appearance slider behavior depends on whether a joint has offsets defined or not:<\/p>\n<ul>\n<li>For regular joints (without offsets) the appearance sliders can influence the joint location (Translation) and the Scale<\/li>\n<li>As soon as a joint has an offset, the Translation part is disabled<\/li>\n<\/ul>\n<p>But you also must know that the orientation of the Joint scaling does not change. This is important as you can see in the image aside. In this example the right arm has been edited to point straight downwards. While the left arm remains unchanged.<\/p>\n<p>This results in drastic differences how sliders influence the arm length.<\/p>\n<\/div>\n<div class=\"rhcol span6\">\n<div id=\"attachment_1277\" style=\"width: 464px\" class=\"wp-caption aligncenter\"><a href=\"https:\/\/avalab.org\/avastar\/300\/wp-content\/uploads\/2016\/08\/joint-offset-005.png\"><img decoding=\"async\" aria-describedby=\"caption-attachment-1277\" class=\"wp-image-1277 size-full\" src=\"https:\/\/avalab.org\/avastar\/300\/wp-content\/uploads\/2016\/08\/joint-offset-005.png\" alt=\"joint-offset-005\" width=\"454\" height=\"379\" srcset=\"https:\/\/avalab.org\/avastar\/300\/wp-content\/uploads\/2016\/08\/joint-offset-005.png 454w, https:\/\/avalab.org\/avastar\/300\/wp-content\/uploads\/2016\/08\/joint-offset-005-300x250.png 300w\" sizes=\"(max-width: 454px) 100vw, 454px\" \/><\/a><p id=\"caption-attachment-1277\" class=\"wp-caption-text\">The scaling orientation does not change for joints with offsets. This can result in very unexpected behavior. Here you see how the arm length slider changes the length of the right arm and the thickness of the left arm.<\/p><\/div>\n<\/div>\n<\/div>\n<p>You can verify the arm length slider changes the length of the left arm (as before) but the thickness of the right arm (very unexpected, but works as designed).<\/p>\n<h3>And a nasty Pitfall<\/h3>\n<div class=\"row-fluid\">\n<div class=\"rhcol span7\">\n<p>Now lets turn back to the horse from our initial example (see above). Lets say the mChest Bone of this horse has not been used for weighting the mesh (just as an example). The mChest bone lies in the middle of the <em><span style=\"color: #ff6600;\">Bone chain<\/span><\/em> that starts at the mPelvis and ends at the mHead<\/p>\n<\/div>\n<div class=\"rhcol span5\"><span class=\"lia-inline-image-display-wrapper lia-image-align-inline\"><span class=\"lia-message-image-wrapper\"><a href=\"https:\/\/avalab.org\/avastar\/300\/wp-content\/uploads\/2016\/10\/jointpos_003.png\"><img decoding=\"async\" class=\"aligncenter size-full wp-image-1302\" src=\"https:\/\/avalab.org\/avastar\/300\/wp-content\/uploads\/2016\/10\/jointpos_003.png\" alt=\"jointpos_003\" width=\"451\" height=\"523\" srcset=\"https:\/\/avalab.org\/avastar\/300\/wp-content\/uploads\/2016\/10\/jointpos_003.png 451w, https:\/\/avalab.org\/avastar\/300\/wp-content\/uploads\/2016\/10\/jointpos_003-259x300.png 259w\" sizes=\"(max-width: 451px) 100vw, 451px\" \/><\/a><\/span><\/span><\/div>\n<\/div>\n<div class=\"row-fluid\">\n<div class=\"rhcol span7\">\n<p>Since Bento it is possible to only import partial skeletons. Especially you can decide to only export the weighted bones of your character (because unweighted bones are not used for deforming your mesh). So, when you import this horse with the Bento Viewer, then the mChest bone is not imported. But&#8230;<\/p>\n<p>During importing your character all &#8220;missing&#8221; bones are taken from the original skeleton. But the SL Importer has no way to find out where the mChest bone has been placed in the original model. So it simply keeps the mChest bone at its default location . And this results in a skeleton where no joint position is defined for the mChest.<\/p>\n<\/div>\n<div class=\"rhcol span5\"><a href=\"https:\/\/avalab.org\/avastar\/300\/wp-content\/uploads\/2016\/10\/jointpos_004.png\"><img decoding=\"async\" class=\"aligncenter size-full wp-image-1303\" src=\"https:\/\/avalab.org\/avastar\/300\/wp-content\/uploads\/2016\/10\/jointpos_004.png\" alt=\"jointpos_004\" width=\"451\" height=\"523\" srcset=\"https:\/\/avalab.org\/avastar\/300\/wp-content\/uploads\/2016\/10\/jointpos_004.png 451w, https:\/\/avalab.org\/avastar\/300\/wp-content\/uploads\/2016\/10\/jointpos_004-259x300.png 259w\" sizes=\"(max-width: 451px) 100vw, 451px\" \/><\/a><\/div>\n<\/div>\n<p><span class=\"lia-inline-image-display-wrapper lia-image-align-inline\"><span class=\"lia-message-image-wrapper\">And this is evil! The problem is with the Appearance sliders: In that case any joint translations (location moves) defined in the appearance sliders are not applied to bones with joint positions.<\/span><\/span><\/p>\n<p>So even if the mChest bone plays no role in the character weighting (in our example) it still affects all its children as far as appearance sliders are concerned, because it reacts different to the appearance sliders when it has no joint offset defined.<\/p>\n<p>Now you wonder why this is important even if you do not at all use the appearance sliders? In fact the appearance sliders take effect even when you wear a default shape. But this is another story.<\/p>\n<h3>What about PIVOT and POS<\/h3>\n<p>You may have seen that Avastar supports 2 Joint Types, namely PIVOT and POS. But what is that and how do we work with this? In fact this is one other source of misunderstanding, misbehavior and its quiet badly understood by everybody, even by LindenLab them self (i believe).<\/p>\n<p>In short POS and PIVOT are 2 definitions of the Secondlife Rig which are almost identical but differ a tiny bit from each other. The reason for why those 2 rig definitions exist is unclear and buried somewhere in ancient history of Secondlife. Below you find an excerpt of the Rig definitions. The values are 3 dimensional vectors. Each vector defines the distance to the parent joint:<\/p>\n<div class=\"row-fluid\">\n<div class=\"rhcol span3\">\n<pre><strong>Bone\r\n<span style=\"color: #ff6600;\">mCollarRight<\/span>\r\n<span style=\"color: #ff6600;\">mShoulderRight<\/span><\/strong>\r\n<span style=\"color: #339966;\">mElbowRight<\/span>\r\n<span style=\"color: #339966;\">mWristRig<\/span><\/pre>\n<\/div>\n<div class=\"rhcol span5\">\n<pre><strong> Pivot-Rig location offsets\r\n<span style=\"color: #ff6600;\">-0.020927<\/span><\/strong> <span style=\"color: #339966;\">-0.085000<\/span>  <strong><span style=\"color: #ff6600;\">0.165396<\/span><\/strong>\r\n <span style=\"color: #339966;\">0.000000 <strong><span style=\"color: #ff6600;\">-0.079418<\/span><\/strong> -0.000000<\/span>\r\n<span style=\"color: #339966;\"> 0.000000 -0.248000 -0.000000<\/span>\r\n<span style=\"color: #339966;\">-0.000000 -0.205000 -0.00000\r\n<\/span><\/pre>\n<\/div>\n<div class=\"rhcol span4\">\n<pre><strong>\u00a0Pos-Rig location offsets\r\n<span style=\"color: #ff6600;\">-0.021<\/span><\/strong> <span style=\"color: #339966;\">-0.085<\/span> <strong><span style=\"color: #ff6600;\">0.165<\/span><\/strong>\r\n <span style=\"color: #339966;\">0.000 <strong><span style=\"color: #ff6600;\">-0.079<\/span><\/strong> -0.000<\/span>\r\n <span style=\"color: #339966;\">0.000 -0.248 -0.000<\/span>\r\n <span style=\"color: #339966;\">0.000 -0.205 -0.00<\/span><\/pre>\n<\/div>\n<\/div>\n<div class=\"row-fluid\">\n<div class=\"span6 rhcol\">\n<p>For example the mElbowRight joint is exactly 0.248 m (24.8 cm ) away from the mShoulderRight joint in both Rigs (see image)<\/p>\n<p>But\u00a0 the joints mCollarRight and mShoulderRight are placed at slightly different locations in both rigs (see the numbers in the table)<\/p>\n<p>I have marked the differing numbers in orange boldface.<\/p>\n<\/div>\n<div class=\"span6 rhcol\">\n<p><a href=\"https:\/\/avalab.org\/avastar\/300\/wp-content\/uploads\/2016\/10\/Image552.png\"><img decoding=\"async\" class=\"aligncenter size-full wp-image-2680\" src=\"https:\/\/avalab.org\/avastar\/300\/wp-content\/uploads\/2016\/10\/Image552.png\" alt=\"\" width=\"389\" height=\"233\" srcset=\"https:\/\/avalab.org\/avastar\/300\/wp-content\/uploads\/2016\/10\/Image552.png 389w, https:\/\/avalab.org\/avastar\/300\/wp-content\/uploads\/2016\/10\/Image552-300x180.png 300w\" sizes=\"(max-width: 389px) 100vw, 389px\" \/><\/a><\/p>\n<\/div>\n<\/div>\n<h3>So what?<\/h3>\n<p>First of all the 2 Rigs are actually used for different purposes:<\/p>\n<div class=\"row-fluid\">\n<div class=\"span6 rhcol\">\n<h4>POS Rigs<\/h4>\n<p>Are only used by the Secondlife System character. The POS Rig is declared as the one Rig that has no Joint Offsets.<\/p>\n<p>So when you import a mesh that was rigged to a clean POS Skeleton then even if you Import with Joint Positions the SL Import willl correctly see that there are no Joint offsets at all defined in the rig.<\/p>\n<\/div>\n<div class=\"span6 rhcol\">\n<h4>PIVOT Rigs<\/h4>\n<p>Are only used by the Custom Mesh attachments and Custom Mesh characters.<\/p>\n<p>So when you import a mesh that was rigged to a clean PIVOT Skeleton then the SL Importer detects falsely that some bones have Joint offsets.<\/p>\n<\/div>\n<\/div>\n<p>The following 2 rigs both have been created with default Rig values and imported with Joint Positions. Bones with Joint Offsets are marked in Red.\u00a0 You see the POS Rig imports cleanly but the PIVOT Rig exposes Joint offsets although its a perfect clean PIVOT Rig:<\/p>\n<div class=\"row-fluid\">\n<div class=\"span6 rhcol\">\n<div id=\"attachment_2682\" style=\"width: 1016px\" class=\"wp-caption aligncenter\"><a href=\"https:\/\/avalab.org\/avastar\/300\/wp-content\/uploads\/2016\/10\/Image554.png\"><img decoding=\"async\" aria-describedby=\"caption-attachment-2682\" class=\"wp-image-2682 size-full\" src=\"https:\/\/avalab.org\/avastar\/300\/wp-content\/uploads\/2016\/10\/Image554.png\" alt=\"\" width=\"1006\" height=\"1134\" srcset=\"https:\/\/avalab.org\/avastar\/300\/wp-content\/uploads\/2016\/10\/Image554.png 1006w, https:\/\/avalab.org\/avastar\/300\/wp-content\/uploads\/2016\/10\/Image554-266x300.png 266w, https:\/\/avalab.org\/avastar\/300\/wp-content\/uploads\/2016\/10\/Image554-908x1024.png 908w, https:\/\/avalab.org\/avastar\/300\/wp-content\/uploads\/2016\/10\/Image554-768x866.png 768w\" sizes=\"(max-width: 1006px) 100vw, 1006px\" \/><\/a><p id=\"caption-attachment-2682\" class=\"wp-caption-text\">A POS Rig imported with Joint Positions<\/p><\/div>\n<\/div>\n<div class=\"span6 rhcol\">\n<div id=\"attachment_2681\" style=\"width: 1016px\" class=\"wp-caption aligncenter\"><a href=\"https:\/\/avalab.org\/avastar\/300\/wp-content\/uploads\/2016\/10\/Image553.png\"><img decoding=\"async\" aria-describedby=\"caption-attachment-2681\" class=\"wp-image-2681 size-full\" src=\"https:\/\/avalab.org\/avastar\/300\/wp-content\/uploads\/2016\/10\/Image553.png\" alt=\"\" width=\"1006\" height=\"1134\" srcset=\"https:\/\/avalab.org\/avastar\/300\/wp-content\/uploads\/2016\/10\/Image553.png 1006w, https:\/\/avalab.org\/avastar\/300\/wp-content\/uploads\/2016\/10\/Image553-266x300.png 266w, https:\/\/avalab.org\/avastar\/300\/wp-content\/uploads\/2016\/10\/Image553-908x1024.png 908w, https:\/\/avalab.org\/avastar\/300\/wp-content\/uploads\/2016\/10\/Image553-768x866.png 768w\" sizes=\"(max-width: 1006px) 100vw, 1006px\" \/><\/a><p id=\"caption-attachment-2681\" class=\"wp-caption-text\">A PIVOT Rig imported with Joint Positions<\/p><\/div>\n<\/div>\n<\/div>\n<h3>And here is the Double Salto Mortale<\/h3>\n<p>Remember what i said about when is which rigtype used? Here is it again:<\/p>\n<ul>\n<li>POS Rigs are only used for the System Character<\/li>\n<li>PIVOT Rigs are only used for the custom Mesh Characters<\/li>\n<\/ul>\n<p><strong>So as a consequence here is the first Salto:<\/strong><\/p>\n<div class=\"row-fluid\">\n<div class=\"span6 rhcol\">\n<p>When you use a clean POS Rig for your mesh character then an import with Joint offsets works just fine and correctly detects there are no joint offsets in the rig. But the Mesh gets bound to a PIVOT Rig and so you will see mismatches when you compare to the System Character.<\/p>\n<\/div>\n<div class=\"span6 rhcol\">\n<p>When you use a clean PIVOT Rig for your mesh character then an import with Joint offsets uncorrectly detects joint offsets for some bones. But the Mesh gets bound to a PIVOT Rig and so it will match better when you compare it to the System Character. But there are still mismatches&#8230; why?<\/p>\n<\/div>\n<\/div>\n<p><strong>And here is the second Salto:<\/strong><\/p>\n<p>When a Bone has a Joint Offset then it gets treated slightly different by the Appearance system. Technically it loses the ability to follow translations.<\/p>\n<p>That means for the Collar bones and Shoulder bones: When you move the\u00a0 Torso Shoulders Slider then it just does not work any more. And this has major consequences and you end up with a shape that no longer matches to the System character mesh, even when the mesh itself does match perfectly on vertex level.<\/p>\n<h3>Summary<\/h3>\n<p>Second Life uses 2 slightly different Rig definitions for the System character and for your Custom meshes. Also Bones with Joint Offsets behave different from Bones without Joint Offsets. So &#8230;<\/p>\n<ul>\n<li>Forget to make Mesh characters by using the POS Rig. Otherwise you lose precision in the meshes.<\/li>\n<li>Forget to import clean PIVOT Rigs with joint offsets. Otherwise you loose precision in the meshes.<\/li>\n<li>The only reliable way to get good results: Use clean PIVOT Rigs and avoid using Joint offsets when you try to match items to the system character<\/li>\n<\/ul>\n<p>&nbsp;<\/p>\n\n<h3>Attachment Points<\/h3>\n<div class=\"row-fluid\">\n<div class=\"span6 rhcol\">Besides the 26 standard bones and the 19 Collision Volumes we have attachment points. An attachment point is simply a location where you can attach (wear) other objects. The locations of the attachment points are fixed relative to a particular bone in the skeleton. Thus you might believe that there is not much to say about these points, but technically the attachment points are just another set of bones in the skeleton.Indeed it is possible to animate attachment points in the same way as you can animate the skeleton bones, and anything you&#8217;ve attached to those points will go along for the ride with the animation itself. These bones can also be used for weighting custom meshes just like the standard set of bones.<\/div>\n<\/div>\n<h3><a href=\"http:\/\/blog.machinimatrix.org\/wp-content\/uploads\/2012\/07\/1341168829_050.png\"><img decoding=\"async\" style=\"vertical-align: middle;\" title=\"icon_attention\" src=\"http:\/\/blog.machinimatrix.org\/wp-content\/uploads\/2012\/07\/1341168829_050.png\" alt=\"\" width=\"16\" height=\"16\" \/><\/a> Limitations ahead!<\/h3>\n<p>By experimenting with these bones we found some undesirable side effects, which may be due to the fact that weighting and animating these bones has never been seen as a valid option.<\/p>\n<div class=\"span6 rhcol\"><a href=\"http:\/\/blog.machinimatrix.org\/wp-content\/uploads\/2012\/07\/attachment_points.png\"><img decoding=\"async\" class=\"wp-image-10937 aligncenter\" title=\"attachment_points\" src=\"http:\/\/blog.machinimatrix.org\/wp-content\/uploads\/2012\/07\/attachment_points.png\" alt=\"\" width=\"304\" height=\"494\" \/><\/a><\/div>\n<p>The main limitations we&#8217;ve discovered are:<\/p>\n<ol>\n<li>Some attachment points have spaces in their name. Collada 1.4 doesn&#8217;t support bone names like this consequently a bone like &#8220;Left Shoulder&#8221; is interpreted by the Collada Importer as 2 bones with the names &#8220;Left&#8221; and &#8220;Shoulder&#8221; respectively, thus the Collada data will be invalid.<\/li>\n<li>There is no rotation reset. Unlike the normal bones, stopping an attachment bone animation will leave the bone in the last rotated position. To fix you need to run an animation which rotates the bone to zero again.<\/li>\n<li>Again unlike normal bones it doesn&#8217;t appear possible to change the location of the bone with a custom mesh import (Adding joint offsets to attachment bones). Either it gets ignored or the entire armature gets distorted.<\/li>\n<\/ol>\n<p><a href=\"http:\/\/blog.machinimatrix.org\/wp-content\/uploads\/2012\/07\/1341168829_050.png\"><img decoding=\"async\" title=\"icon_attention\" src=\"http:\/\/blog.machinimatrix.org\/wp-content\/uploads\/2012\/07\/1341168829_050.png\" alt=\"\" width=\"16\" height=\"16\" \/><\/a> We believe that your viewer <em>should<\/em> be able to use the attachment points exactly like all the other bones, and thus give us 32 extra possibilities for weighting and animating our meshes, and that the existing limitations should be viewed as bugs. But currently it is not possible to weight attachment points in a reasonable (safe) way.<\/p>\n<div class=\"row-fluid\">\n<div class=\"span6 rhcol\">\n<h3>What we have so far<\/h3>\n<p>So we have effectively 77 bones available for animation and rigging. Furthermore 20 Shape keys do influence bone lengths, and 23 shape keys do influence the Collision Volumes. All together (when combining the bone shape keys and collision volume shape keys) we find that 30 Shape keys do influence the mesh and its skeleton provided it is correctly rigged and weighted.So far this is what we found by inspection and experimentation and this reflects our current knowledge about the Skeleton. In the following chapter we will take a closer look on practical issues.<\/p>\n<\/div>\n<div class=\"span6 rhcol\">\n<h3>Summary<\/h3>\n<p>The Skeleton and the associated Shape key system provide:<\/p>\n<ul>\n<li>26 standard bones<\/li>\n<li>32 attachment points<\/li>\n<li>24 collision volumes<\/li>\n<li>120 Shape keys<\/li>\n<\/ul>\n<p>30 of the shape keys influence the Mesh and\/or the Skeleton and thus they can be used for limited customization of custom meshes.<\/p>\n<\/div>\n<\/div>\n<h2>Practical observations<\/h2>\n<h3>Rigging and Weighting<\/h3>\n<p>Lets take a look at an example.<\/p>\n<p>This is a low poly mesh made for game engines. When we want to prepare this mesh for our 3D world, then we have to do following preparations:<\/p>\n<ol>\n<li>First we need to setup the skeleton itself.<br \/>\nHere we have to take care about the bone hierarchy and about the exact bone names. Otherwise the skeleton is rejected by the mesh importer within your viewer. We believe that you can find an appropriate rig for each of the major 3D editors.<\/li>\n<li>Now we need to find the best fitting Shape for the character.<\/li>\n<li>Then we have to add animation data, that is, we have to weight the mesh against the 21 standard bones.<\/li>\n<li>Finally we have to get our creation into our online world. This is done by exporting the mesh from your 3D editor to a Collada file. We provide Collada 1.4.1 here (This is compatible to 3D worlds which use the skeleton described in this document). The used file extension is &#8220;.dae&#8221;.<\/li>\n<\/ol>\n<p>There are some caveats in this process, which might lead to more or less serious issues with your mesh. You have to take care about:<\/p>\n<ol>\n<li>Your mesh must always be weighted to all 21 Skeleton bones. That is, you have to provide weight information for each bone, regardless whether it is used in your mesh or not. And that means, you have to provide all appropriate weight groups, although they may be empty. If only one of the weight groups is missing, then the mesh will be rejected.<\/li>\n<li>Your entire mesh must be weighted. If only one vertex is not contained in any of the supplied weight groups, then the mesh will be rejected.<\/li>\n<li>In most 3D editors you must ensure that your character looks towards the positive X axes when it gets exported. Otherwise you may end up with massive distortions when you wear the character<\/li>\n<li>If you import a mesh with all vertices weighted to zero, then this mesh disappears as soon as you wear it in the online world. However you can rezz it with no problems.<\/li>\n<\/ol>\n<p>On a special side note: Although the mesh Importer supports the import of textures along with the mesh, this functionality is currently broken for rigged meshes.<\/p>\n<h3>Wearing a rigged mesh<\/h3>\n<p>Once you have successfully uploaded your mesh to your 3D world, you can wear it just like any other object by attaching it to an attachment point. However rigged meshes are somewhat special, as you can wear them at any attachment point you like. If the mesh is properly created (weighted) then it will self adjust to the skeleton.<\/p>\n<h3>Cancel out the Skeleton Shapes<\/h3>\n<p>Here is what you would need to do in principle if you want to create mesh attachments which fit exactly to your in world Shape (attention, this is mind boggling):<\/p>\n<ol>\n<li>You have to know which shape configuration you use in world. Especially you need to know the values of the 20 Shape parameters which affect the Skeleton.<\/li>\n<li>You calculate the skeleton configuration which results when applying the shape parameters and setup your skeleton accordingly. This is your working skeleton.<\/li>\n<li>You setup the working skeleton in your 3D editor and use it to create your mesh attachment.<\/li>\n<li>When you are done, you have to calculate the difference from your actual mesh attachment to how it would have looked alike if you had created it for the default skeleton configuration. And you have to apply that difference to the mesh. This defacto rebases your work from the working skeleton to the default skeleton. The reason why you have to do that, is that the skeleton shape parameters are already &#8220;applied&#8221; to your working skeleton. So if you would now simply upload your mesh as it is, then these parameters keep applied and when you wear the mesh, your in world shape will apply the parameters again. And that means your 20 Skeleton shape parameters would be applied twice. Please also note that the default skeleton differs for male shape and female shapes.<\/li>\n<li>Now you export the rebased attachment to your 3D world.<\/li>\n<li>Now you can wear the mesh. And if you also wear the correct shape (which you used in step one above) then the shape parameters get applied to the mesh and it now fits 100% and looks exactly like you created it in your 3D editor.<\/li>\n<\/ol>\n<p>We are proud to tell you that our Avastar product does all of that for you automatically in the background. So you do not need to bother with this at all. But it may be good to know about that issue when you intend to create your own mesh exporter tool.<\/p>\n","protected":false},"excerpt":{"rendered":"<p>The SL Skeleton Creating the Avatar Workbench and Avastar has given us great insight on the SL avatar. The goal of this article is to give you detailed information about the construction of the Second Life avatar and what you can do with it. We will also talk about some areas where we simply do [&hellip;]<\/p>\n","protected":false},"author":1,"featured_media":32834,"parent":381,"menu_order":40,"comment_status":"closed","ping_status":"closed","template":"","meta":{"_et_pb_use_builder":"","_et_pb_old_content":"","_et_gb_content_width":"","footnotes":""},"categories":[7],"tags":[],"class_list":["post-1238","page","type-page","status-publish","has-post-thumbnail","hentry","category-knowledge"],"_links":{"self":[{"href":"https:\/\/avalab.org\/avastar\/300\/wp-json\/wp\/v2\/pages\/1238","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/avalab.org\/avastar\/300\/wp-json\/wp\/v2\/pages"}],"about":[{"href":"https:\/\/avalab.org\/avastar\/300\/wp-json\/wp\/v2\/types\/page"}],"author":[{"embeddable":true,"href":"https:\/\/avalab.org\/avastar\/300\/wp-json\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/avalab.org\/avastar\/300\/wp-json\/wp\/v2\/comments?post=1238"}],"version-history":[{"count":0,"href":"https:\/\/avalab.org\/avastar\/300\/wp-json\/wp\/v2\/pages\/1238\/revisions"}],"up":[{"embeddable":true,"href":"https:\/\/avalab.org\/avastar\/300\/wp-json\/wp\/v2\/pages\/381"}],"wp:featuredmedia":[{"embeddable":true,"href":"https:\/\/avalab.org\/avastar\/300\/wp-json\/"}],"wp:attachment":[{"href":"https:\/\/avalab.org\/avastar\/300\/wp-json\/wp\/v2\/media?parent=1238"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/avalab.org\/avastar\/300\/wp-json\/wp\/v2\/categories?post=1238"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/avalab.org\/avastar\/300\/wp-json\/wp\/v2\/tags?post=1238"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}