Anim8or Community

Please login or register.

Login with username, password and session length
Advanced search  


An update to Anim8or, v1.00b, is available with a few bug fixes. Get your copy HERE. See the "ReadMe" file for details.

Show Posts

This section allows you to view all posts made by this member. Note that you can only see posts made in areas you currently have access to.

Topics - Francesco

Pages: [1]
General Anim8or Forum / OT - Hi there
« on: December 20, 2009, 03:06:08 pm »
Hi people,
nice to get back here again.
I've been away and completely disconnected from Anim8or for quite a while - sorry, I completely dropped the BVH converter too.

I'll start having a look around and get updated on the latest news,
hope you're all fine and well,
all the best,

Anim8or disallows setting two object to face each other because it would create a circular dependency.

I think this should be changed somehow, because it creates a circular dependency only if they are in the same branch of a hierarchy tree.

In other words, if two objects aren't one parent of the other (whichever the level of "parent/child" you have), then those two objects can actually face each other, with no risk of circular dependency.

This isn't truly important, because this issue can be worked around by adding another object as a placeholder, but I wanted to point it out anyway, as it would be a minor improvement.

General Anim8or Forum / Tails, chains, ropes, whatever
« on: December 03, 2008, 04:05:51 pm »
Well, I stomped on this and I wonder if it has been noticed before.

In scene mode, if you set an object to be the child of another object, then this will be moved along with its parent when the parent moves. But if you select both the child and the parent and you move them you get a double (cumulative) change that allows making really cool things - at least they are cool for me :P).

I discovered it by mistake while making the framecounter. Instead of selecting the box alone, I selected all the counters and the box, and when I moved them, it "exploded".

Digging this effect, I've made a simple example of a moving dragon's neck, and once I was there, I took some snapshots to illustrate the work.

So here are the steps I did:

