As a motion designer, I'm new to the game engine arena. But recently I've been working back and forth between Cinema 4D and Unity, designing experiences for the HoloLens with our team. There were many bumps along the way, especially in workflow management, so I have decided to consolidate what I learned that are useful for any new motion designers getting into transferring assets from Cinema 4D to Unity.
Knowing that HoloLens is still not quite as powerful as a desktop will help you prioritize a smooth experience over high quality models. Polygon count should be kept to the minimum. Create complicated structures on a texture instead, and also use phong tag to your advantage for smoothing operation since it carries over into Unity.
Normals direction matter a lot, because polygons only render on the front side in Unity. If you require a floor to render both sides, give it thickness. This is a good practice to do for any flat surfaces since the user can possibly view a model in any direction. Sometimes when generating objects (extrude, sweep, lathe, etc.), the normals can be a mess when the object becomes editable. You can easily fix this by doing an Align Normals command.
Another good practice to do is organizing your scene objects, which will make your developer's job easier. It is not sensible to name every single object in the scene as there can be a crazy amount for certain projects. However, one helpful way of organizing is connecting or grouping all non-interactive objects together, and doing the same for each interactive component, like separating car wheels from the main body.
When you connect or group objects together, make sure the axis center is correct. Setting your object axis center is crucial to interactive animation. There is no efficient method of resetting an axis center in Unity, so it is best to do it right in Cinema 4D. Your developer will have one less thing to worry about.
Material settings in Cinema 4D should be kept to basic, since only color values and image files are carried forward into Unity. Advanced options like Cinema 4D's native noise shader, and even Texture Tag will not be read by Unity. Applying materials via selection tags may not always work as intended too. A definite error-free way of assigning textures onto models is by creating a UV map.
If you are not so familiar with unwrapping UVs, there is another way to create an UV map. Apply materials on the model accordingly via selection tags. Then, assign a Bake Texture Tag to the top hierarchy of your 3D model and bake each necessary channels into a single image. This will automatically create a UV map and applied with a new material containing the new image texture.
Game engines read image files via an optimization method referred to as "Power of Two" rule. This means your image files work best when their sizes are in 512x512 pixels, 1024x1024, and so on.
Unity by default can read PSR and bone keyframe animations. One amazing and essential plugin to get is NitroBake, which bakes all sorts of animation into keyframes. It is required for baking Mograph animations that affect multiple objects, like a Cloner. I have tried using Cinema 4D's XPresso to for this task, but it seems only capable of baking single Cloner animations, it does not work on multiple Cloners and deformation animations. If you do not have NitroBake available, the Bake Object command from Timeline>Functions can sometimes do the trick. It also works for expressions like Vibrate.
Deformation/Vertex/Point-level animations are tricky, because Unity does not read them by default. You'll either need to purchase an Unity plugin, such as Megafiers, or have your developers create a custom script to read them (refer to Nate's post). Vertex animations can be easily baked in Cinema 4D by turning on PLA in Bake Objects or Point Animation in NitroBake.
FBX is the 3D file standard for Unity. A Cinema 4D scene file can also be read, but it occasionally crashes Unity for me, so I would stick to FBX. If your file contains multiple animations that should activate separately in the HoloLens experience, you will need to export each as a separate FBX file. Unity reads each FBX file as one source of animation, regardless of how many individual animations you have in it. Delete any unnecessary materials in your scene, as those will also be imported into Unity. Check PLA to Vertex Cache if your scene has vertex animation.
Hopefully these tips are useful and if you have any knowledge to drop please feel free to share by commenting on the post.
Fyn Ng (@fyn.ng) is a Motion Designer for the Razorfish Emerging Experiences team, based out of our New York office.