News | About | Download | FAQ | Gallery
Here's what I did. How you do it may vary. I can only
tell you what works for me. If you find a better way, please tell
me!
If you don't know how to do some of this, please read the manual!
First of all, you're going to need to download the OBJCrusher program (about 340k) and the WriteMorphKeys expression (about 3k).
Now, follow this tutorial. Screenshots on the left, instructions
on the right.
![]() |
In Poser, create a cube (under Props), and resize it so that it is
the same size as your character.
You can get the width and height right from the front view, but to get the depth right you should switch to top view. Once the cube completely covers your character, export it to a Wavefront OBJ file. The default export settings will be fine. You can now delete the cube. We don't need it here any more. |
![]() |
Create/arrange your scenery and props in Cinema 4DXL. That is,
build as much of the set as you need in order to know where a character
should move. For example, in the demo animation, I created the walls,
floor, trough and pole.
Don't worry about the size of the overall set at this point - just model it at a size you find convenient. We'll adjust the scale to match Poser in a moment. |
![]() |
Here you can see the object heirarchy for the above. Note how it's all grouped under a single NULL called "Set". |
![]() |
Before we export the set into Poser, we need to scale it so that it
is the right size when Poser loads it. This is where the cube we
created earlier comes in!
Using the object manager, load the cube. You almost certainly will not be able to see it because it's so small. Select the Object tool Now using the Scale mode, scale your set down ... i.e., make it smaller. A lot smaller. You'll need to keep zooming in so you can still see it. Eventually you'll start to see the cube you imported from Poser. This is your guide to how small you need to make the set. The cube, remember, is the size of your character :-) (Thanks Steve S. I owe you one - great tip) Once you're happy with the size of the set, you can export it to Poser, but before you do so, use the coordinates manager to position the whole set at (0,0,0). That way it will be imported into Poser right where the character is standing. Oh, and you can delete that cube now - its work here is done. To do this, select the topmost Null (if it's not still selected), then use the Wavefront OBJ export function from the File menu. |
![]() |
Importing this OBJ file into Poser. Make sure the options are set as shown on the left. |
![]() |
You should now see your character standing in your set! He may
not be exactly where you wanted him to be, but that's OK ... so long as
the set is the right size in relation to the character, you're in business
:-)
So, now you can go ahead and create your animation. You may find that the background set disappears from time to time, or bits of it are missing. This is not a problem, but it can get annoying ... using Wireframe mode fixes it. (I do know why this happens, but personally it doesn't bother me that much. If it really pisses you off, write to me and I'll tell you how to fix it) Now here's an important tip - ideally, do not move the set within Poiser. If you do, you'll have to re-align everything later when you export back to Cinema 4D. If your character is in the wrong place, move the character, not the set. |
![]() |
When you're done, it's time to export the movement of the character.
You want to select Wavefront, multi-frame export, and you only want to export the figure itself - not the Universe, ground or other props ... unless the props are attached to the character, such as a cane. If you're working with two or more characters in a scene, follow this
tutorial for one character at a time - if you export both characters
at once, it will work in Cinema 4D but you will not be able to move the
characters with relation to each other. Maybe that suits you.
If so, go for it. Personally I don't advise it though because you
do lose flexibility - if you decide you want the characters in a different
place relative to each other, you'd have to do this whole process
again - whereas if you'd exported the characters seperately, you could
just move them in Cinema 4D without having to do all of this again.
|
![]() |
The only export option you should select is "Weld Body Part Seams". All the others should be off. |
![]() |
Poser will now export one OBJ file for every frame of your animation.
It will probably take a while, so be patient. Once it's done, you can close Poser. |
![]() |
Now you need to run the OBJCrusher program.
Firstly, select the input file by clicking on the first button with the ellipsis (...). Choose the first OBJ file Poser created. For example, if your Poser file was test.pz4 then the first OBJ file created was probably TEST_0.OBJ. You will notice that in the input filename area, the whole name is not listed but just 'Test_' (i.e., the 0.OBJ part is missing). This is normal. Next, select the output file by clicking on the second button with the ellipsis. This time you should type in a filename by hand. You don't need to specify the extension. In this example, I typed in "merged". Next, you need to enter a morph target name. What you enter here is up to you, but if there are going to be multiple characters in your scene (see notes later), then I'd recommend you at least try to make it meaningful. In this example, I've named it "Man_Walking". When all is done, press "Go" and conversion will start! If you get the error "That filename does not appear to be a Poser-created file." it means that the input filename you've specified does not look like the name above. For example, selecting the file TEST.OBJ, if it existed, would cause this error. I can think of two situations where this might occur;
|
![]() |
While conversion is running, you can track its progress by watching
the values in the bottom half of the window. You don't need to understand
what they all mean - they are mainly there for my benefit when debugging
the program, but at least they'll tell you that something is happening!
When the processing is complete, a dialog box will appear telling you so. You can then close OBJCrusher. You can also stop processing at any time by pressing the Cancel button ... however I do not recommend that you use the OBJ file created as it will only be partially complete and may confuse or even crash Cinema 4D. Note that the output name (in "Writing") is the name you specified with a '1' after it. That's because it's the first output file. I'm planning to update the software to write multiple output files so that we don't run in to size problems. However, this isn't implemented yet. The files will be processed fairly quickly but this could still take a while. You can get a rough idea of how long there is to go by looking at the file number currently being read (in this example, it's number 4) ... if there are 300 frames to read, then we know we have a while to wait! |
![]() |
We're getting close now! Return to Cinema 4D and load the file
containing your set if it's not already open.
From the Objects window, select Load Object and specify the output file created above. This might take a while, so be patient! When it's done, you'll see one new object in the object manager for every frame of animation you exported from Poser, and they'll have the target name you specified plus a sequential number. (Don't worry if you can't see any objects in your drawing windows - we'll worry about that in a moment. So long as they're shown in the object manager, everything is fine). In the example to the left, my target name was AnimTest, so the objects are called AnimTest1, AnimTest2, AnimTest3, etc. If you were following this tutorial exactly, they would appear as Man_Walking1, Man_Walking2, Man_Walking3 and so on. You need to group all of these objects under a Null. The easiest
way to do this is to use the group option (G) and select them all with
the bounding box.
|
|
Now that the objects (or morph targets, if you like), are here, we
need to import a "master object". This is the one which is actually
visible during the animation, and the one which we do all the work of texturing.
So using the Load Object function again, load the first OBJ file that was exported from Poser (in our example, it would be TEST_0.OBJ). The new object will appear in the object manager, but you will also find that a bunch of materials appear and that there are corresponding tags on the object. Now, if you were following this tutorial exactly, you should be able to see your Poser characters because you're still looking at a very zoomed-in version of your set. You might think this is OK, but it's not, for the simple reason that at this level of zoom, moving stuff around in Cinema 4D becomes damn near impossible ... try it and see (but make sure you UNDO afterwards). What you need to do now is scale everything in the scene back up to a level where you can comfortably move it around. To do this, using the object manager to group all the objects in the scene. Make sure you don't select the camera, if you have one! But do include the set, all the objects, and all the morph targets. Then click on the Null it's all grouped under, select the object tool, then in the coordinates manager under the "scale" column, select the "scale" function, enter 500 for X, Y and Z and press Apply. You should now find that everything is huge. Zoom back out (a lot) and you'll be able to see everything again. You can now ungroup those objects (Shift-G) if you wish. It doesn't really matter if you use 500 or 1000 or whatever - I just find that 500 scales the objects to a good workable size, and at this point in the process, the actual size of everything is irrelevant. Note that it doesn't matter where in the scene the master object (character) is, just that it's the right size. You'll see why shortly. |
![]() |
Here's what my screen looks like at this point in the process. You can see that I don't have just one character, but a conga line! All these extra characters are actually the morph targets. If you know what onion-skinning is, that's more or less what you're looking at here. Note; at this point, this can start to seriously slow down depending on how much memory your machine has. You will probably not see all of the morph targets, as Cinema 4D has a setting which limits the amount of time spent redrawing. I upped this parameter to 2000 milliseconds so you could see a lot of the objects here. The next thing is to get them in to the right place on the set. You might be lucky enough that they're already in the right place - if so, skip this step. If not, select the Null that groups all the morph targets and drag it around until it's in the right place. I'd recommend using the 4-way view for this and having the windows set to wireframe mode, otherwise it will be seriously tedious! You may now have guessed why it didn't matter where you put the master object. It's because the morph targets change not only the master object's shape but also its position. This is really helpful because it means that if you move the character around in Poser (by applying a walk along a path, for example), the walk will still "look right" when imported into Cinema 4D! It also means that if your character walked around objects, up stairs, leaned out windows, etc, all this should still look right now. The trick is simply to get the character in the right place. That's why we moved the set to (0,0,0) before we exported it, and why I told you not to move the set within Poser. Hopefully, you won't have to move anything - it will just all be in the right place :-) |
![]() |
Once you have put the morph targets in the right place, you can hide them from both the editor and the renderer as they're no longer needed. Turn both the render dots to Red to do this. |
![]() |
Finally (yes, we've almost made it!), we need to assign morph target
keys to our master object. To do this, we use a C.O.F.F.E.E expression,
but we place that expression on the null containing the morph targets,
not on the master object.
Add a new C.O.F.F.E.E. expression to the Null. A new window will open. Click the Load button and load the file WriteMorphKeys.cof. In a later version of this system, I'll make a nicer way of doing this, but for now you'll have to edit the code itself. See how I've circled some stuff on the pictures ... here's what you do ... (A) Enter the first frame number exported from Poser (usually zero)
... in the picture, it's set to zero
Now, to make this expression run, you don't click Execute. You have to rename the master object. I know, it's weird, this is the first version so give me a break, OK?! Double-click on the master object (not the Null, as I wrote yesterday - oops) to get a rename box. Insert an underscore as the first character of the name. For example, if it was called Man then change it so it reads _Man. Press enter. |
zoomed in ...
|
Straight away you'll notice that the underscore you just entered isn't there! (If it is still there, something is wrong - open the console window to see what the error message is ... and contact me if you don't understand it). That's because the expression removed it. The underscore was just there to tell the expression to work. You can actually delete the C.O.F.F.E.E. expression tag from the Null containing the morph targets now, because it's done what we needed it to do. So what happened? Well, take a look at the timeline, especially the section for your master object ... as you can see in the first picture, there's now a track called "Morphing" that looks almost solid red. It looks that way because there are so many keys that they all run in to each other. The second picture shows a zoomed-in view. As you can see, there's one key for every morph target you created. |
![]() |
Guess what? You're finished!
If you want to try playing or rendering the animation now, go ahead. From here, you'll want to actually give all those materials some texture, because by default they will all be grey, as well as adding lights, camera moves and so on. All of that is up to you. My work here is done ;-) |