Welcome to GUIBlobs, by Chris Underwood (CMU). GUIBlobs is a program to create weirdful blobby pictures and animations. The best way to get to know the program is to play with it, so load it up and remember that you can press Left-Amiga-A to flip it to the front or back at almost any time (not during load/save/file requestors). At any time Ctrl-C should quit the program and dump you back into Workbench. Quick start quide: Wanna make it do something? Click on the text that says 'New blobject' and you'll get a grid appear. Click where you want the center of a blobject, then move the mouse and click again to set the radius. Do this again, and make sure the circles overlap a fair way or you'll get a very dull picture. Also ensure that the circles aren't too big (a couple of grid squares is enough for the moment). Larger blobs take longer to render. Now click the 'Render frame' button. In a short while you'll see your blob picture. Where the blobjects overlap you can see that they have kind of spludged into each other. A save requestor pops up to save the image if you want but you can tell it to smeg off if you don't need the image saving. Quick anim guide: Wanna create an anim? Make a couple of blobjects that aren't overlapping. Click the 'Blob numbers on' button to show the ID numbers of each blob. Click the 'Blobject screen to front' button to view the blob preview and decide which blob is going to move. Click the 'Linear blob movement' button and enter the number of the blob that is to move (probably 1 or 2). Now move the mouse about and notice the line that is following. This line is the path the blob will follow in the anim. Click somewhere where the blobs will collide later. Now click the 'Linear blobject movement' button. Enter the other blob's ID number and set the finish size with the mouse. Don't make it too big or too small, just a grid square's difference on the original size. Now click the 'Frames:' button. Enter how many frames you want in the final anim. I usually use 20 here. Next click on 'Preview anim' and you will get a look at what the anim will look like when rendered. If you are happy with it all then click 'Frame name:' and enter a path and base frame name. The default here is set up for my own HD and will probably need editing. A possible example could be "df0:frame" which would save frames onto the internal disk drive, under the names 'Frame0000' 'Frame0001' etc. Click the 'Render Anim' button to make the frames (This can take a while). To see the anim, load up DPaintIII or greater (or some other animating tool) and select 'Load picture' from the menus. Select the first frame and set the number of pictures to load too. The anim will load in. Press '6' to ping-pong the animation. Button discriptions: New blobject: Add a blobject to the blobscape. You may have up to 50 blobjects at once. Remove blobject: Delete an object from the blobscape. You will be prompted for an object to delete. To cancel, enter an illegal number such as -1. Blobject screen to front: Move the preview screen to the front. Linear blob movement: Set a path for a blob to follow. Radial blob movement: Set finish size for a blobject. Blob numbers: on/off: Toggles use of ID numbers on the blobscape screen. Density range graph: on/off: Toggle the colour chart in the top left of the rendered screen. Anim render info: on/off: Toggle the info screen (not saved with the anim) This screen appears only when making an anim. Render quality: Speed and quality control. this changes the step at which the blobscape is sampled for field density (explained later). A step of 1 means once per pixel. This is the best quality. A step of 2 means once per 2 pixels and will lead to blocky (but 4 times quicker) renders. Ideal for previews. You can set this sensibly up to about 10. Differetial model: sine/linear: Setting this to Sine will make the blobs speed up and slow down neatly at the start and end of the anim. Ideal for ping-pong anims. Linear makes the blobs move smothely from one end of the anim to the other. Grid: on/off: Toggles the grid on/off on the blobscape screen. Turn this off if things get messy or you want a faster preview anim. Threshold: Use this to set the drawing threshold. Valid values range between 0 and 1. More on the effect of this later. Colour mapping: Cycle through the available colour mapping types. More on these later. Clear all blobjects: Just that. Frames: Set the number of frames for an anim. Frame name: The base filename used for anim frames. Load blobscape: Load a previosly saved blob setup. This will preserve things like the anim settings and prefs. Save blobscape: Save the current blob data to disk. This will save prefs and anim data too. Preview anim: Show a preview of the current blob anim. This can be speeded up by making sure that the grid is off, and blob numbers aren't visible. Render anim: Make each frame in turn, saving them to the base filename plus a sequential number. All rendering can be stopped by holding both mouse buttons down until the end of the current line. Render frame: Draw a frame. If more than one exist then you will be prompted for the frame number to draw. Quit: Exit GUIBlobs. How it works: Each blob emits a field from it's centre. This field dropps off to nil at the blob's radius. To calculate the field density at any point on the screen, we add up the individual densities of all the blobs. Where the field density is greater that a set threshold, a pixel is drawn. This pixel is mapped to a colour using a mapping function applied to the density at the point. Got that? Yes? Sad swot :-) Nope? Thickie :-) Threshold: Changing this value changes how much of the blob is drawn. Low values result in large blobs that are very stodgy (not quick to splurge into another blob). Larger values make small blobs that take ages to render but are much more splungey and will squlidge into another blob quite easily. The inner circle of each blob on the blobscape screen shows an approximation to where the blob will extend to. It is usually less than the radius (which is the radius of the field, not the blob). This is only a guide. Colour mapping: There are threee types of colour mapping. I'll talk about each in turn and say when they are most useful. Old style mapping: This is what I originally used in the program development. It is garanteed to create some reasonable results as long as the threshold is quite low. This maps the colours 1 to 15 linearly to the densities 0 to 1. Any density greater than 1 is mapped to colour 15 (the brightest white). Since each blob contributes a density of 1 at it's center, it is feasable that a lot of detail where blobs overlap could be missed. Also, for high thresholds, the lower value colours won't be used and the picture will be white-washed. Fixed clipping: The default (and probably the most generally useful. This maps the colours 1 to 15 to the densities between the threshold value and 1. This makes blobs on their own look best, starting at very low colours and going to the brightest shades in their centers. It still clips any densities over 1 to the highest shade of white though, so if you have a few blobs overlapping together then some detail may be missed. Ranged mapping: This ranges the colours between the threshold value and the maximum density possible (also the same as the total number of blobs). This tends to work best when lots of blobs are fully overlapping. On their own, blobs can look too dark. Inspiration: This program ows a lot to POV-Ray. The documentation described the blob object that is available and I had a play with it (the results are in the archive). I also saw a Blitz2 demo that had a sort of primitave real time (5-7 fps) animated 2D blob thing. I did some maths and decided that the GUIBlobs program was feasable. A small hint to people who can program in real languages (eg C, C++, Pascal, ML, Perl etc) - don't go back to Amos after proggin' in your propper language, because you'll find yourself unable to get back into real programming and will have to learn the language from scratch! Amos has a weird effect on people - it is so easy to create wonderful graphic and sound demos in short code that you won't even want to go back to other languages. Unfortunaly, Amos lacks a few essential things: Pointer support, dynamic memory allocation (this does sort of exist but it's very limited), functions and non-bugged array mapping :-) Bugs: Probably too numerous to mention. I'm not really interested in carrying this program any further because the code is a bit of a mess and I want to move into a more modern language. There may be a Unix X version available in the future, and perhaps a version for Win95 (not programmed by me though). Perhaps I'll do somthing for RiscOS too, because it is such a fantastic OS. All this said, I don't much want people to report bugs or suggestions for future releases. If you want the source code for this then email me, and you can have it. Likewise, any questions on usage can also be emailed to me. I should be able to reply to all email. Archive contents: GUIBlobs Executable program Blob.iff24 24 bit POV-Ray blob picture. Blob.anim5 A short anim rendered with GUIBlobs and DPaint IV. Blob.blob The anim's datafile. Load into GUIBlobs. CMU.iff A blobby picture of my initials. Blobs1.iff A blob picture. Blobs2.iff Another blob picture. GUIBlobs.readme This readme file. Contact me at: Chris Underwood 29 Sandpiper Drive Worle Weston super Mare BS22 8UH or (preferably) email me at: csuwz@csv.warwick.ac.uk Visit my web page at: http://www.csv.warwick.ac.uk/~csuwz/ CMU