Welcome to My Corner!

    Once a physicist, always a physicist...

    Although my work has been mostly mathematical recently, it is none the less for physics - in this case the physics software package created at Mathengine, inc.  I've been working there since early 1999, and it's definitely the best, most interesting job in the "real world" I've had yet.  Participating in the creation of a toolkit has helped me focus on those buzzwords: modularity, reusability, cross-platform development, and so on.  Given the "space" to do so, it's not hard to accomplish these things without sacrificing too much runtime efficiency.  I suppose one never stops learning; with every job I look back at the last and say, "if I only knew then what I did now!"  What have I worked on at Mathengine?  I helped architect and wrote much of their collision detection package.  And now I'm helping to develop the physics and control mechanisms for creating physically-based character animation.  Maybe I can get some screen shots up here... it's neat stuff.

    My last job was at Postlinear Entertainment.  A big accomplishment there was shipping the game Vigilance, on which I'm very proud to have worked.  The Vigilance team was truly incredible -- everyone on it was extremely dedicated and resourceful.  We were in production for 18 months, writing the game from scratch.  Even the rendering engine was being co-developed (by a company called Any Channel) in close collaboration with us.  I wrote the physics, collision detection, AI, animation, camera and control modules for the game.  It was a struggle against deadlines and tight budgets the entire time, and there were many times when no one would have believed we could have pulled it off.  But it all came together in the end, and we created a unique and fun game.  What an experience!  I wanted to get out of pure game development, however, so I gave notice after we shipped.  And that's when I found out about Mathengine, so that worked out.

    To quote Andy Karn, I'm a "recovering physicist."  I received my Ph.D. in theoretical physics from UCSB in 1994.  My work was in nonlinear dynamics, and its application to quantum wells.  After a year's postdoc, I decided to try something new.  The market was very bad for new physicists in those days, and the booming software industry in the S.F. Bay Area looked mighty tempting.  Well, I'm still programming, and enjoying it immensely!  My mathematical skills have served me well in programming, and my best work has involved computational geometry and also optimization of mathematical calculations.  For example, the collision detection in Vigilance was able to handle hundreds of dynamic objects in real time (on a 1998 mid-range PC).  Each object could be a sphere, capped cylinder, or arbitrary convex polyhedron.  The collision detection was exact, and returned the normal vector of the plane separating the objects "just before collision."  Another example from Vigilance is the pathfinding module, which pre-parsed the complicated 3D environment, finding all "walkable surfaces."  Each surface was then split into convex polygons, treated abstractly as vertices in a digraph.  Pathfinding for the AI players became a simple search on this graph.  These characters can even climb stairs and jump over obstacles to get to their goal!

    For another interesting example of optimized code, please see "My Monster in the Basement," below.

My Monster in the Basement

    Convex is dead!  Long live QuickRay!  Let's back up... a long time ago I wrote a program called "QuickRay" for the Mac.  It was an attempt to create a real-time ray-tracing renderer.  Graphically, it left a lot to be desired, but it had nifty GUI and dialog-box based editing capabilities.  Was it real time?  Well, the simple scenes I created would probably run at a good framerate on today's Macs.

    I let that go for a while, as I started working in computer games.  But I kept thinking about it, and pretty soon I thought, "I need to re-write that thing."  So I did, and since the new version required convex primtives to render, I called it Convex.  It was still written only for the Mac, but I intended to port it to the PC.  Well, in 2002 I started doing that.  But in the process, I decided to re-write it, again.  (I had picked up ideas in my software experience, and of course software is always better in the next re-write.)  This time it really came together well.  The scene graph is highly optimized for the ray-tracing problem, there is no restriction to convex shapes, it supports general quadrics and full CSG, and the code base is much better organized.

    Since the name Convex is no longer appropriate, I decided to revert to the name QuickRay (new and improved!).  This time, it's only compiled for the PC... so PC users please have a look!


    You can contact me at nix_the_spam_howlers@earthlink.net (remove the "nix_the_spam_").

Back to the Home Cave