I had been sculpting a character in Zbrush when I came across Mixamo’s Fantasy Game Art Character competition on the Polycount forums. With a swift change in design, I gathered reference and began anew. For some reason I retopologised her manually about 3 times in 3ds Max. The competition’s limit was 4000 polys I believe, including props. The original character was a few million polys, started from a sphere for the head and used dynamesh to pull out her body. I manually polypainted her and her props onto a reasonable UV layout. Initially she was sculpted in a T-pose to allow symmetry.
I never expected extracting normal, occlusion and diffuse maps onto the low poly character to take so long. Using the Xoliul shader in Max, I combined the correct 2K maps for a current-gen representation. The ground was done quickly in Max, as well as rigging using CAT and a bit of animation. I used a linear workflow, which I think was worth the time to set up. I had to finish well before the deadline because I was going on holiday to South Africa. I managed to check the results while there on my phone, but other people’s entries were far better than mine!
Here’s the final pic I sent: blog.mixamo.com/wp-content/uploads/2012/09/FinalRender.jpg
Here’s the forum thread I regularly updated for an in-depth behind the scenes: polycount.com/forum/showthread.php?t=103171
And the other entries are available here: blog.mixamo.com/mixamo/mixamo-fantasy-3d-character-creation-contest-winners-revealed/
When I started this, I barely knew what a pointer was. After a day’s solid watching videos to teach myself C++ and a week reading a stodgy book on OpenGL, I felt ready to start… making the interface. I assumed the halftone implementation would be trivial so left it to 18 hours before the hand-in date. In retrospect, this was a bad idea.
It’s surprisingly hard to make a UI in OpenGL. I have a file 1000+ lines long filled with functions for drawing most of the useful ASCII characters. Yep, just to show text. I made this by writing out all these characters with 3ds Max’s text in a readable font and writing a Maxscript to take each one and export the triangle lists for it. To get anti-aliasing on the text (using OpenGL 1.2 I think), I drew the triangles making up the letter, then the outline of the letter with a smoothed line. I programmed it to understand spaces and carriage returns, and used it with buttons and messages. To display the available image files I taught myself to use the STL vector, so I could have enough buttons for unlimited image files in the folder. The time developing and debugging this would definitely have been better spent actually working on the algorithm! I assumed loading images would be trivial… It’s not. I hacked up a BU lecturer’s C module for loading PNG images into OpenGL, and unfortunately only got it working with square images!
Most of the GUI is just for loading files. Showing halftone variations is done using keyboard shortcuts, set up with the GLUT windowing system. I had to port the final application to work with Linux (GLUT only works in Windows I think) so taught myself the necessary parts of QT in about an hour. Of course, had I gone with QT to start with, I wouldn’t have had to make my own UI code, and it would have looked a lot more professional and performed a lot better, on all platforms! Ah well, you live and learn.
I didn’t want to do a grid city like everyone else. Skyscrapers were cool but I wanted interesting patterns. We had started learning python a couple of months before I started writing this script. I knew nothing of classes or object-oriented programming, so the entire thing is procedural. There was no over-arching design – I just jumped in with an idea for generating roads using vectors from polygonal shapes. I got a terrible mark for this project – probably because it is occasionally very buggy, and always very slow. I haven’t figured out where the bugs are yet but I think refactoring it with classes would make much more sense!
I made the terrible mistake of just running it with internal random numbers every time I wanted to test it, so could try 100 times without noticing that the roads don’t make T-junctions when they hit another road properly after splitting 4 times for example. I also put the separate parts of the script together very quickly – generating houses next to the roads was something I did while making the UI. I’m quite proud of the code that moves the road onto the landscape – although I probably should have done raycasting or something, I decided to implement a UV-coordinate-per-face type solution (barycentric coordinates) in 2 dimensions then reprojecting into 3D. Probably much slower! The landscape generation code itself is about 8 lines. The UI design is merely a thin veneer over the underlying implementation!
If you’re interested in any of the algorithms/ getting the script, contact me!
This was the first project I did at Bournemouth. It was my first time modelling with Maya 2011, as opposed to 3ds Max with which I am quite experienced. There was a quad limit of 2000 for the character and 2000 for the prop (the car). I hit it for both. No triangles! Iron Man is a complete mesh as well; no holes.
The reference images had to be drawings available on the internet; we were not allowed to draw our own. Hopefully I’m not in breach of copyright using them in this way!
Here’s some making of pics:
A 15 second character animation assignment, entitled “I wasn’t expecting that”. I was provided the Maya character rig. I think the animation is a little too quick – maybe 5 more seconds would have helped me get the emotions across better. One tricky part was when he gets up on his knees: because the rig had IK legs, I had to counter-animate every frame that his knees were supposed to be static.
This was done in my free time (i.e. not assessed) to train myself on a few things: Maya’s procedural shader system – not a single image texture was used; linear workflow and relatively correct lighting in Mental Ray. I designed the futuristic gym machinery, which you should be able to see subtly moving. I quite like that most of the workout machines require arms, which our potato sack with legs, Billybob, is missing!
Also, short loop done in the same project:
Rather than a walk cycle, I wanted to do something more interesting. I think it took about 2 days. The most enjoyable part was looking up reference of people falling off treadmills!