This week’s main achievement is the finalized asset workflow, on which I was agonizing for two weeks now.
I tried out several methods and applications and ended up with this setup:
|Modo 501||>>||3ds Max 2011||>>||UDK|
- UV layout
- Collision primitives
|- High definition texturing
- Object-to-object baking
|- Realtime shaders|
Modo’s modeling and UV tools are excellent but its shader tree is just not cut out for complex texturing tasks. What’s worse is that the object baking is still convoluted, difficult to automate and produces substandard results.
Enter 3ds Max 2011 and it’s new, quite well done Slate Material editor. Beyond being node based it has another advantage: it can be extended with MetaSL shaders. Their support is not without flaws but they do allow me to quickly implement additional functionality (new nodes). The new shaders can be built in MentalMill or programmed manually.
So I created quite a few utility nodes to make the shading network easier to read and also developed a few, “best practices” sort of guideline. The topic deserves its own tutorial, but for now here is a quick view of a general node setup:
So creating complex surface definitions is as simple as it gets, however previewing the surface is slightly less convenient. I miss modo’s very fast preview functionality because Max has nothing of the sort. The reuse of final gather samples and geometry data can speed up consequent test renders but it’s still not the same as a converging, interactive renderer.
Regarding the object baking in Max, there is not much to tell: it just works. And if it sometimes screws up on tricky topology then one can tweak the bake cage to fix things.
I used a hard hat object to test workflows: I rebuilt it’s high definition surface in modo, Maya, Blender and Max.
(As a side note: Blender’s user interface came a long way since I last saw it. It’s not just stopped being horrendous but the new UI is slick, flexible and fun to use.)
|High definition mesh
|High definition mesh
(3ds Max 2011)
|Low poly mesh
The final asset uses 512×512 textures for diffuse and normal maps and a single 256×256 image for controlling specularity and reflection.
The high poly mesh was made as a Pixar Subdiv surface and was frozen during export, so it ended up being around 32000 polygons. The low poly version is 1524 triangles.
Speaking of object export, there was a problem with transferring geometry from modo to Max: only .max files can be used as references (XRefs) in Max. This limitation made a quite ugly workflow:
- Export FBX from modo.
- Import FBX into an empty Max scene.
- Save scene with proper name so the baker scene (where the material work and baking is done) can use it as an XRef.
- Open baker scene and continue working.
It’s not very streamlined so I started looking around for a better solution. One of the FBX specifications stated that FBX files can be referenced in Max and Maya. In practice this meant that although referencing works as expected in Maya, Max has the following twist: it’s not called referencing but “File linking” and only supports FBX files from AutoCAD and Revit.
Fortunately a kind Revit user, Toby Robb provided me with a box mesh exported from Revit so I was able to take it apart and determine what allows it to be linked. (The full discussion.) I updated my exporter script so now the workflow looks like this:
- Export FBX from modo.
- Click “Reload” in Max’s File Link Manager.
Code wise not much happened this week because of the terrible earthquake hitting Christchurch: James, the project’s programmer lives there. Fortunately he and his loved ones are fine, although he has no idea if his office still stands. :\
I mentioned last week that parallel to creating the tool (Gavit) I’m also working on a demo project which utilizes (and stress tests) the tool itself. A friend of mine, Adam helps me with this animated short, as he has extensive experience directing movies and cutscenes.
We’ve been discussing possible settings and storylines during the past few weeks, brainstorming over Skype and email. This week I finalized the most fundamental elements, the who, the where and the why. Next week’s task is collecting all the events and setpieces I want to see in there and then we’ll arrange them to define flow and pacing.
A more technical job will be fixing some of the MetaSL nodes I’ve made: I screwed up the math behind the opacity parameter in certain blending modes (Color Burn and Vivid Light for example).
I’d also like to finish the concept art of a sub-machine gun and I can’t procrastinate the animation work any further. The shotgun wielding animations are half made and I’ll need the full animset soon because without them I won’t be able to test our animation system properly.