CompuServe Thread

FieldRend bug workaround

1 messages in this thread
#98660From: Charles BlaquiereJan 11, 1995 9:45 PM
As of this writing, the current version of Imagine is 3.1, and it suffers from a bug that manifests itself when you combine pop morphing with field rendering. I'm very happy to share with you a workaround for it! As you know, Imagine doesn't allow morphing if the source and target objects have different structures, e.g. different point counts. Imagine supports what it calls "pop morphing", which is basically an instantaneous morph: a target object "pops" into view at the same time the source object "pops" out of existence. This is implemented by going into the Action editor and altering timelines like this: 1 1 2 3 4 5 6 7 8 9 0 AAAAAAAAA B BBBBBBB Actor A Posn. OBJECT A Align A Size (Other timelines omitted for clarity) The "A" timelines were created when you originally loaded object A in Stage editor frame 1. You then went into Action, shortened the A Actor bar to frames 1-5, and added two Actor bars using object B: one at frames 6-6 and one at frames 7-10. This creates a 1-frame morph to object B on frame 6, which essentially means no morph at all; then a 4-frame morph to object B on frames 7-10, which has no effect since we're morphing from B to B. (Side note: you must deselect "Spline interpolation" in the last timeline, i.e. frames 7-10. Even though you're morphing from object B to the SAME object, Imagine will complain if Spline is left on. This is unrelated to our bug, but is nice to know for anyone who's planning to pop one object into another) If you render this sequence from the Project editor, you'll see object A from frames 1-5, and object B from frames 6-10. Now comes the bug. Turn "Field render" on in the Modify Subproject requester, and re-render, you'll get an error message when Imagine reaches 50.00% complete on frame 5: "Warning: can't morph objects with different point counts". Why? Because with field rendering, the second half of the frame will be computed at time index 5.5, and Imagine will attempt to interpolate all values from frame 5 to 6. This works fine for position, color and such, but falls apart when Imagine tries to interpolate between Actor bar object definitions. (I had gone away on vacation and had left my computer to re-render a 170-frame animation, using this spiffy new field render setting. Boy, was I miffed when I returned to find this error message hanging on frame 74) And now, the workaround! It's simple: use two different objects. Just create the animation using only object A. When you're satisfied, select object A in Stage, and pick Object/Clone. Save changes and go to Action. You should see this: 1 1 2 3 4 5 6 7 8 9 0 AAAAAAAAAAAAAAAAAAA Actor A AAAAAAAAAAAAAAAAA Posn. OBJECT A AAAAAAAAAAAAAAAAA Align A Size AAAAAAAAAAAAAAAAAAA Actor A AAAAAAAAAAAAAAAAA Posn. OBJECT.1 A AAAAAAAAAAAAAAAAA Align A Size (In this example, I added motion to object A by establishing keyframes on frame 10; this is animation, after all) Now, all I need to do is make object A disappear after frame 5, and object B appear on frame 6: 1 1 2 3 4 5 6 7 8 9 0 AAAAAAAAA Actor A AAAAAAAAAAAAAAAAA Posn. OBJECT A AAAAAAAAAAAAAAAAA Align A Size BBBBBBBBB Actor A AAAAAAAAAAAAAAAAA Posn. OBJECT.1 A AAAAAAAAAAAAAAAAA Align A Size This substitutes objects, but maintains all settings you'd created for A. Best of all, it renders just fine in field render mode! Until Impulse fixes the problems field rendering encounters on half-frames, this is a quick and flawless solution.