Lear Cale
wordy bugger
Join date: 22 Aug 2007
Posts: 3,569
|
04-10-2009 09:40
From: Deira Llanfair 12 fps could be the minumum advisable maybe - considering the frame rates most people enjoy in world??? Xenon Linden seems to recommend 15 fps in his post. No, the lowest frame rate that shows the motions you want is best. Tthe LL viewer interpolates between frames, so regardless of what frame rate you use, the result is smooth rather than choppy (assuming the anim, after uploading, is smooth and not choppy due to optimization). Lower frame rates get hammered less by the optimizer, simply because the frame-by-frame movement is bigger. I typically use 10FPS, which works great. I believe I've gone down as low as 6; lower than that causes problems for me that it wouldn't for others (because I use a postprocessor filter program I wrote; it's mentioned in one of the threads listed by Deira above).
|
Deira Llanfair
Deira to rhyme with Myra
Join date: 16 Oct 2006
Posts: 2,315
|
04-10-2009 14:14
@Lear I'm beginning to think that the frame rate stuff is based on an assumption that most users will be getting frame rates in the order of 10 -15 fps. (I can hear voices saying "I wish!"  But generally speaking, I guess a performance of less than 12 fps would tend to be described as "laggy", whilst a really good performance would show frame rates over 30 fps. So, for example, if a user has an SL frame rate of 15 fps and you make an animation with the Poser default of 30 fps, half of the frames would end up being dropped from the client side. The actual frames that do get dropped would not be predictable because of all the many variables that affect SL performance. The Statistics window in the SL client shows the Frame Rate - and in my case it is very variable. I have seen it below 10 and above 40, so I can understand 12-15 fps being a reasonable basis to work from. I'm intrigued that you find 10 fps works well, as I was always given to understand that the human eye needs at least 12 fps to perceive a continuous motion - but again SL is an environment like no other and you can throw the "rule book" out! @Peavey Glad to know this is helping someone 
_____________________
Deira  Must create animations for head-desk and palm-face!.
|
Lear Cale
wordy bugger
Join date: 22 Aug 2007
Posts: 3,569
|
04-11-2009 06:37
From: someone I'm intrigued that you find 10 fps works well, as I was always given to understand that the human eye needs at least 12 fps to perceive a continuous motion - but again SL is an environment like no other and you can throw the "rule book" out! This is because the viewer runs at its frame rate. Whenever it needs to show a frame in between two of your animation's frames, it doesn't just jump from the previous frame to the next one, it interpolates between them. Imagine a simple jumping jacks animation with only 2 frames, created at 2 FPS, but the viewer is running at 30 FPS. You will not see the avatar alternating between two positions, with those positions changing instantaneously every half second. Instead, you'll see smooth motion between the two positions. Arms would rotate up and back down; legs would rotate out and back in. The viewer more or less creates 14 frames between your animation frames, making the motion more fluid. Try it and see! Of course, it would also look very robotic, since the interpolation is linear. So, I don't recommend making 2 FPS animations. 
|
Deira Llanfair
Deira to rhyme with Myra
Join date: 16 Oct 2006
Posts: 2,315
|
04-11-2009 13:26
Thanks for explaining that Lear - so the SL client does not only drop frames, it may also create frames! That does explain a lot of the complexity and variance.
Do you know how the software/system sorts out the timing of all this? It seems so very much more a function of the comms side of the system than I realised.
_____________________
Deira  Must create animations for head-desk and palm-face!.
|
Lear Cale
wordy bugger
Join date: 22 Aug 2007
Posts: 3,569
|
04-11-2009 20:25
On upload, your anim get "optimized". This can cause loss of joint motions in various frames (it does it joint-by-joint, frame-by-frame, so you can get parts of a frame to come through and others to be dropped). This is the only "comms-related" part; it's to make it so that a smaller file has to be downloaded to every that might see the animated avatar.
Playing anims is done entirely client-side. They're not synchronized between different clients, so you might see the girl skipping rope at the top of her jump while your friend nearby sees her feet on the ground, kness bent for the next jump.
The rest is rather straightforward. When drawing a frame, the client figures out how much time has elapsed since the last time it drew an animated avatar. Wherever it was in the animation, it figures out where it should be now. Practically speaking, that'll always be in between two frames. It interpolates to figure out what the joint angles are for that time and renders them.
The client's frame rate could be higher or lower than the animation frame rate. If it's higher, it shows multiple frames between two animation frames. If it's lower, multiple anim frames can pass between renderings. Lots of times, there's not much visible difference, because those animation frames were simply interpolations between animation keyframes.
For example, in Poser or qAvimator, we could create a 30 frame animation at 30 FPS, manually setting up only frames 1, 10, and 20. The programs interpolate to make up the frames in between. Visually, it doesn't make much of a difference whether the anim prog or SL does this interpolation, so we could have gotten the same effect running at 3 FPS and setting up frames 1, 2, and 3. The 3 FPS anim would have bigger joint movements per frame, so it would lose far fewer joint movements to the optimizer.
|
Gearsawe Stonecutter
Over there
Join date: 14 Sep 2005
Posts: 614
|
04-12-2009 07:41
This is maybe helpful the formula I use to make looping animations. http://www.joe-brown.net/cgi-bin/Uposer.cgi?animation_uploador 200 / Number of frames = In(%)
|
Deira Llanfair
Deira to rhyme with Myra
Join date: 16 Oct 2006
Posts: 2,315
|
04-12-2009 13:12
From: Lear Cale The rest is rather straightforward. When drawing a frame, the client figures out how much time has elapsed since the last time it drew an animated avatar. Wherever it was in the animation, it figures out where it should be now. Practically speaking, that'll always be in between two frames. It interpolates to figure out what the joint angles are for that time and renders them.
Oh Lear! It's not the least bit straightforward to me! Just imagine a dance floor with a dozen avatars all doing different dances - all of them looped...and a lot of my dances do not loop 100%, they have a start and an end and a looped part in between! Some of them running at higher than the client fps and some at lower!!! That's a phenominal bit of client calculation for each avatar. Well - you are all very clever guys. I just know how to dance. 
_____________________
Deira  Must create animations for head-desk and palm-face!.
|