Avatar Height vs. Vehicle Users in Second Life: Statistics

My head explodes when I contemplate statistics. However, it is important for Second Life vehicle designers like me to understand our audiences. Read on for a brief treatment of avatar height as it relates to vehicle users, and what that might mean for vehicle designers. I’ll present the data, then discuss how I got it.

Avatar height has a lot to do with vehicles. Specifically, how big do you make the vehicle such that it fits the pilot/driver and any desired passengers comfortably? Will you need to fold them up with an animation so that the avatar collision box won’t interfere with vehicle functionality?

As in RL, the fashion among top tier vehicles tends to run toward “snug-fitting.” Av heights can naturally range from 1.1 to 2.4m, but users aren’t evenly distributed among this range.

The following table presents the quantiles for height among vehicle users in SL, expressed in units of SL’s native metric system.

Quantile

Height (m)

100% Max

2.4

99%

2.3

95%

2.2

90%

2.2

75% Q3

2.1

50% Median

2.0

25% Q1

1.8

10%

1.6

5%

1.3

1%

1.1

0% Min

1.1

n = 739,777

mean = 1.91 m

For those of you reflexively going zomgwtf, the tight range between quantiles 1 and 3 suggest that a big chunk of SL users are tightly clustered with respect to height. In this case, they happen to be clustered near the median height, 2.0 m.

For those of you still going zomgwtf, here’s a nice picture (click for full size):

Use-weighted vehicle user height distribution

Notice a few things:

1) You can see from the graph that most all users are within +/- 0.2 meters of 2.0 m tall.

2) See the uptick on the left hand of the graph? Those are tinies (1.1 m) and ageplayers (1.2 m). Haha! I’m kidding. Sort of.

3) From a biometry standpoint (and a sociology of virtual worlds standpoint), these results are endlessly fascinating. Recall from your biology class that many physical characteristics, including human height, are normally distributed. That is, there are roughly an equal number of people taller and shorter than the average, and symmetrically so when you graph it out, as above.

That is clearly not the case “here” in Second Life. Vehicle users for whatever reason tend to favor being taller, but not extremely tall, and *extremely* short. The distribution pictured above isn’t by any means normal.

Specifically, we can use skewness and kurtosis to look at HOW non-normal SL heights are. For those of you trained in experiments, Kolmogorov-Smirnov D is 0.1839, p < 0.01. For those of you not trained in experiments, the SL distribution doesn’t model RL at all.

But that’s true in many ways. 😉

Now, these are use-weighted data, meaning that vehicle users who drive/pilot more often are accounted for more heavily. Non-use weighted data are similar enough in this case that it isn’t worth my time to report.

Mecha Construction in SL, Lesson 1