I made a simple object containing one sphere and I called it "sphere" (clever, isn't it?)

I put two copies of it into the scene, setting one to be child of the other, and I left all coordinates to zero.

I saved the project and I opened it in a text editor.

The project saves the idea of "parent/child" with a simple and effective nesting:

  objectelement { "eobject01" "sphere"
    loc { (0 0 0) }
    objectelement { "eobject02" "sphere"
      loc { (0 0 0) }

So I duplicated the green lines till reaching ten objects, I renamed all the newly created objects (marked in blue) and I added a row of eight additional closed curly braces (marked in red):

  objectelement { "eobject01" "sphere"
    loc { (0 0 0) }
    objectelement { "eobject02" "sphere"
      loc { (0 0 0) }
    objectelement { "eobject03" "sphere"
      loc { (0 0 0) }
    objectelement { "eobject04" "sphere"
      loc { (0 0 0) }
    objectelement { "eobject05" "sphere"
      loc { (0 0 0) }
    objectelement { "eobject06" "sphere"
      loc { (0 0 0) }
    objectelement { "eobject07" "sphere"
      loc { (0 0 0) }
    objectelement { "eobject08" "sphere"
      loc { (0 0 0) }
    objectelement { "eobject09" "sphere"
      loc { (0 0 0) }
    objectelement { "eobject10" "sphere"
      loc { (0 0 0) }

I saved the file and I opened it again within Anim8or.

And now from the pictures you see some steps used to make the animation:
1 - All the objects in the scene, all rushed together around the origin
2 - Selected them all (with the drag-select tool)
3 - Moved them (and so on, you guess the tools)
4 - Rotated them (with the right mouse button)
5 - Selected half
6 - Counter-rotated a bit (again right button)
7, 8 - Messed a bit by rotating with the left button
...and so on, setting different keyframes.

I didn't spend too much time on it - I preferred to share it beforehand.

I think that using rings you could make a really cool shaking chain - it may be useful and handy to use two different objects, set at two different angles in object mode - where you can take care of the center of rotation - and then alternating them in scene mode.

I think that adding such a multiple manipulation method for figure and sequence modes could be a really cool feature - just imagine it!

Hope you enjoy this, it really amazed me when I discovered it.

Uhm... this is sort of aetherial subject... more than speaking of avi materials, this is another workaround. I'll try to be as clear as possible, but the idea itself is cloudy, I hope I'll be able to explain it right.

So assume you want to add some kind of monitor to your a8r scene, and that you want it to display the frames of a movie. You would use avi materials if you could, otherwise you could do the trick using several materials and single frames from the movie.

In the attached zip there is the project and the pictures used to make the small gif animation attached separately.

The upper animation is made by sliding the "tape" in scene mode, the lower one is made with a morph target and a controller (by the way, once you set a controller for a morph target anim8or won't allow you editing it any more, at least it does so for me - clicking on its track doesn't pop up the edit key dialog).

So this approach has several negative sides.
- needs separate frames;
- needs a material for each frame;
- the tape that exceeds the viewport must be hidden by something else.

Variations of this technique can be made using an extruded regular polygon and sticking the frames to its faces, finally animating it by turning it about its center. Another variation could be to use single objects (simple planes) to store each image and then adding them all to a figure where, using one bone for each image, you can make each image to stand in front of all the others during each different frame.

The last approach is the most expensive as number of different things you need to set up in the project, but if you can automate a bit the process of manually editing a .an8 project file, this all becomes really fast. The most important advantage of using the last variation is that you don't need to hide the rest of the tape (the frames hide each other). In other words you can fit the animation in a flat plasma monitor inside of your scene ;)

Here I come to the most interesting issue for me. The blue boxes sideways in the animation should hide the rest of the tape.

What if I could tell it that everything falling inside of that blue boxes must not be displayed/rendered?

It would need something like a material attribute tagging it as "empty space", "transparentizer" or whatever, and its result would be to ignore everything that falls inside of it. I think that this check could be done using the same "odd/even" test used when raster-filling an irregular poligon.

More or less in the same way, it would be a very useful animation feature to be able to set a material as an object exchanger.

Once again this is not so easy to explain, but I'll try.

Take the disc cutter I put in the WIP forum as example, and imagine the same work made in this way:

- object1: one object representing the white block.
- object2: one object (a figure or a morphed object) representing the hollow block and the disc.
- object3: one object, eventually a simple plane, set with a material tagged "changer" or whatever.

I put object1 in the scene and I put object3 between object1 and the camera.
I set a property of object3 telling it that object1 must become object2.

Now, when the renderer scans the lines of the viewport, it can tell if it is intersecting object3. If it does, it simply replaces object01 with object02 and renders that pixel as if the objects were actually exchanged.

I thought that this could lead to several problems. First of all, if object2 is not truly into the scene, it would share and use the tracks of object1. Fine until you don't want to use two figures and different animations.

I went to imagine this variation. Both object1 and object2 are put in the scene, and in the same spot of the scene. Object3 has two different special materials, one tagged A and the other tagged B. When the scanline intersect material A it displays only object1 and visaversa, crossing B only object2 will be visible. This is sort of adding a special kind of object to the whole system, as you'd need to tie object1 to material A *inside of object3 properties*.

I hope I've made it clear enough even for those who are not so accustomed to anim8or finesses and coding in general. I could make it all more transparent with some diagrams if needed.

Finished Works and Works in Progress / Box mod wip - Hand
« on: November 25, 2008, 03:14:16 pm »
Hi again Anim8ors,
this is another thing I worked on lately, after having a read to the tutorial pointed out by headwax.

The subject is pretty self explanatory just like the attached image.

I'm not really happy with the palm and back of the hand, while the fingers look nice. Other things I really have to dig further are the rigging and the skinning. I used bone influences but I fear I mistaken quite some things, because when the hand closes to a fist all the joints and moreover the thumb part of the palm get messed up like an empty plastic glove, instead of keeping the volume like a real hand.

Once again, looking forward for C&C, have fun people and thanks for reading.

Finished Works and Works in Progress / WIP - Disc Cutter
« on: November 25, 2008, 03:01:05 pm »
Hi all,
this is a small animation I made while playing around with rigging. Also if some things I'd like to do aren't really easily feasible with the current rigging features of Anim8or (mechanical stuff such as the animated piston I mentioned elsewhere), nonetheless I've been able to make something nice, following the lesson about telescopic bones.

Here below you have a small xvid I put in a zip archive, and also two images, showing four frames from the video and the rigging of the mech arm.

More than a wip this is just a toy project, feel free to comment and criticize, I'm aware of a couple of weird things but I'd like to hear your opinion.

ASL Scripts / Magnet Tools Package
« on: November 20, 2008, 02:03:02 am »
[ Last Package Update: 2008, Nov. 20th ]

Well, I think that after releasing this package I could take a break from ASL and dedicate my time to learn modelling, I severely need it.

Sorry for opening another topic, but once again I made quite some changes to the scripts, filenaming included, so I decided to post them separately, to avoid any confusion.

The attached zip contains the following files:
     1 - Magnet Sphere.a8s
     2 - Magnet Sphere Autodivide.a8s
     3 - Magnet Cube.a8s
     4 - Magnet Mesh.a8s
     5 - Magnet Mesh Autodivide.a8s
     6 - Magnet Mesh World.a8s
     7 - Magnet Mesh + Origin.a8s
     8 - Magnet Mesh + Range.a8s
     9 - Align Cube.a8s
    10 - Align Mesh.a8s
     i - Magnet Tools readme.txt

All the scripts share the same "mag", "mag-xy" etc naming convention.
Align scripts use "ali" instead of "mag".

Some details:

Magnet Sphere.a8s
Magnet Sphere Autodivide.a8s
-- The original spherical magnet, with separate push/pull modes, the second
version subdivides the faces of mesh01 as you enlarge them.

Magnet Cube.a8s
-- The same of the Magnet Sphere, but here you use a cube converted to mesh.
You can n-scale the cube like a plane and use this script to flatten some faces on a mesh. You can also n-scale the cube as a pillar and use it to align some points on a line. Alignments are best done in pull mode, using one axis (to flatten points on a plane) or two axes (to align points on a line).

Align Cube.a8s
--- Same results of the Magnet Cube script except that this one aligns entire meshes by their origins. Align scripts use "ali" instead of "mag".

Both Cube scripts differ from all the others because the changes are made on the cube axes and not on the world coordinates.

These replace the "polimagnet" script:

Magnet Mesh.a8s
-- Checks if the points of mesh01 fall between the magnet's origin and the magnet's faces.

Magnet Mesh Autodivide.a8s
-- Same as above but subdividing "mesh01" in the same way of the Magnet Sphere Autodivide script.

Align Mesh.a8s
-- Same results of the Magnet Mesh but this time moving entire meshes by their origins. I tried it to align a wood of trees on top of a terrain, you can see the picture in the second post of this thread. Align scripts use "ali" instead of "mag".

Magnet Mesh World.a8s
-- Checks if the points of mesh01 fall between the world's origin and the magnet's faces.

Magnet Mesh + Origin.a8s
-- Checks if the points of mesh01 fall between the center of a sphere named "origin" and the magnet's faces.

Magnet Mesh + Range.a8s
-- Checks if the points of mesh01 fall between the center of a sphere named "range" and the magnet's faces, but only points and faces falling into that range sphere are considered.

Magnet Tools readme.txt
-- Contains all the instructions to run the scripts.

For the people who is seeing these scripts for the first time, you can take a look to their evolution in this thread:
Old Magnet Tool

There you can find some other ideas which have been implemented on the road but which have been left out in this release. The old, buggy and slow scripts are still there, if you care to know.

Also, that thread contains some examples of what can be done with these scripts.

I hope you'll find this package useful, I look forward to read your comments and critics, as well as to see some snapshot of the works you will eventually make using these tools.

Thank you for your attention, wish you lots of fun with Anim8or.

ASL Scripts / Pivot, Wait() and GUI Functions
« on: November 10, 2008, 01:50:50 pm »
Hi all,
I've got a couple of suggestions about extending ASL features.

- Access / modify pivot's location and orientation;
I mentioned it elsewhere, the pivot is a very important reference point, way more evident than meshes' origins. By the way, it would be good to show meshes' origins in some viewmode (maybe just in pivot-edit mode while on wireframe view).

- Access to standard GUI functions;
(such as MergeFaces() and SubdivideFaces(), for instance, applied to selected items each time).

I'm asking for a specific reason: the polimagnet script used in "all directions" mode ends up enlarging faces. I'm going to code in that if a face gets too large, then it gets automatically subdivided, in order to add detail and volume. If I were allowed to call ConnectEdges(), tasks like this would become childplay.

Although I ask this for personal interest, I think that the access to those functions would be really useful for all ASL coders.

- Some kind of wait or delay function;
I mean giving back CPU ticks, not occupying them in a busy loop. The aim is to be able to put scripts in idle mode.

An example: the mirror script doesn't really need to duplicate the mesh all the times. Assuming also that Anim8or flags a mesh as "modified" after an user's action, the mirror script could handle it this way:
while($originalmesh.modified == false) {
$originalmesh.modified = false;
In a script like the polimagnet, checking if the meshes have been rotated or displaced would be enough for calling the wait() function. The "modified" flag is not truly necessary, but would be really useful anyway.

Have good time people.

Anim8or v0.98 Discussion Forum / Feature request: animate bone length
« on: November 04, 2008, 01:27:21 pm »
Hi all, I've been playing around with skeletons and animation, and I noticed that it is not possible to change bone lengths while animating a figure - well, you can, but actually it changes the whole figure, not that particular keyframe.

I think it could be handy for making mechanical stuff like pistons or for making weird models like the rubber-man.

A couple of gifs attached - yeah, lots of time underhand ;)

Finished Works and Works in Progress / Diagonal risen wireframe
« on: October 30, 2008, 03:49:14 pm »
Hi all,
here you can see a little render of mine.

Nothing really special I know, but since I like the final result I decided to share it.

This is how I did it:

1 - open an almost-all-quads face mesh
2 - select all edges
3 - connect edges
4 - switch to point-edit mode and invert selection
5 - delete points
6 - add edges where needed and fill holes
7 - select all edges and bevel them a bit
8 - extrude faces (with the extrude-connected tool)
9 - grow face selection
10 - apply different material to selected faces
11 - select all edges and bevel a bit more
12 - final result, ready to be subdivided

And here below I attach the pictures.

Feel free to use/modify this technique if you like it, you're welcome.

ASL Scripts / Old Magnet Tool
« on: October 25, 2008, 05:47:27 pm »
I've rewritten all the scripts and I've released them in another topic:
Magnet Tools Package

Please refer to that topic for further discussion, thank you.

Consider this thread as locked.

SCRIPT UPDATED: take a look to this post for the latest:

Hi all, that's my very first attempt at making a script. I've read somewhere that some 3D editors have a magnet tool. Honestly I never used one and I have no idea about the way it is intended to work, anyway, I tried to give a shot at it.

The idea by itself is simple, and the script I'm going to paste here below does compile without errors, but well, it simply doesn't work.

I took inspiration from the mirror script but I ended up with another way for exiting the script.

As with the mirror script, the CPU goes up 100% in my script, try it at your own risk.

I really don't know where I went wrong scripting, seems that moving the magnet shape around the screen doesn't make any difference, I think I'll have to debug it by outputting some values to a file.

As you will read in the code, only the first point of the "magnet" shape is used as reference. When this script gets fixed (if ever) it would be cool to use more than a point to model the "clay" shape, so that we could have some sort of "variable" magnet tool.

I modified one line and actually now it works (well, no, it won't work as expected but it does work somehow).

Try this: add a large multifaceted sphere in an empty object, convert the sphere to a mesh and ensure it is named "mesh01", add another mesh and name it "magnet", then run the script. Moving around the magnet while the script is running will somehow modify the sphere.

The problem is that I am computing the distances checking each coordinate separately, which is too wrong... I'm trying to fix it.

[EDIT 2]
Cool! it works! and it's also quite easy to use... although it must be refined... try this, and notice that the script does not move the points as long as you keep the mouse button pressed to move the magnet. It does move the points only after that you release the mouse button. Enough for today, tomorrow I'll try to post a better version with some deeper instructions. Anyway, here below is the updated script, give it a try. The mesh "mesh01" must be centered at origin - for the moment...
[/EDIT 2]

/* magnet pseudo-tool
to stop the script change one of the shapes' names,
the while-loop goes on as long as both shapes are found */


shape $magnet;      /* shape named "magnet" */
shape $clay;        /* shape named "mesh01" */
point3 $clay_p;     /* clay point */
point3 $mag_p;      /* magnet location */
point3 $cur_p;      /* currently modified clay point */
float $distance;    /* actual distance between clay point and magnet location */
point3 $dist;       /* coord distances between clay point and magnet location */
float $min_dist;    /* min distance for modifying clay point */
float $max_dist;    /* max distance for modifying clay point */
float $step;        /* step of change */
int $continue;      /* flag for exiting the loop */
int $i;

$min_dist = 2;
$max_dist = 10;
$step = 1;
$continue = 1;

while ( $continue ) {
    $magnet = project.curObject.LookupShape("magnet");
    $clay = project.curObject.LookupShape("mesh01");
    if ( ($magnet != NULL) && ($clay != NULL) ) {
        $mag_p = $magnet.loc;
        for $i = 0 to $clay.GetNumPoints()-1 do {
            $clay_p = $clay.GetPoint($i);
            $cur_p = $clay_p;       
            $dist.x = $mag_p.x - $clay_p.x;
            $dist.y = $mag_p.y - $clay_p.y;
            $dist.z = $mag_p.z - $clay_p.z;
            $distance = sqrt($dist.x * $dist.x + $dist.y * $dist.y + $dist.z * $dist.z);         
            if ( ($distance > $min_dist) && ($distance < $max_dist) ) {
                if ( $mag_p.x > $clay_p.x ) {
                    $cur_p.x = $cur_p.x + $step;
                } else {
                    $cur_p.x = $cur_p.x - $step;
                if ( $mag_p.y > $clay_p.y ) {
                    $cur_p.y = $cur_p.y + $step;
                } else {
                    $cur_p.y = $cur_p.y - $step;
                if ( $mag_p.z > $clay_p.z ) {
                    $cur_p.z = $cur_p.z + $step;
                } else {
                    $cur_p.z = $cur_p.z - $step;
            $clay.SetPoint($i, $cur_p);
    } else {
        $continue = 0; /* one or both shapes not found, exit loop */

Use this script at your will of course, feel free to. By my side I think I'll have to get a firmer grasp on ASL before getting to work things correctly.

Finished Works and Works in Progress / FOV Zoom
« on: October 25, 2008, 05:46:14 pm »
Hi all, here is a small attempt at doing a FOV zoom effect with Anim8or.

The effect is done by changing the distance and the FOV of the camera at the same time, the problem is that while the camera movement can be linear, the FOV change should be non-linear (logarithmic or geometric or whatever, I don't know).

The project and a small video are attached, just to get a quick idea if you don't have Anim8or under hands.

I guess that the FOV change should be made with a controller, but I'm already choking on ASL in object mode (see my post in the ASL section for that attempt). By now I tried to key it manually.

The aim is to change the perspective of the whole scene while keeping the size of the subject more or less constant (in this case the subject is the dodecahedron).

Take a look if you like.

Anim8or v0.98 Discussion Forum / "Texture Selector" crash in v0.97d
« on: October 19, 2008, 04:10:07 pm »
Hi everybody, that's my first post here.

I take the occasion to greet all the community and to thank you, Steve, for Anim8or, that's a fantastic program and the ART raytracer is truly amazing - just playing around with reflective surfaces, but nothing really cool to share yet.

Version: 0.97d
Steps to reproduce the crash:
- in "Scene Mode" select "Settings > Environment...";
- in the "Environment Editor" dialog click on the "..." button besides to "Cubemap Texture";
- in the "Texture Selector" dialog select "none";
- the program crashes right after clicking "OK".

[ since the same kind of dialog is used by the "Surface Texture Editor" dialog, and since selecting "none" there will not cause a crash, I think that the problem is around the "Environment Editor" dialog - I wasn't sure about reporting this detail, as it seems superfluous to me, but well, here it is anyway ]

I also had some problems loading bitmaps - the only BMP file I was able to load was a 24bits made with Paint, while the program failed to load several other BMP formats made with Gimp. I wasn't able to find any post about this problem, I could give further details or upload some BMP images that failed to load, if needed.

Thank you all for your attention,
all the best,

Pages: [1]