Search Unity

  1. Unity 6 Preview is now available. To find out what's new, have a look at our Unity 6 Preview blog post.
    Dismiss Notice
  2. Unity is excited to announce that we will be collaborating with TheXPlace for a summer game jam from June 13 - June 19. Learn more.
    Dismiss Notice

Animation system wish list

Discussion in 'Wish List' started by Paulius-Liekis, Nov 9, 2010.

  1. Paulius-Liekis

    Paulius-Liekis

    Joined:
    Aug 31, 2009
    Posts:
    672
    Hi everyone,

    We want to improve the animation system, so I would like to know what kind of features/fixes in animation system would allow you to make even better games from animation point of view - what would you like to see in the animation roadmap?


    Many thanks,
    Paulius LIEKIS
    Unity Technologies
     
  2. VCCGeek

    VCCGeek

    Joined:
    Nov 17, 2009
    Posts:
    89
    Ok, I'll start.

    One of the things that sort of bugs me is the inability to easily control the animation that shows in the editor while authoring. I know it has a setting for current animation and all, but that doesn't take effect until you start the game. For instance, I've a character model that has a really cool jump animation and an idle animation. When I import him, he shows up in the editor window in a wierd half-crouch posture that happens to be part of the jump animation. I want him to show up in his idle animation so that I can accurately place him in the level. So far, the only way I've found to do this is to go back into Maya, set the animation slider to whatever place has the anim that I want to appear, and then re-import the whole model. I've had a few times where I needed to change the animation of a model so that I could effectively line it up, and doing that re-import dance was not the optimal solution, because I have close to a hundred animations, which takes six minutes to import. What I ended up doing was placing the model as close as I could, then run the game with the animation that I wanted to line up with, line it up and then write down the coords and rotations, shut down the game, and then re-type in the coords and rotations. Also not optimal, but better than the import dance.

    Also, here's an interesting idea: a visual way to combine animations to make an "animation sequence" - think the Trax editor in Maya. It doesn't necessarily have to be that sophisticated, or even support layering (which I think is built into the animation subsystem anyway, so it wouldn't be that hard).

    Most importantly, I'd like to see support for blend shapes. It's really surprising how much simple facial animations add to a character. Yeah, yeah, I know, you can do it with bone animation, but that way is really very tedious and hard to set up correctly, and blend shapes usually look more natural, unless you have someone who's just amazingly good at the bones route.

    I have to say that I've been impressed with the robustness of the animation system. I fully expected Unity to choke on my 96 animations on a 120,000 poly model, but it took it right in stride (hey, it's targeted at the high-end computer segment). I think the only glaring weakness has been the lack of support for blend shapes.
     
  3. aoakenfo

    aoakenfo

    Joined:
    Jul 14, 2009
    Posts:
    35
  4. w00dn

    w00dn

    Joined:
    Apr 28, 2010
    Posts:
    275
    Adding animation events to read-only clips.
    It would be cool if we could add animation events to animations without having to make a clone/copy of the animation first. At the moment, one has to reset the events everytime a change to the animation in an external editor is done.
     
  5. br0kenp0ly

    br0kenp0ly

    Joined:
    Jun 3, 2008
    Posts:
    481
    I would like to see some kind of trajectory system found in 3dsmax :)

    Also, a node based artist friendly animation editor would be great, but that`s a _lot_ of work I presume.
     
  6. the_motionblur

    the_motionblur

    Joined:
    Mar 4, 2008
    Posts:
    1,774
    An animation sheet editor like in gamebryo would be cool. Something to check how good animations blend from one into another.

    Gamebryo lists a sheet of all the animations on a model and lets you check the crossfade. if it looks right it does not need change but if not then a manual in-between-animation would be necesary. With that animations-sheet it's easy to get that to work.


    I don't know if there's better tool for that task already (it's been quite a while since I've been working with Gamebryo). So if there's an even better solution for this - please feel free to correct me. :)
     
  7. DanTreble

    DanTreble

    Joined:
    Aug 31, 2010
    Posts:
    590
    Havok Behaviour :)

    Animation state machine, driven by events.
     
  8. Paulius-Liekis

    Paulius-Liekis

    Joined:
    Aug 31, 2009
    Posts:
    672
    What do you mean by "events" in this case? Is it events from animation clips? Or is it some other kind of events?
     
  9. DanTreble

    DanTreble

    Joined:
    Aug 31, 2010
    Posts:
    590
    Let me see how well I can describe this :)

    Lets say you have a character, they have two states, standing and crouched. You want the character to react to a "bump" event.

    The naive way to do it in code would be something like this
    Code (csharp):
    1.  
    2. if ( bump )
    3. {
    4.   switch( state )
    5.   {
    6.     case standing:
    7.        PlayAnim("standing bump");
    8.    break;
    9.      case crouched:
    10.        PlayAnim("crouched bump");
    11.      break;
    12.   }
    13.  
    The way I prefer it (and the way havok behaviour works) is to let the animator create a hierarchical node based animation state machine to represent this.

    So maybe the animator would have 2 separate hierarchies for crouched and standing, I would pass the bump event and within those hierarchies, the animator would decide what state to move to and also what happens in that transition. in our case an animation is played.

    The other important part of this is variables. As well as sending events, it is important to be able to pass variables through as well.

    So for instance we passed 'speed' variable through to the animation state machine. The animator used this variable to blend between a walk and run animation. The game then read the blended extracted motion from the result of all of the blends and use this to move the character. (This is the most contentious example as it puts the animator in complete control of character speed, designers don't like this!)


    TLDR watch this http://www.youtube.com/user/HavokBehavior#p/u/11/sclYyTiqRrw then the rest of that user's videos :)
     
  10. LuckyDog

    LuckyDog

    Joined:
    Nov 24, 2010
    Posts:
    97
    Being able to edit the armatures in unity so i can make animations in unity not in blender
     
  11. Paulius-Liekis

    Paulius-Liekis

    Joined:
    Aug 31, 2009
    Posts:
    672
    DTreble, oh I see what you mean. I well familiar with hierarchical blend-trees and state-machines. I would call inputs "inputs", not "events". That's the part that confused me :)
     
  12. thellama

    thellama

    Joined:
    Mar 25, 2010
    Posts:
    360
    I support the revival of the Animation Timeline. I need to view how my animations will interact! (For example, a man hugging his wife) it's impossible to do with the current animation editor. I hate playing the scene over and over again just to see out they line up. I should be able to scrub through their time lines and line them up perfectly at the moment of contact and be done with it!

     
  13. Ippokratis

    Ippokratis

    Joined:
    Oct 13, 2008
    Posts:
    1,521
    Please, create a better documentation. I wasted 4 hours today trying to access via scripting the volume fader until I coincidentally found out that is named m_Volume. Not mentioned in the docs, not easy to guess.
    Also, a
    Code (csharp):
    1. create_game_that_will_make_me_rich_yesterday()
    function is a must in a decent animation system :)
     
  14. meh11

    meh11

    Joined:
    Dec 1, 2009
    Posts:
    15
    Seconding that. A lot.
     
  15. andyz

    andyz

    Joined:
    Jan 5, 2010
    Posts:
    2,295
    As VCCGeek said - setting initial pose for placement.

    Also animation preview:
    A simple animation viewer would be nice - open a model and apply any of the animations in your project for a quick preview/test
    Bones/Joints are also not visible in Unity - only the transforms in a deep hierarchy. Would be nice to show skeleton in a clean way for reference with labeled joints.
     
  16. n0mad

    n0mad

    Joined:
    Jan 27, 2009
    Posts:
    3,732
    I have to admit, a state machine/behaviour visual manager like this one would save a lot, lot of time :)
    Couple it with AnimationEvent system by letting the dev plug custom scripts/functions/whatever to any part of this tree, and you got the perfect animation tool. There must some other cool stuff to implement with such a system indeed.

    The advantage of such a tool would be the separation of basic mechanics (aka. state machine) from complex game features (data processing, special effects, etc).
    This would also let the animators quickly prototype some complex behaviours without interfering with programmers rigorous code structures.
     
  17. zipper

    zipper

    Joined:
    Jun 12, 2011
    Posts:
    89
    I would like to see the following improvements:

    1. When using Alt- Left Click in the treeview of the animation window, the treeview should expand fully, like in the Hiearchy or Project View.

    2. Please change the default curve for animated boolean values to broken-constant - argggh :) (perhaps also automatically setting the scale to around 1 :) )

    3. Make the default imported animation clip editable! (as mentioned above). OR, when making edits to read only clip (scrubbing the timeline for example), create a new clip automagically and ask me to name it. Which is strange, because this is the default behavior when an object with NO animation is selected and the animation timeline is scrubbed.

    4. Coming from a Director, then Flash background i really miss being able to line up multiple animations and scroll through them to make sure animated objects are correctly timed with respect to each other (also mentioned above).

    5. A new "Show Animated - Flat" mode that only shows the "bottoms" of animated transforms of an animated object hierarchy instead of the whole hierarchy. Currently, it's easier to click on something in the heiarchy view, then switch back to the animation view in order to work on and select animations in deeply nested hierarchies. In my opinion, this could easily be resolved by just showing the object transforms that are animated in a flat list. You could show the full hierarchy to the object with a tooltip popup when the mouse is hovered over the object for awhile in the Animation view treeview.



    6. Remember my "Show:" state from the last time i used it. It is reset when i close and open the window using the Animation view in an undocked state (Ctrl-6 or through menu)

    7. A search feature in the animation view treeview would also be welcome.

    8. Multliple animation view windows. Woot - just figured out i could do this by selecting the small drop down in the upper right corner icon of any window and add an Animation view or two.. Duh...

    However, i usually put my animation view on a second monitor. When i place multiple animation views as tabs in the undocked window, the settings are not remembered when the undocked window is closed. Having multiple tabbed animation views seems to only be remembered by the layout view when its docked, or when leaving the the animation view undocked window open.

    Perhaps this could be put into a custom or user window that remembers it settings when closed then reopened. OR, just put a little lock button on undocked windows like the Inspector has which means -> keep these settings even when i close this window.

    9. Double clicking the top of the animation window (or any undocked window really) when undocked should maximize the window.

    10. Undocked windows need a minimize button :)

    11. Right-clicking near a tab (directly to the right of it) should show the add tab submenu from the upper right corner tab icon.


    Some of these seem like small things i know, but they add up during a workday to big frustrations sometimes :)

    zipper
     
    Last edited: Jun 15, 2011
  18. zipper

    zipper

    Joined:
    Jun 12, 2011
    Posts:
    89
    some more:

    Audio should be a first class citizen in the animation view, not just a function call to a script that plays a sound. I would like to see the length of audio attached to animated objects within the animation view itself. ie start time and end time. Put some audio channels in there please :)

    I would like to modify an animation to occupy a certain amount of time (buy sliding the right "eding edge" of the animation in animation view). This is different than setting the fps. I would like to bring in any animation and say "play this in xx.xx seconds"

    lastly, when i bring in animations from max, if i don't specify a keyframe on the first frame, UT ignores the first frame completly and begins its animation at the first set key as far as i can tell. A minor annoyance :)

    zipper
     
    Last edited: Jun 15, 2011
  19. smh1988

    smh1988

    Joined:
    Jun 8, 2011
    Posts:
    3
    why ! why there isn't any Ik ?
    and one more thing : It's so good to change the curves while you are playing games ! !
     
  20. zipper

    zipper

    Joined:
    Jun 12, 2011
    Posts:
    89
    This actually doesn't work, as each animation view changes to the currently selected object, and there is not a lock option for the Animation view like the inspector has.

    This is what i want :)
     
  21. johno

    johno

    Joined:
    Feb 20, 2011
    Posts:
    12
    - Some kind of state machine editor like havok behavior or Natural Motion Morpheme would be great. That seems like a long term project unless unity could just integrate one of those packages....?
    - A tree based animation blending system would also be awesome, and allows for some really flexible usage. By a blend tree I mean a tree where each branch blends the body poses of its children, with control over which bones to apply the animation to, blend weights between the children, etc. Gamasutra has a great article on this: http://www.gamasutra.com/view/feature/3456/animation_blending_achieving_.php
    - This might be too game specific, but systems to help with synchronizing animations between multiple characters, or to help with lining up animations with world space geometry would be super useful as well. This is usually done with an additional 'Sync Node' in the skeleton that the animator locks to a fixed point in world space when animating. At run time this node can be used to calculate where to position the
    character relative to a specific world space location.

    Short term there are a couple of simpler improvements that would help a lot:

    - The animation system really needs a way to drive the motion of a game object (similar to the root motion controller that mixamo offers).
    - I'd also like to be able to add animation events within maya (similar to the post from woodn).

    Great to hear you are working on this. Animation is definitely one of the weaker parts of generally amazing product!
     
  22. tatoforever

    tatoforever

    Joined:
    Apr 16, 2009
    Posts:
    4,373
    Do the animation system got improved? I din't saw anything. Just in case, i wanna badly get the current animation playing, kind of:
    AnimationState = animation.GetCurrentAnimationState();
    Proper FootPlant and RootMotion system. The locomotion system simply doesn't work fine.
     
  23. Paulius-Liekis

    Paulius-Liekis

    Joined:
    Aug 31, 2009
    Posts:
    672
    There haven't been many major changes recently, only bugfixes on the Animation system recently, but we plans for major improvements.

    Regarding GetCurrentAnimationState it makes sense only in specific cases, i.e. when only single animation is playing. You can always implement such helper function yourself:

    Is it possible to format code here?
     
  24. tatoforever

    tatoforever

    Joined:
    Apr 16, 2009
    Posts:
    4,373
    @Paulius,
    Click on Go Advance button you should see a set of tools to format code.

    What would be really awesome is some sort of VisionEngine8 animation matrix table. You can blend different animations (on different parts of your bones) and get new ones quite easily and fast.
    The current animation system is pretty awesome but it's also quite low level, you may wanna add few improvements on that side for a better rapid animation workflow.
    Unreal Engine animationtree editor is awesome, i was thinking in creating some kind of similar (but simpler) editor like Vision8 matrix table one for blending and layering animations in a faster way but hell i got not time for that now.
     
    Last edited: Aug 31, 2011
  25. uvavoo

    uvavoo

    Joined:
    Oct 15, 2007
    Posts:
    60
    How about animation on a path? The ability to create a splineform path and animate a game object to follow it, perhaps with banking etc.
     
  26. zipper

    zipper

    Joined:
    Jun 12, 2011
    Posts:
    89
    One more,

    I would like to see animation events that support more than one parameter. Or am i missing something obvious that allows the specification of more than one parameter?
     
  27. KRGraphics

    KRGraphics

    Joined:
    Jan 5, 2010
    Posts:
    4,481
    First off, i DEFINITELY agree with the need for Blend Shapes... without them my models look lifeless... and it would be awesome to have a visual animation editor so that I can easily create states for animation such as the jump animation that I had to split into two separate animations (I'm already using Antares Universe and it is really elegant to get FSM's working on it...)

    And I play a lot of Tekken and Fight Night Champion, so an implementation of physics based animation would be awesome so i could blend between the physics and animated reactions to my characters strikes... example, i want to kick my character in the face, I can have the animation for the kick and the opponents contact to the face, and also the physics based reaction of the head and torso rocking back, and them blending back to idle...

    That would make unity kick ass
     
  28. tatoforever

    tatoforever

    Joined:
    Apr 16, 2009
    Posts:
    4,373
    @neptune,
    Why do you think Unity bought Méchanim? For the unique and simple reason to improve 100x the current animation system. ^^
     
  29. KRGraphics

    KRGraphics

    Joined:
    Jan 5, 2010
    Posts:
    4,481
    When did this happen :)?
     
  30. tatoforever

    tatoforever

    Joined:
    Apr 16, 2009
    Posts:
    4,373
    They made the announcement at Unite11. They also said that what they have is the future of animation for games. What I'm hoping is something even better than euphoria, kind of crazy nasty revolutionary kick ass mind blowing stuff. ^^
     
  31. KRGraphics

    KRGraphics

    Joined:
    Jan 5, 2010
    Posts:
    4,481
    S***, and they had Endorphin on sale for $1000 US... if they have something better than Euphoria, and it is easy to apply, Unity will be extremely powerful and versatile...

    And also for another wish... allowing colliders to work on skinned cloth... i am using interactive cloth and the "attached" parts are clipping thru my models
     
  32. Dreamcube017

    Dreamcube017

    Joined:
    Dec 20, 2009
    Posts:
    253
    Something that I didn't see mentioned was a sort of... cutscene creator timeline thing like UDK has. I think that would be very useful.
     
  33. SomeGuy22

    SomeGuy22

    Joined:
    Jun 3, 2011
    Posts:
    722
    Did I see audio matching there? Did I miss something, or is this photoshop magic? :p

    Audio matching or something along the lines of making it easier to match voice would be nice.
     
  34. foxter888

    foxter888

    Joined:
    May 3, 2010
    Posts:
    530
    it would be cool have some kind of cinema editor, i mean more like a full one for when creating for example cut scenes, which there are somehow but what if for example i don't have to have a full scene change and all i want it to make it so the player somehow adjust his animations to let's say enter a vehicle.
     
  35. Carwash

    Carwash

    Joined:
    Nov 12, 2009
    Posts:
    95
    some sort of mixamo-like autorigging for unrigged meshes :D
     
  36. shinymark

    shinymark

    Joined:
    Aug 7, 2011
    Posts:
    66
    The only thing I want in the animation system is incredibly basic - the ability to add events to an imported animation without duplicating it first.

    The current event system is literally useless to us because of this. We have written our own system to handle events. It works but felt silly writing when Unity is intended to have this built in.

    There are many reasons why we don't like duplicating imported animations. It's a poor workflow, if the external animation updates you have to copy it again, and if you aren't careful you can lose data.

    Please separate event data from the animation data itself so that you can add event tracks to imported animations. Thanks!

    Oh, and as a side note please add a RemoveEvent API call. It's weird there is a runtime AddEvent but no ability to remove. That's another reason we had to write our own system for events from scratch.
     
  37. derek_miller

    derek_miller

    Joined:
    Jan 9, 2012
    Posts:
    11
    I am still not used to this gaming atmosphere.. So I am just gonna use this thread to explore those games I can play next..
     
  38. shinymark

    shinymark

    Joined:
    Aug 7, 2011
    Posts:
    66
    Quick follow-up to clarify my post - I think ideally animation event tracks would be their own data type that can be associated with animations, not a part of animations themselves. It would allow for a one to many relationship of animation to events. In our game, we use the same animation multiple times with different events based on context. In the current system, we'd have to copy the animation in memory multiple times to achieve this, which is wasteful.

    It opens up a new type of user error in that you could have events set on animation frames that don't exist, but that's a small price to pay for the flexibility my proposed system offers. This disassociation of animation data and event data is what I've seen in the professional console game engines I've worked with in the past.
     
  39. mMallory

    mMallory

    Joined:
    Jan 18, 2012
    Posts:
    1
    Hi there.
    I think it would be really nice to have our own little blue phone box flying here across the webpage.
    I mean TARDIS of course.
     
  40. vaettyr

    vaettyr

    Joined:
    Mar 6, 2011
    Posts:
    1
    Seconded, Thirded, Fourthed, and Fifthed.
     
  41. supaj

    supaj

    Joined:
    Jan 30, 2012
    Posts:
    14
    Something like putting points in to 3d space for a selected part to go to like choosing hand making it cock a rifle going trough points in space, and a instant preview for this, this would be good fo a noob like me.
     
  42. Raybrand

    Raybrand

    Joined:
    Feb 6, 2012
    Posts:
    98
    Animation organisation

    hi I noticed a number of problems with how unity handles its animations with there being no solution on the forum or in the documentation.

    When assets have 5 to 10 animations, then Unity is just fine. But if you have characters with 50 or 100 animations then you run into a lot of time consuming and tedious process which should be easy to rectify.


    1. First off, when telling unity where the animations are in the animation table, that table should be saved in the project folder, so that other assets with similarly organised animations can be shared. Also if a newer version of the same model where imported then the user would have to redo the entire animation table.


    2. With the character selected in the Hierarchy, in the inspector under Animations, when adding animations to the elements you can only do one animation at a time. there should be some mechanic where you highlight as many animations in the menu, so when selecting an animation for element 0, if 10 are highlighted and selected then elements 0 to 9 will equal those selected animations.

    This is very useful when dealing with animation events, animation events cannot be placed on the raw animation from the model, it has to be copied because the original animation is read only.

    When in the animation event there should be hotkeys that puts the marker at the start of the animation and at the end.

    3. There should be a keyword in the script that determines when the animation has ended, so for example
    animation.end ("strike"){
    //do stuff
    }
    which would mean in the script that when the animation strike has played once the script will do what is in the brackets.



    Despite my experience I believe these things are very important when making fast paced precise action games, for example new street fighter, tekken, where the gameplay and enjoyment relays on the precise mechanics. like the hit boxes to match the animations, the warm up times for attacks, and recovery times.
    These mechanics are at the mercy of the animations, otherwise if they don't match then the game won't feel right. The last suggestion will help greatly because with that programmers can initiate recovery time, start cooldowns, remove hit boxes.

    My current project is a Ninja Gaiden/Kingdom Hearts game, so my main character has over 100 animations for his combos and special attacks, but when I remove the hit boxes and initiate character abilities are inaccurate because I am forced to use the timer to guess when the animation has finished, or spend long amount of time calculating with the number of frames. and animation events is too long and tedious to do it with most of my animations, which in the end result will reduce the quality of my game.

    Unity needs these mechanisms to be more appealing to these kinds of games.
     
  43. Paulius-Liekis

    Paulius-Liekis

    Joined:
    Aug 31, 2009
    Posts:
    672
    Thanks to everyone for valuable feedback. As you might have heard we're working on new and shiny animation system which will be way better than what we have now.

    Raybrand, I agree that Unity doesn't provide out of the box UI for these things, but most of them can be done by simple Editor scripting:

    1) Look into AssetPostprocessor.OnPreProcessModel. Or just generally how ModelImporter settings can be copied from one asset to another.

    2) Same here - some Editor scripting should reduce manual work by 80%.
    Add events to real-only animation - that is on our list...

    3) You could simply add animation event in the end of animation clip at runtime...

    And yes, I agree Unity could provide more stuff out of the box...
     
  44. Raybrand

    Raybrand

    Joined:
    Feb 6, 2012
    Posts:
    98
    good to know the read only animation is on the way, that would help, for 3 for now what you suggest will have to do. thnx for the replay.
    I look forward to the new changes, it would make my work much less stressful.

    when new ideas are implemented in Unity does unity release the next unity version or a plugin?
     
  45. Paulius-Liekis

    Paulius-Liekis

    Joined:
    Aug 31, 2009
    Posts:
    672
    We release everything at the same time: Unity Editor and Unity Web plugin. There is no point releasing them separately, because there is no point having plugin if you can't build content for it, and there is no point having editor if users can't play your game. In rare case we release Web plugin separately, but that is only for major crash-fixes.
     
  46. Nemox

    Nemox

    Joined:
    Feb 16, 2010
    Posts:
    396
    Better ability to share animations between characters. That is essentially to account for bone size differences rather than always having the transforms match the original skeleton only.

    For example, if I make a run animation with only Rot keyframes on a tall character, my short character still gets all stretched out. In addition, if my animation does call for a Pos keyframe, it should be possible to make it relative to size rather than absolute.
     
  47. Paulius-Liekis

    Paulius-Liekis

    Joined:
    Aug 31, 2009
    Posts:
    672
    @Tuah, that is comming in 4.0 with the new animation system. Sharing animations between characters is one of the goals. Our guys did some preview talks during GDC.
     
  48. Umpteen

    Umpteen

    Joined:
    May 6, 2012
    Posts:
    1
    Just to clarify: is the ability to add animation events to 'read-only' imported animations (and have them survive the re-import process) in the pipeline?

    And if so, is there an ETA? We have some hard deadlines looming and need to quickly decide whether to a) augment Max to export parallel information and parse it ourselves, b) implement some fugly auto-duplicate AssetPostProcess with our own re-import handling, or c) hang on for the next release.
     
  49. Paulius-Liekis

    Paulius-Liekis

    Joined:
    Aug 31, 2009
    Posts:
    672
    @Umpteen, it's something we want to add, but we haven't started working on it, so I would recommend implementing some kind of solution on your side.
     
  50. Games-Foundry

    Games-Foundry

    Joined:
    May 19, 2011
    Posts:
    632
    An ability to have AnimationEvents trigger without having to always play the animation. Case in point: when combat is happening off screen. We have animation events that are triggered when a weapon impact lands to register damage against characters. If we leave culling based on renderers, that means combat no longer continues when the characters are offscreen because the animations stop playing. We have to set always animate to ensure the damage continues even when the battle is not on camera. Same thing goes for syncing sound effects with animations via AnimationEvents, for example foot steps when a character walks behind the camera.

    This is expensive just to have a few events raised. It would be great if there was an option to still run the events cycle without having to animate everything else too.
     
    Last edited: Jun 25, 2012