Production Blog

Author Archive

Kludge City at its new home

I’m happy to introduce a new site where I’m pulling together my various efforts over the years under one roof.  I call it The Kludgeworks.

Kludgeworks is meant to provide tools, training, and resources for CG artists.  One day, I hope it will become a learning platform for seminar-style courses in a variety of CG topics.  For now, it’s more of a repository for the bits-and-pieces I’ve made over the years for the CG community.  I’ll continue to update Kludge City here (if there are ever any more updates, that is…)

All the same, if you want to download KludgeCity 0.1.7 or 0.2.0, you’ll have to find them at their new home!

I hope you’ll join us at the new site!  It’s a bit sparse at the moment, but I’m working on building it up gradually.




New tool for lighting artists

If you’re a lighter in Maya, you might find this useful.  I call it the Lighter’s Friend.  Enjoy!

Dynamic UIs

I’ve been building a handful of tools to use at work, and in the process I’ve been learning a lot about building UIs dynamically.  With dynamic UIs and scriptjobs, I can tailor a tool’s visible functionality to what’s actually in your scene, or even what you currently have selected.  Here’s an example, the Lighter’s Friend.

the UI is built based on the lights that are present in your scene, It seems like a no-brainer, but it’s a pain in the a$$ to get MEL to play nice.  Every controller has to have a unique name and connect up properly to their corresponding shape node.

I’m also working on a tool for generalists called “Context Kludge” that switches its interface automatically depending on what you have selected.  It’s a lot like the excellent “Ninja Speed Box”, but will not be based on shelves.  It’s currently focused on texturing and lighting workflows, but ultimately I want to convert the entire Kludge Tools toolset to a context-sensitive model.

I’m not sure how dynamic UIs and context-sensitivity will help KludgeCity yet, but it’s a good approach to have available.


The Sum of Part…

The Sum of Parts project is officially back in action.  As such, I’m going to be making a new, slimmed-down, narrower-focus KludgeCity.  I already mentioned what I want to take away, but what am I going to add?  Here’s the initial wishlist:

  1. kit-bashing: the ability to add arbitrary geometry and static meshes into the Kludge pipe
  2. arbitrary boundaries: the new Kludge will use a different method for footprints, allowing for arbitrarily-shaped polygonal boundaries… possibly NURBS?
  3. easier tiers: the new system is this — choose a height, choose a number of divisions, choose a “slide” or “weight” for placement, and Kludge will handle the rest.  And of course the randomizer will control all of these behind the scenes as well.
  4. procedural shading system — because I don’t have UVs any more, I want to have a robust system for creating variation and surface shading with a minimum of fuss or hassle.
  5. gargoyles: because they’re cool.

KludgeCity v2.5… a plan for the future

I’ve started designing the new overall feature-set for Kludge, based on the last year’s worth of experimentation.  The purpose moving forward is to create a leaner, more robust, more useful tool in my production context.

So first, to trim the fat:

  • I’m removing all interior geometry.  I’ve never been happy with the way it worked, and I stumbled on a new approach to window rendering that I’m excited to try out.
  • No more balconies.  They never looked very realistic, and I’m considering a non-procedural approach to these kinds of facade details
  • I’m reducing the number of window options — my production focus now is on creating buildings that would feel comfortable in the 1940s, before the modern skyscraper’s glass-sheet style.  I may revisit this, but for now, focus on style is more important.
  • Fewer custom options — In v2.5, almost everything will be based on ratios instead of absolute values.  The Randomizer will become the main value controller, and every building will be randomized to some degree.  Sorry folks, no presets.
  • The new KludgeCity will use ONLY two shaders across all buildings… one for windows, and one for the building itself.  All other variation will be handled through some other means.  I’m working on this now, and I have some promising leads.
  • per-face shading is out.  Windows and the building’s body will be seperate polygonal objects.  This can cause problems such as light bleed, but after a discovering a whole sh*tstorm of issues with component shading, this is a necessary evil.
  • the UV variation grid is being reduced to 5*5 — 25 variations of textures and light intensity is more than enough.
  • for now, I’m removing the “base floor” layer, until I can come up with a better method.
  • KludgeCity will now NEVER provide UVs to anything but the windows — UVing complex geometry with MEL is beyond my ability — after three years of trying, I’ve decided this.  However, I will be working on a robust 3d procedural shader that I can use instead.

So, now I’ve figured out what I want to trim down, next, to figure out what I want to add…


Where I’ve been

Kludgecity has always been a production-driven script — meaning, I started making it because I had a real use for it, and it was easier to make a versatile tool than to model out a city by hand.  Then, the style and requirements for my short film changed, so I had to start the script over from scratch.  So what happens when I abandon my short film for over a year?  Well, I just don’t have any real incentive to keep working.  But there is good news!  I’m restarting the effort soon, and along with it, I’ll be finishing up Kludge as a production tool.   Hopefully in July we’ll start seeing updates again!

UV madness

The current version of Kludge uses a procedure I call “unitizeAndPlace” which divides up the window UVs into an 8×8 grid on the 0-1 UV space.  It does this by iterating through all selected faces and assigning them to randomly-selected spots.

This is very slow.  On a building with ten thousand windows, the uAP script has to run a loop to select the face, pick a random number, and move the UV shell ten thousand timesUsually this takes a few minutes, but the larger the number of faces, the larger the performance hit.  A massive building with 60,000 windows will take more than an hour to UV.

The result of all this is that 1/64th of all the faces end up on each of the 64 possible UV grid spaces — which means there is a much better way to do this.  Instead of randomly placing 10,000 faces, instead, I’m now creating 64 groups of random faces and assigning them to each of the 64 spaces.  The randomization and selection process still takes some time, but I’m also using sets instead of arrays for the face lists, which should reduce the amount of time required writing and re-writing arrays.

I’ll post up the results whenever I run some stress tests.  I think this script could be useful for a variety of projects, not just Kludge.

Delays, but…

Hey, if anyone wants me to email them a copy of kludge 2, bugs and all, just let me know. The project is officially “on-hiatus” while I finish up a couple projects this summer.

Version 2.0 Delayed… again…

I’ve recently started a job with a studio here in Dallas, so I haven’t been able to do ANYTHING with Kludge for a couple of months.  I still need to fix a handful of hiccups with Maya 2010 not working correctly, but more importantly, I’ve actually come up with a few really good ideas that I want to incorporate before I release version 2.  I appreciate everyone’s patience… the end result should be a streamlined, production-friendly tool that actually works as advertised.  In the meantime, check out the progress on — the short film that Kludge is ostensibly built for.  We’re actually making assets!  hooray!

By the way, if any of you are using Kludge to do anything interesting, send me a picture!


My 2010 Demo Reel has an example of KludgeCity in action:


The reel can be found here: