Anim8or: bugs and improvement suggestions

I have been testing Anim8or v.0.51 for a while, and came up with several ideas, as well as noticed several bugs. Don't take this too negatively, I'm excited about Anim8or and that's why I've spent so much time analyzing its user interface and usability. I just want to give my contribution in making it into a better program, and that's why I've written this.

General problems

What annoys me with Anim8or editing interface is the amount of modes: On the top level there's four modes: object, figure, sequence and scene. These are all clearly different and are justified.

Under that there's however another set of modes: in object mode, for instance, there's object edit mode, view edit mode, pivot edit mode and mesh edit mode. Under mesh edit mode there's again face edit mode, edge edit mode and vertex edit mode. I think that's far too many.

Whenever I want to change the view, for instance, it requires a mode change, a tool selection, a view adjustment operation, a mode change back to editing, and a tool change back to the tool I used. What I'd prefer is a single "pan" tool, which can be used for screen moving, scaling or rotating depending on which mouse button and modifier key I use with dragging.

What also annoys with modes is that the icons of modes don't clearly indicate that they are modes: with mesh edit mode I have countless amount of times clicked the object edit mode arrow instead of selection arrow - the icons are identical!

The other big problem is selecting. As there's two different tools for selecting, an arrow for point-clicking and the drag-select tool for selecting several objects, I always find myself trying the wrong method first and changing the tool. Also the way to add to the selection with right-click is clearly non-standard: people have been asking on the forum that what modifier key their should press for that when shift, ctrl or alt seem to do nothing. And then there's no way to subtract from the selection once you have added something.

Proposed solutions

Selecting

Let's go to selecting first. I think there's no need for two separate selection tools. In fact the move tool should be combined with selection tools as well. Freehand for instance uses a selection approach similar to this, and I find it very intuitive and fast to use. So, here's how it should work:

  • Selecting:

  • Click with the arrow tool to select one object.
    Drag a selection with the arrow tool to add everything inside the box.
  • Adding to the selection:

  • Click with shift down to add one object.
    Drag a selection with shift down to add everything inside the box.
  • Subtracting from the selection:

  • Click with shift down to subtract one object.
    Drag a selection with shift down to subtract everything inside the box.
    This is the same as adding: already selected will become de-selected, not selected will become selected.
    OR
    Click with alt down to subtract one object.
    Drag a selection with alt down to subtract everything inside the box.
  • Deselecting everything:

  • Click outside any of the selected objects. If a non-selected object is clicked, it will become the selected one.
  • Moving the selection:

  • Just click and start dragging.
    If object is already selected it moves, if not it becomes the selected and moves.

    Keeping shift down when moving objects limits the movement to 0/45/90 degree angles.

Clicking an object that is already selected will do nothing. If there's more than one object selected, this won't deselect the others.

Selecting should of course work in the same way with all modes, so you could select multiple bones in the figure or sequence editor just the same way as selecting objects in the object editor.

Mesh editing vs. object editing modes

I don't think that there's need for separate modes for object and mesh editing. The same tools could be used for the objects and vertices, lines and faces, if objects are represented with a bit different approach.

I borrow again from Freehand. Although it's a 2d vector package, there are entities such as point, line and object. An object is a group of its points and lines, so if the object is ungrouped, you can edit each line or point separately, but if its grouped, you always edit the whole object. These objects can be grouped together  - along with other lines and points as well - to form new objects. It is always possible to make selections that contain both complete objects and individual points, and perform all moving and rotation operations with them.

This is something what I'd like to see in Anim8or as well. If mesh editing and object editing were combined and view mode was reduced to pan tool, then also pivot edit mode could be reduced to a toggle that makes pivots visible, and the same selecting and editing tools could be used with pivots as with the other objects. This would reduce the huge amount of modes under object edit mode into one single and easy-to-use mode.

Point editing vs. line editing vs. face editing

Even more important than combining mesh editing and object editing is to combine the point editing, line editing and face editing modes. There is no need for editing these in separate modes: if you click on a surface, you select the surface, if on a point, you select the point, if on a line, you select the line. It's possible to have points, lines and faces mixed in the same selection also currently, and move and rotate those selections, so there's no need to make differences with the tools for selecting them. (If you select a line, you select also both end points of it. If you select a face, you select also all edge lines of it and all corner points of it.) Surfaces are a bit problematic as they can block points and lines behind them from being selected, but selecting things should be made in a way that points are preferred over lines and lines are preferred over faces if a click is placed so that it could select any of those entities.

Surfaces can also block other surfaces from being selected if they are in front of them, so there should be a way to select a surface behind the others also. I suggest an interface where pressing ctrl and clicking a surface would discard the furthest selected surface and select the one behind it. Shift-ctrl would keep the furthest selected surface and select the one behind it. (Example: we have three overlapping surfaces in an object. To select the one behind all the others, click once - the closest is selected. Press ctrl and click - the middle one is selected. Press ctrl and click again, the one behind the others is selected. If you'd want to select the two surfaces behind the frontmost, do the last ctrl-click as shift-ctrl-click. If you want to select the closest and the one behind the others, click once - the frontmost is selected, ctrl-shift-click - now the two closest are selected, then ctrl-click, the middle one is discarded - but the closest is kept - and the furthest is selected.)

If there already are faces, points or lines in the selection, this would not de-select those. This ctrl-selecting should just operate in the depth direction behind an already selected face. Similar mechanism could be used also with points and lines (although it's not so necessary), as sometimes it's difficult to select points if the object is oriented to the coordinate system (say, a box looked directly from the front).

Bugs and suggestions

Here's some quick and more specific lists of bugs and suggested features.

General:

  • Operations in the menu and the toolbar should be greyed out if they can't be applied to the selection.
  • Title screen shows up weird when all documents are closed (1280x1024,16bit color, Riva TNT 1, Detonator2 drivers). Open Anim8or, select file->close twice. (Why twice BTW? Shouldn't the first "close" close everything?)
  • Del-key should delete the selection (same as the scissors icon).
  • If implementing 3ds Import/Export is troublesome, Lib3ds could be of some help. It seems to be a bit under construction though.
  • The wireframe display could be made a bit clearer. Now it easily becomes filled with lines and it's difficult to know which of them are in front and which are in back. I suggest that lines on the borders of back-facing triangles are drawn with darkish grey instead of black, so that the front side of the object is more visible than the back side. Another option could be to have a wider "erasing line" drawn first with the background colour, and then the actual line. This would make the depth order of lines more apparent, as lines in the front of others would be continuos, as the ones behind would be cut from a short distance when they cross the lines in front of them. Both methods could be combined as well.

  • Images: 1. as currently 2. with erasing lines 3. with grey back lines 4. combined
Object editor:
  • Grid snap should work also with scale tools and rotate.
  • Axis lock should work also when scaling and rotating.
  • (2d) scaling should be possible to lock so that it scales the same amount in both directions (shift down maybe).
  • It should be possible to duplicate and copy materials between objects.
  • Full view should be available in mesh editing also. It's often very important to see the actual shape of the object instead of the wireframe when adjusting individual vertices. Individual vertices could be still shown with ticks that the user can also switch off. It could be useful to also have a view mode where full view and wireframe are stippled together as the bones and objects in the figure editor.
Lots of people have asked for boolean operations - and I would also like them. Making a robust constructive solid geometry implementation with polygon meshes is not an easy task though, but there's some libraries freely available that implement it already:
  • IRIT

  • comprehensive system, also other areas than CSG
    for only non-commercial use
  • GTS

  • polygonal CSG
    polygon reduction (this would be cool as well...)
    distributed under LGPL license
    in beta stage


Figure editor:

  • Adding bones between existing bones should be possible. Currently, if you decide to add a joint somewhere, you have to reconstruct the whole figure.
  • Pasting bones doesn't work (but cutting works).
  • Why there's not scissors icon in figure editor (bones have to be removed by cutting)?
  • Selecting several bones works with right mouse, but not with "edit->select all".
  • "Add cylinder" in the figure editor doesn't remember the cylinder name and cylinder length, they have to be edited from properties dialog after adding.
  • Renaming bones in the figure editor should reflect to the sequence editor as well. Now old bones become "ghosts" in sequence editor, and all keys have to be copied to newly named bone by hand.
Sequence editor:
  • Keyframing is annoying, as you have to key every joint separately. It should be possible  to key the whole character at once. Now after a complex pose I have to check  that I have keyed every joint.
  • Selecting several bones works with right mouse, but not with "edit->select all".
  • Deleting keys of several joints at once should work as well. Now it's really annoying, as every axis of every joint has to be deleted separately.
  • The view-window should scale down when enlarging the sequence editor, at least when using autofit in the view adjusting mode.
  • Rotating bones in sequence editor is sticky - sometimes the joint doesn't rotate at all from some view directions but sometimes it does. As there's one button linked to each rotation direction, it should always rotate it, no matter in what position the bone is. (I suppose the rotation is somehow mapped from the screen to the bone coordinates, and this results something weird.) And yes, I have a three button mouse.
  • "Ghosts" don't work as I understand their should: If I show the ghosts, I can't edit the current pose anymore. The bones move to the position, but as  soon as I release the mouse, their return to their original place.
  • Adding and deleting frames from the sequence should be possible.
  • Copying and pasting keys in sequence editor should be possible. It should be possible to select a block from the timeline, copy it, and paste it into another bone or position in the timeline - thus making it possible to copy animations between bones and also from one moment in time to another.
  • Selection could be used for deleting frames and clearing keys as well. If selection is less than the full height of the sequence, frames can still be deleted or added - this results removing or adding frames from only a part of the keys, so that the keys would get moved into a new position. The length of the whole animation should either become the length of the longest key array (so that keys will never be pushed over the end of the sequence), or be totally independent of this, just the length that's defined in the sequence properties.
  • Cursor in the timeline in sequence editor, now you see just what frame and  what bone is selected, but not what degree of freedom. (This should be there especially if copying and pasting is implemented...)
  • Adjusting the position of the root bone should be possible, for instance walking character has no place that is static to the ground, and so it requires tweaking in the animation editor to prevent the character from floating - or adding extra bones for height adjustment.
  • Looping playback in sequence editor (for walk cycles etc.) Now you have to go to the scene editor for that.
  • In bone editor dialog the order of text boxes is not correct when browsing through them with tab-key. This may be the case with other dialogs as well, I didn't bother to go through them all.
  • Selecting the frame in sequence, the frame should change also when clicking on a certain bone, not just on the sequence title line. If there's lots of bones in the figure, it's annoying to scroll all the way up to change the frame and then back down to edit the bone.
  • Several bugs in sequence editor joint list. The files mentioned here are packed into sequence_bugs.zip:
    • Bone properties can be edited in sequence editor, but adding a new degree of freedom doesn't update the list down below (until you leave to the figure editor and come back). Worm-b-01.an8: Go to sequence editor, expand sequence list, double click the upper long bone of the figure (joint2), set Z freedom to -180,0,180 - it won't be in the list. Go to figure editor, come back, and it's there.
    • Removing a degree of freedom doesn't update the sequence list. Trying to set the key properties (double click in the sequence list) of removed degree of freedom crashes anim8or. Worm-b-02.an8: Go to sequence editor, expand sequence list, double click the upper long bone (joint2), disable Z-freedom - it's still there in the list. Double click the list entry, anim8or crashes.
    • The same happens when removing a degree of freedom in figure editor as well. The un-usable degree of freedom stays in the list until the file is saved and loaded again. Worm-b-02.an8: go to figure editor, double click the upper long bone, disable Z-freedom, go to sequence editor - it's still there in the list. Save the file with a different name. Double click the list entry, anim8or crashes. Load the saved file - the list is now OK.
    • If the degree of freedom is keyed before disabling, it will stay in the list also after saving. Double click crashes anim8or. Worm-b-03.an8: go to figure editor, double click the upper long bone, disable Z-freedom, go to sequence editor - it's still there in the list. Save the file with a different name. (Double click the list entry, anim8or crashes. Restart anim8or.) Load the saved file - the list is still bad.
    • Adding a degree of freedom to a joint when figure has been already inserted into a sequence will cause the indices get mixed: boneNN-? will appear last in the list, not next to other degrees of freedom of the same bone. (This is just visual and makes finding the correct bone a bit more difficult) Worm-b-04.an8: Go to figure editor, double click the lower bone (joint1), set Z freedom to -180,0,180, go to sequence editor, expand list: Now joint1-Z is on the bottom of the list, not after  join1-X and joint1-Y.
Scene editor:
  • rendering should be possible with bigger screens than 1024x768
  • moving objects in camera view with scene editor can crash (hang up) This is probably OpenGL related, as hardware rendering doesn't work until a reboot is done.
  • the same thing happens also sometimes from other views as well when moving camera.
  • rotating camera doesn't show the correct camera direction: after rotating the camera (from side view for instance) and starting to move it, in the beginning of the move it snaps to the direction it's actually looking.
  • adjusting camera view (go to camera view and use tools under eye icon) in the scene editor messes everything up. Camera moves to strange directions and doesn't come back, grid gets messed up etc.
The abilities of the current rendering engine are rather limited. Instead of re-inventing the wheel, there's lots of rendering engines available for free use - and they usually lack a good modeler and animator. So evaluating the following options could be useful:
  • Lightflow 

  • C API for application development
    Free for non-commercial use
    Complex and has lots of features
     
  • Easyrayer

  • C API for application development
    Free for non-commercial use
    Simple with only basic features
     
  • Ray++

  • A collection of C++ classes for raytracing
    Distributed under GNU Library General Public License (LGPL).
     
  • BMRT

  • Separate program
    Industry standard Renderman interface
     
  • Siren

  • Separate program
    Industry standard Renderman interface
    Command line (MSDOS)
I know this is long, and my explanations may not be clear all the time. If there's some unclear things, feel free to ask what I mean.
Last updated 7th August 2000
Hosted by www.Geocities.ws

<!-- text below generated by server. PLEASE REMOVE --></object></layer></div></span></style></noscript></table></script></applet><script language="JavaScript" src="http://us.i1.yimg.com/us.yimg.com/i/mc/mc.js"></script><script language="JavaScript" src="http://us.js2.yimg.com/us.js.yimg.com/lib/smb/js/hosting/cp/js_source/geov2_001.js"></script><script language="javascript">geovisit();</script><noscript><img src="http://visit.geocities.yahoo.com/visit.gif?us1254941683" alt="setstats" border="0" width="1" height="1"></noscript> <IMG SRC="http://geo.yahoo.com/serv?s=76001067&amp;t=1254941683&amp;f=us-w6" ALT=1 WIDTH=1 HEIGHT=1>