[11:54]  Jurgi Harlan: kage, I came to Second Life to design, pilot and sell mecha.
[11:54]  The Sojourner: Hi Xanshin
[11:54]  Jurgi Harlan: I believe you are my superior in this, and I wish to learn from you.
[11:55]  Xanshin Paz: hiya,
[11:55]  Xanshin Paz: Soj1
[11:55]  Xanshin Paz: jeez…..keybd impaired again
[11:55]  Xanshin Paz: hi guys!
[11:55]  You: I’d be happy to help you learn everything I know about mecha design. WHen would you like to begin?
[11:55]  Jurgi Harlan: At your convenience, I am a complete novice.
[11:55]  You: Hello, Xanshin
[11:56]  Jurgi Harlan: I am offering myself as apprentice, and intern.
[11:56]  Xanshin Paz: hello, Kage!
[11:56]  You: Well, if you have an hour or so, we could start right now, Jurgi.
[11:56]  Jurgi Harlan: I do.
[11:56]  The Sojourner: I will sit on the fence and write notecards
[11:57]  Jurgi Harlan: There, that got rid of the fur.
[11:57]  You: Great! Let’s have a seat and get a sense of what you already know.
[11:57]  Jurgi Harlan: Alright.
[11:57]  The Sojourner: Kage and I are good sitters
[11:58]  Jurgi Harlan: Apparently, I am not!
[11:58]  Kage Seraph dreams of the day when LL makes sitting a painless process.
[11:58]  Jurgi Harlan: Bah
[11:59]  Xanshin Paz: I’d pay to be a fly on this wall, but I’ve *got* to get some sleep :/
[11:59]  Jurgi Harlan: Nonetheless, what I know thusfar is slim.
[11:59]  Xanshin Paz: nice meeting you, guys
[11:59]  You: We can notecard the chat transcript, Xanshin, if everyone consents..?
[11:59]  Jurgi Harlan: I can show you my work, and it will say more than I can.
[11:59]  Xanshin Paz: oh, that’d be great !
[11:59]  Xanshin Paz: thanks!
[11:59]  Kage Seraph nods, no problem
[12:00]  Jurgi Harlan: These are the starting point of an idea I had…
[12:00]  Xanshin Paz: ‘nite, all……!
[12:00]  You: Night!
[12:00]  DragonChiq Thereian is online
[12:00]  Jurgi Harlan: You might not notice, but it is actually sized for your DIY kit.
[12:01]  Misty Rhodes is online
[12:01]  You: Intended as an attachment to the hips?
[12:01]  Jurgi Harlan: A pelvis attach…though eventually I planned to add actual moving treads.
[12:02]  Jurgi Harlan: This was my first attempt, disassembled for you.
[12:02]  Kage Seraph ponders. Shooting for a Madcat?
[12:02]  Jurgi Harlan: Feel free to get a closer look, and yes, I was basing my idea on a reverse knee Clan mech like a Mad Cat or Vulture.
[12:03]  You: Sounds good so far.
[12:03]  Jurgi Harlan: At the time, I hadn’t learned rescaling the whole model, so you’ll notice they’re too large.
[12:04]  Jurgi Harlan: For the DIY kit anyway.
[12:04]  You: Perhaps we could begin the discussion with animations and how they work in SL. They’re kinda the key concept in mecha design
[12:04]  Jurgi Harlan: Indeed, I have made animations in Avimator. Is that useful?
[12:05]  You: Yes, that is an excellent start (though I use Poser, so I can’t walk you through difficulties in Avimator directly)
[12:05]  Jurgi Harlan: That is what I have learned of particle effects.
[12:06]  Jurgi Harlan: The fly/follow effect is sadly copied from someone else’s work.
[12:06]  Jurgi Harlan: My goal was to keep the particles in the ball.
[12:06]  You: Looks good as a start, Jurgi.
[12:07]  Jurgi Harlan: It also makes a useful hands-free light source, when it’s not chasing pretty girls.
[12:07]  Kage Seraph grins
[12:07]  Jurgi Harlan: Well, I have one more work piece to show you.
[12:07]  You: Okay, rez it at will. =D
[12:08]  Jurgi Harlan: This was based off your Steam Golem design.
[12:08]  Jessica Qin is offline
[12:08]  DragonChiq Thereian is offline
[12:08]  Jurgi Harlan: It’s not done, but I was more trying to get the techniques you used down more than to copy every facet.
[12:09]  Jurgi Harlan: I hope my imitation didn’t offend.
[12:09]  You: Sure, it looks like you have a good eye for the forms involved
[12:09]  You: No, I have no problem with practicing that way.
[12:10]  Jurgi Harlan: I really like your Steam Golem as it gives you size, as well as maintaining a posable head which which conversations stay fluid.
[12:10]  You: Well, let’s use the Steam Golem as a conversation piece. We’ll pull it apart to see how it works, then put it back together as a complete piece.
[12:11]  Jurgi Harlan: At your leisure, sensei.
[12:11]  You: I’ll transplant the functional bits out of the anim overrider so we can concentrate on functionality, not form at this stage
[12:12]  Object: Loading notecard ‘*Default Anims’…
[12:12]  Object: Finished reading notecard. (4215 bytes free)
[12:13]  Ned Nolan: hello
[12:13]  Jurgi Harlan: So the invisiprims are on the feet, and the mech legs are on your lower legs, yes?
[12:13]  Ned Nolan: hi Soj
[12:13]  Higbee Protagonist is online
[12:14]  The Sojourner: Hi Ned.. working on something
[12:14]  You: Okay, as you saw before I attached the wooden box anim overrider, the attachments on the legs don’t determine the position of the av above the ground. Only the anim overrider does that
[12:14]  Bob Bunderfeld is offline
[12:14]  Jurgi Harlan: yes, I learned that, hence I was sizing my treads to match the overrider’s height limit.
[12:14]  You: So the legs can be arbitrarily short or long, and only have to extend to the ground if you’re shooting for a sense of realism. 😉
[12:14]  Jurgi Harlan: The code involved is completely unknown to me.
[12:15]  Zekeen Phoenix is online
[12:15]  You: In this case, I’ve integrated the invisiprims covering the mesh avatar’s calves and feet right into the lower legs of the prim av
[12:15]  Jurgi Harlan: Okay, give me a second there.
[12:15]  You: clarification in terms: mesh av = the regular human av almost all of us use
[12:16]  You: in my case, the mesh av is the one in jeans and a tee shirt
[12:16]  Jurgi Harlan: Okay, so those invisiprims are built into the legs, not separate attaches.
[12:16]  Zekeen Phoenix is offline
[12:17]  You: yes, though they could be separate attaches if you preferred to build it that way. I try to minimize the number of attachments used for sanity’s sake when tuning the av’s movement
[12:17]  Jurgi Harlan: Learning the exact function of invisiprims is going to be a lesson I will require.
[12:17]  You: Certainlyh, let’s handle that now.
[12:17]  Jurgi Harlan: Please do.
[12:19]  You: invisiprims use special textures to obscure any texture behind them by canceling the texture out. Some textures contain an extra “color” (called an alpha channel)
[12:19]  You: that programs like SL can interpret as transparency.
[12:19]  Jurgi Harlan: Alright, by “behind them” you mean contained within the prim’s area?
[12:20]  You: within and/or behind, the effect is the same. All that matters is which texture is encountered first when you sort them by distance from the SL client’s camera
[12:21]  You: so for me, the SL client camera is over and behind my shoulder
[12:21]  Jurgi Harlan: Well, I notice that when the mech’s leg is behind the invisiprim, it is not being obscured.
[12:21]  You: Very astute.
[12:21]  Jurgi Harlan: How is the prim discerning betwixt your foot, and the mech’s knee?
[12:22]  Jurgi Harlan: I also notice -I- am being obscured by them.
[12:22]  You: SL is mercifully set up such that textures that do NOT contain an alpha channel are not obscured by textures that DO contain an alpha channel
[12:22]  Jurgi Harlan: And my staff is not.
[12:22]  You: so, for this application we have two kinds of textures, alpha textures and non-alpha textures
[12:22]  Jurgi Harlan: Alright…
[12:23]  You: alpha textures obscure (hide) each other, and non-alpha textures of course obscure both alpha and non-alpha textures behind them.
[12:23]  Jurgi Harlan: I see.
[12:23]  You: so, it follows that the rusty textures on the mecha’s legs are non-alpha, and the textures on you and me are alpha textures
[12:23]  Jurgi Harlan: How can we manipulate what possesses the alpha channel state, and what does not?
[12:24]  DragonChiq Thereian is online
[12:24]  You: alpha channels can be added to any image in an offline image editor such as Adobe Photoshop or GIMP
[12:24]  You: Numerous excellent tutorials are on the web to do this.
[12:25]  You: Also,
[12:25]  Jurgi Harlan: I will acquire them.
[12:26]  You: when we change the transparency in the object editing toolbox (“Texture” tab, “Transparency” box), SL forces the texture in question to have an alpha channel
[12:26]  Jurgi Harlan: Even if we reset it to 0%?
[12:27]  You: Setting it to zero removes the alpha channel from a texture that was originally non-alpha to begin with.
[12:27]  Jurgi Harlan: Ah, I see.
[12:27]  Jurgi Harlan: I believe I have a functioning grasp of the concept.
[12:27]  You: Good! Let’s move on to the next brain-bender.
[12:28]  You: As it turns out, you and I and Soj each have two representations here on the inworld grid
[12:28]  Jurgi Harlan: Our location and our avatar.
[12:28]  You: First, the avatar that we all know and love and can see
[12:29]  You: Second, as you mentioned, our position is analogous to the agent representing each of us
[12:29]  Jurgi Harlan: yes, agent, the term had escaped me.
[12:29]  Jurgi Harlan: It is the agent by which we “play”, seeing and moving.
[12:29]  Jurgi Harlan: The avatar becomes merely the visual placemarker for the agent.
[12:30]  You: Most of the time, the agent and avatar can be used interchangeably. But there are a few crucial differences.
[12:30]  You: Yes, you’ve nailed it.
[12:30]  Jurgi Harlan: I have studied some, sensei.
[12:30]  You: The camera and collision detection are tied to the agent, NOT the avatar, and it is this distinction that makes giant mecha in SL possible
[12:31]  You: i.e., if we use an animation to move the apparent location of the avatar (for giant mecha, we move it straight up, no?), the agent’s position does not change.
[12:31]  Jurgi Harlan: Indeed.
[12:32]  Jurgi Harlan: We continue to interact with terrain, despite being above the ground.
[12:32]  You: that is, it stays on the ground. So, where is my agent right now?
[12:32]  Jurgi Harlan: Because our agent is at ground level.
[12:32]  You: true true
[12:32]  Jurgi Harlan: I have a question.
[12:33]  You: So, all of that to say that as you construct animations and later prim models,always remember where the av is and where the agent is.
[12:33]  You: Yes?
[12:33]  Jurgi Harlan: If our agent is on the ground, how does the avatar look correctly when I focus my vision below me by bending over?
[12:33]  You: Losing track of the relative positions in agent and av leads to some pretty glaring animation issues. =)
[12:34]  Jurgi Harlan: Allow me to visualize my question.
[12:34]  Jurgi Harlan: Now, I am starting at Soj.
[12:34]  Jurgi Harlan: My agent is at ground level.
[12:35]  Jurgi Harlan: Why does my head tilt down?
[12:35]  The Sojourner: soj waves
[12:35]  Jessica Qin is online
[12:36]  You: This is one case where LL did excellent bookkeeping.
[12:37]  Jurgi Harlan: So their systems manage it inherently?
[12:38]  You: Recall that the avatar is not fully tied to the agent, so each of our clients can calculate the proper avatar articulation regardless of where the agent is, that is, the av’s position and orientation are handled relative to the agent, but the algorithms
[12:39]  You: that determine head facing and foot facing in particular, are handled separately. That way, your feet are properly angled onto the ground and you can look about naturally regardless of most animations( i.e., animations that do not take over the head)
[12:39]  Jurgi Harlan: I see.
[12:39]  You: Other questions before we move on to articulation?
[12:40]  Jurgi Harlan: So this is not an issue we must constantly correct when building a mech with a poseable head.
[12:40]  You: that is correct. LL has done a good job formalizing how an unconstrained head should act. =)
[12:40]  Jurgi Harlan: I think I have a grasp of it, sensei, please move along if you are ready.
[12:41]  You: Okay, on to articulation.
[12:42]  You: The root of the magic in the animation here is to set the hips in the animation upward into the air as appropriate. The position and overall orientation of the avatar are determined thus:
[12:42]  You: get the position and rotation of the agent, add the effect of the active animation(s) to that, then display
[12:43]  You: As you know one can have multiple animations playing simultaneously, as when we are standing and typing at once
[12:43]  Lazarus Bogan is offline
[12:43]  Jurgi Harlan: Yes.
[12:44]  You: So, SL combines the animations mathematically and drops any subset of the animations that are of a lower priority that the highest-priority animation, as well as non-animated bodyparts.
[12:44]  You: another way to say that:
[12:44]  Jurgi Harlan: My staff overriding my left hand while I type, for example.
[12:45]  You: a priority 4 animation (the mecha standing animation) negates the default standing animation for all joints that the mecha animation takes control of
[12:45]  Jurgi Harlan: Ah, my slouching animation is a priority 4…can you teach me of the priorities?
[12:45]  You: Yes, your staff is a perfect example of that
[12:46]  The Sojourner: poor Kage looks like he has been riding a horse too long
[12:46]  You: Ha! Actually, Soj, that’s a pretty important detail we’ll get to soon
[12:47]  You: Priority for our needs with mecha are a sledgehammer kind of tool, that is, Mecha animations are totally “unnatural” to the normal SL av, so I typically set all the mecha animations to the highest priority to minimize overlap
[12:47]  Raistlin Otis is online
[12:48]  You: The notable exception to that is that I did not animate the mesh avatar’s head with the mecha animations, which is why the mesh head remains naturally articulated / animated even when I’m wearing this avatar.
[12:48]  Jurgi Harlan: Alright…at the same time, my priority 4 slump overrides my head movement.
[12:48]  Jurgi Harlan: How did you prevent the head override exactly?
[12:49]  You: Good question, and a key skill for animating capably
[12:50]  You: As it turns out, any animations we make only affect the joints for which we explicitly specify animations. So, in Poser or Avimator, we load up an SL mannequin and start manipulating, say, the left arm.
[12:50]  Forseti Svarog is online
[12:51]  You: If we upload that arm-waving animation without specifying any new movement for the other limbs, SL will continue to animate those other limbs normally while the arm animation plays or loops.
[12:51]  Jurgi Harlan: Does this cause a more natural blend, or more jerky chaos?
[12:51]  You: So, for this mecha set of animations, the arms, legs, and torso all have movements specified, but the head and neck do not.
[12:52]  You: Regarding jerkiness, much of that is dependent on (1) the character of the animation itself. Is it jerky? (2) the values specified in the transition-in and transition-out attributes when uploading the animation
[12:53]  You: those values determine how much weight the client gives to the early and late frames of the custom animation as it starts and ends.
[12:53]  You: basically analogous to a “fade in” and “fade out” effect
[12:54]  Jurgi Harlan: Transition-in and transition-out were very difficult for me, I mostly hotwired it until it ran for my slump.
[12:54]  Jurgi Harlan: I didn’t really have an understanding, just poked and prodded till it worked.
[12:55]  Jurgi Harlan: More training and examples would help…
[12:55]  Jurgi Harlan: But we can save it until appropriate…
[12:55]  The Sojourner is offline
[12:56]  You: Sounds good. Let’s finish up this discussion on articulation with a brief bit on joints of the mesh avatar and how we ‘hack’ them
[12:56]  Jurgi Harlan: So the goal when animating is to produce smooth movements that override as little as necessary to keep the body’s reactive coding intact.
[12:56]  You: Generally, yes. THat’s a good way to summarize it
[12:57]  Jurgi Harlan: Oh, yes, that’s a part I was definately curious about.
[12:57]  You: THough for mecha, we tend to have to take control of almost everything with the custom animations.
[12:57]  You: Soj noted earlier that I look like I’ve been riding a horse too long
[12:58]  Jurgi Harlan: Because of the wide hips.
[12:59]  You: That is an artifact of the fact that we cannot with custom animations break the joints of the av. That is, I cannot specify a shoulder joint position that is 5m, say, from the rest of the body. The joints, though they’re all raised into the air, have
[12:59]  You: to remain at normal human proportion to one another, except as far as we can push them with the normal appearance dials / sliders.
[13:00]  Jurgi Harlan: Yes.
[13:00]  You: So, since mecha are of course bigger than we are, all of the size-related sliders are maxed out for this mesh av to get the joints closer to where they should be for humanoid mecha.,
[13:01]  Jurgi Harlan: Yes, to keep the attachments moving as much like the body as we can.
[13:01]  Jurgi Harlan: The closer the body to the joints, the more natural the interplay.
[13:02]  You: But as you can see, the mecha’s knee joints are further out along the av’s y-axis (left-right). For legs, this isn’t much of a problem, since the hips and knees primarily function like hinges
[13:02]  Jurgi Harlan: For upper arms, you’ve substituted energy streams.
[13:02]  You: Since the prim legs are only slightly displaced, the effect is pretty good. Arms, however, are much trickier.
[13:03]  Jurgi Harlan: An inventive technique, in my opinion.
[13:04]  You: A last-ditch one. 😉 As you can imagine, the ball-and-socket joint and movement of the shoulder leads to crazy displacements as the animations play; the particle streams are one way around this problem
[13:04]  Jurgi Harlan: Yes, I couldn’t figure out how to make it work either…
[13:05]  Jurgi Harlan: I’ve been planning to save for a Decepticon or Gundam one to study their trick…
[13:05]  You: How much are they?
[13:06]  Jurgi Harlan: Though the code to make the streamers move from shoulder to elbow is another mystery to me.
[13:06]  You: I’ll walk you through that another day if you like.
[13:06]  Jurgi Harlan: I could take you to them…I don’t have prices memorized.
[13:06]  Jurgi Harlan: …um, wow.
[13:07]  Jurgi Harlan: Bring them with me when I come next time?
[13:07]  You: That should be enough to get you started on one or the other. Consider it a homework assignment to tear them apart and learn their techniques? Bring them if you wish
[13:07]  Jurgi Harlan: Will do sir!
[13:08]  Jurgi Harlan: I was also noting that the steam golem itself is moddable.
[13:08]  Jurgi Harlan: Though the demo version I have is not.
[13:08]  Lazarus Bogan is online
[13:08]  Jurgi Harlan: As I understood the sign.
[13:09]  Jurgi Harlan: And so you know, I am a buyer of your work.
[13:09]  You: Yes, that was intentional; the demo is simply a demo– if it were mod, folks would have no reason to get the full version. For those that did, I wanted them to be able to make it their own if they wished
[13:09]  Dirty McLean is offline
[13:09]  Jurgi Harlan: I have a question on this model however…
[13:09]  You: Yes?
[13:09]  Jurgi Harlan: if you would look at my left hip.
[13:10]  Jurgi Harlan: There is some loose tubing or handles or some such, free floating.
[13:10]  You: Ah, so I see. Carelessness in the gunship attachment on my part
[13:11]  Jurgi Harlan: Yours doesn’t have it.
[13:11]  Jurgi Harlan: Wait, there they are
[13:12]  Jurgi Harlan: After you transformed back to robot mode.
[13:12]  Jurgi Harlan: They’re there now.
[13:13]  Nomad Nighbor: COOL transformers convention 😀
[13:13]  Jurgi Harlan: Now they’re gone
[13:13]  You: Much better
[13:13]  You: Just had to fox 3 scripts
[13:13]  You: *fix
[13:13]  Jurgi Harlan: Alright…
[13:14]  Jurgi Harlan: Once they test clean, can I expect a copy?
[13:14]  Jurgi Harlan accepted your inventory offer.
[13:14]  You: I’ll update the vendor as well
[13:15]  Forseti Svarog is offline
[13:15]  Jurgi Harlan: Nice.
[13:15]  You: I think we’re at a good stopping point for today; Any last questions for the moment? Message me when we’re both online and we’ll continue
[13:15]  Jurgi Harlan: Only this.
[13:16]  Jurgi Harlan: May I use some of that Linden to purchase a Steam Golem to study?
[13:16]  Jurgi Harlan accepted your inventory offer.
[13:16]  You: Not much need for that. =)
[13:16]  Jurgi Harlan: THANK YOU!
[13:17]  Jurgi Harlan: I have been wanting this since I first laid eyes on it.
[13:17]  Jurgi Harlan: You have a thankful student.
[13:18]  You: Hey, no problem. Some folks learn best by pulling apart previous stuff and seeing what makes it tick.
[13:18]  You: That should be all moddable right down to the scripting
[13:18]  Jurgi Harlan: Thank you sensei, I will study well before our next meeting.
[13:18]  You: Open ‘er up and see what forms more questions for you. We’ll cover them when next we meet.
[13:18]  Jurgi Harlan: I will, and thank you again.
[13:19]  Kage Seraph nods.
[13:19]  Jurgi Harlan: I am off to purchase more mecha!
[13:19]  Jurgi Harlan: Farewell!
[13:19]  You: Have fun!