One man's blunderings into the 3D realm
It’s been a long time since I made a post and after looking out the window it might be a while before normal life resumes, so why not write about a subject that’s been on my mind for over a decade?
It’s been just over a year since I started the editor project and I’ve finally got around to making a release. “Release early, release often” as they say – I seem to be struggling with both those concepts. I’ve found it difficult to shelve the idea of not releasing a polished piece of code in order to get some feedback, so I’ve pared some of the features which were still in early development and moved some of the other functionality into plugins that I will release later. In this way I hope to create a nice, solid core which can be expanded with plugins. Hopefully some other users will find it useful!
I’ve just uploaded my latest Panda3D project which you can play here – it’s a small Rubix Cube simulation. This was my first project to be completed with the editor I’m developing. It’s quite simple in scope but was valuable as an exercise as it dictated which features I added to the editor next. Needless to say developing an editor and a project with it in parallel is pretty exhausting!
I’ve taken a short break from coding to follow a recent creative streak. I’m a huge fan of Ridley Scott’s film Alien so it comes as no surprise that I’m eagerly awaiting the release of Prometheus. The marketing for this film has been unreal and the first full length trailer was quite impressive. I’ve never done a trailer mashup before and it’s been a while since I’ve dabbled in any video editing, so I thought I would create an edit of the trailer using clips from Alien.
In my last post I showed how to attach a Python object to a node path in order to create a ‘hook’ in the Panda3D scene graph. In this post I’ll be showing how to dynamically add additional code to that object at runtime. Attaching code to objects in this way will be at the core of offering drag and drop scripting functionality in the same manner as Unity.
Now that I have a basic scene editor capable of adding, transforming and editing the properties of nodes, the next thing to do is to get some scripted behaviour happening. Having used Unity for my last project I’ve found my design choices to be greatly influenced by this tool, and Unity takes the intuitive approach of allowing the user to attach scripts to nodes in the scene hierarchy. Any subsequent manipulation of the node or its components by these scripts can be done using reserved keywords in the body of the script.
I’ve finally completed a full test of my pipeline, from creating the assets in Maya and Photoshop through to deployment on a webpage. There’s been a number of small issues I’ve had to solve along the way, and I hope to outline some of these in this post. The finished real time warehouse scene can be viewed here (you will be asked to approve a certificate saying that you allow my code to run on your computer after installing the plugin).
It’s been a while since my last post as I’ve been busy with work, but I’ve been chipping away at the editor whenever free time is available. I’ve managed to get the entire pipeline working; from creating models in Maya, exporting them to Panda, arranging them in the editor and then getting them to run in my “game”.
I’m still making strides with the editor, but I’ve been pleasantly distracted with something recently. One of my favorite games I used to play years ago was Marathon – a first person shooter I played on my Mac. By modern standards the game play is pretty simplistic, but at the time I was hooked – especially by the computer terminals which exposed the story to the player gradually as they progressed. For a time I got into creating maps and painting textures, but the limitations of a 2.5D engine eventually got to me and I moved onto other things. Several years later I noticed Marathon Rubicon, a rather ambitious 3rd party scenario, which quickly became my favorite scenario to date.
I’ve started working on a new project, one of the main reasons I wanted to start this blog in the first place. Since starting off in this industry as an environment artist I’ve always loved the idea of building a space and then exploring and interacting with it. I’ve also been looking to start on something which would allow me to work on something with both artistic and technical elements.

One of the last projects I worked on required a massive animation component, one that would most likely require outsourcing to another studio. Having followed this course of action on a previous project, it seemed like a lot of time and energy (and money) wasted on getting very similar animations authored across all the different rigs. Finding a retargeting solution became a priority.
My first serious project done for Panda3D using Python. There have been number of projects undertaken by Panda users to create scene editors in the past, but none to my knowledge that go beyond transforming nodes by punching numbers into a property grid. As I’ve always found Maya’s gizmos to be extremely user friendly, I used them as a template and tried to reproduce their appearance and behaviour as accurately as possible.
After a few long nights coding I think I’m about ready for another release of my gizmo project. I’ll be writing up a full post about it later, but if you’re keen to give it a go you can download the code here (you will need Panda3D installed to run). Or you can watch this thrilling demo:
Since becoming a full time Tech Artist and spending the last two and a bit years coding in Maxscript and Python as much as possible, I’ve found it a rare occasion to sit down in front of Maya and actually model something. So long in fact, that I was beginning to wonder if I still knew how.
This is my student major work from 2004. At the end of our course we each had to produce 60 seconds of animation from an original story of our own creation, then model, texture, rig, light and render it. I quickly got into modelling and scripting after I made this and have rarely dabbled in animation since. Maybe I’ll dive back into it someday.
I was a little late in getting this blog started, so I might have to back-date a few posts to cover what I’ve been doing so far on this topic.
After years of having no internet presence aside from the usual social networks, I’ve finally decided to join the ranks of those who possess Mighty Internet Publishing Power™ and do my bit to make the web a more crowded place.