An R&D Software Engineer. An innovator in the field of large scale 3D environments. An experienced innovator in the field of 3D modelling, from employment in the games and film effects industries. Most at home in an R&D department, or working on middleware, or working on tools & technologies.
Necessity is the mother of invention, and invention is the driving force behind solutions to some of the largest problems in the games and special effects industries today.
Of the problems facing large scale virtual environments, most interesting ones to solve are:
- Scale: The system infrastructure to support million player virtual worlds, i.e. distributed modelling systems (see my Cyberspace Engineers site) - awaiting funding.
- Content: Rules based, automatic scenery generation (sophisticated enough to encapsulate architectural/stylistic expression) - unique approach too promising to publish, awaiting funding.
- Payment: Revenue mechanisms that can operate in what will inevitably be an uncontrolled (p2p) environment - in development (T'DAA).
- Planning: Re-instancing the 3D model to replicate the imagination process for autonomous agents, enabling plan testing, evaluation, and selection in unpredictable environments.
- Intelligence: Utilising neuron models based on event train processing and simulation of dendritic propagation delay, to produce feature set and feature sequence adaptive neurons (coincidentally providing a plausible explanation for brain function lateralisation).
C++ and High Level 3D Coder
Experienced in all aspects of C++ programming: OOD/OOP, multi-threading, templates, STL, COM/ATL.
Experienced in many 3D APIs: Rendermorphics Reality Lab, Autodesk CDK, Argonaut BRender, Kodak Cineon 3DFX, IRIX Open Inventor, VRML, Discreet 3D Studio Max, Criterion Renderware, Open GL, Qube Software Q Engine. But, not Direct 3D, ...yet.
Experienced with 3D tools: Discreet 3D Studio Max - C++ plug-ins, MaxScript. Some Maya plug-ins.
Experienced with 3D maths: Quaternions, Matrices, several C++ maths libraries written. Games Developer
Last published game: Electronic Arts, Lego Creator: Harry Potter and the Chamber of Secrets (at Qube).
Recent platforms: PC/Windows (MSVC), Sony Playstation 2 (SN Systems ProDG).
Recent middleware: Qube Q 3D Engine, Criterion RenderWare.
Recent genres: 3D Exploration and Construction, 3D Formula One racing arcade/simulation.
Games Industry Activist
Speaker at GDC Europe, August 2003: 'Grow or Die: Does Size Really Matter'.
Author of The Bedroom Coder's Business Model (published in Develop, March '03).
Moderator of IGDA's Game Design & Writing SIG.
Coordinator of the Brighton IGDA Chapter.
Volunteered to produce the Games Industry's first "Open Tools" Standard - in progress.
Author of seven articles for Gamasutra evangelising the P2P approach to network games engines 'Cyberspace in the 21st Century'.
Author of two technical papers presented at VSMM99: Consensus: A Scalable Interactive Entertainment System, and Strategies for Scaling Interactive Entertainment. Technical Author
Produced, authored and typeset the BRender Technical Reference Manual (using Adobe Pagemaker).
Recent Employment History
Technical Director & Website Developer, March 2003 - current
Research of online auction models, online auction websites. Evaluated ready made online auction sites, website content management systems (Zope, PostNuke, Xoops), website development languages (Python, PHP), databases for website back-ends (ZODB, MySQL, PostgreSQL). Evaluated templating and styling/layout systems (ZPT, Smarty, CSS).
Currently self-employed, developing the Digital Art Auction website using Xoops, PHP, Smarty, CSS, HTML, MySQL, on Apache and IIS.
Senior Software Engineer, May 2001 - March 2003 (Flexi-time, ~50%)
Programming of the camera controller for "Harry Potter and the Chamber of Secrets - LEGO Creator", also to become part of the Q SDK.
This camera could be bound to any object in the scene, had a set of predefined behaviours (orbiting, follow-cam, free-cam, etc.), customisable control input, targeting (ability to follow position, orientation, scale or target), following (automatic travel and navigation toward of target), collision handling (avoiding obstacles, wall/ground sliding), occlusion handling (move-in through obstacle towards target), smooth transitions (smooth re-orientation and target re-acquisition in spite of dynamic behaviour of both camera and target). Camera constraint, collision, occlusion and control systems all made customisable (via QCOM). Option for smooth and automatic navigation from arbitrary starting position (scene insertion point) until proper position obtained.
Designed and specified QCDL, a connectivity description language (utilising XML with DTD). This permits a description of how any 3D objects can be joined together and formed into simple or complex assemblies. It utilised the concept of connectors (simple point elements added to 3D objects) that contain various kinds of compatibility information. Sets of connectors can be utilised to specify how two objects must orient with respect to one another in order to be considered as connected. This system permits user assisted scenery construction, as well as intangible attachments, e.g. placement of sounds or particle systems on objects.
Worked on a Max exporter to the Q engine.
Worked on Max and Maya plug-ins to specify connection points in scenery.
Technical Lead, October 2000 - March 2001
Joined to design and lead the implementation of a networked games engine for a new spin-off, massive multiplayer games company. Discovered upon arrival that no funding had yet been obtained. Worked both on producing the business plan for this company in order to help it obtain funding as well as demonstrate the technical feasibility of the networked games engine's design.
Ended up creating the vision and strategy for this new online venture, and made this the basis for the initial draft of the business plan. Worked on a revenue analysis of the various proposals within the plan. Helped refine the vision, business plan and revenue analysis as the team expanded.
Much research included assessment of various development models and their relative commercial strengths in creating or exploiting new technologies (proprietary R&D, Open Source, licensing), evaluation of numerous marketing strategies required to create/popularise the product's market (online/offline advertising, viral marketing, etc.), and exploration of the strengths and weaknesses of different revenue models (online vs. offline sales, micro-transactions, auctions, etc.).
Also researched the state of the art in terms of massive multiplayer games and their technology, with particular attention to their scalability.
Unfortunately the funding process stalled.
Head of Tools & Technologies, April 2000 - September 2000
Joined to head up Tools and Technologies department (once Acclaim had moved to their new Mortlake offices). Initially placed as Senior Software Engineer with the Ferrari team given their needs for coding assistance were greatest. Started work on a C++ memory and resource management system. Once that was operational started on a general diagnostics system. Played a large part in establishing coding standards and project organisation standards (Visual SourceSafe). Then began development of cross-platform libraries to contain core components typically required in games. Acclaimâ€™s financial difficulties put a halt all projects apart from the Ferrari racing game. With this greater focus, worked on a data import/export system to get game information from Max into the Ferrari game (Sony Playstation PS2). Thus an object oriented â€˜game databaseâ€™, optimised for fast loading at run-time, was being used successfully just as the Ferrari project was terminated.
Have also used the RenderWare libraries to implement level-of-detail for the cars and written helper and exporter plug-ins for Max.
Pepper's Ghost Productions
Senior Software Engineer, May 1997 - March 2000
Joined to implement a networked games engine, but unfortunately, the company abandoned games development within a couple of months. Managed to at least get permission to produce a couple of papers that were published at the VSMM '99 conference.
Subsequently worked on an asset management system for digital animation production. Then moved on to writing C++ plug-ins for 3DS Max.
Designed a rules based scenery construction plug-in for Max (using steering behaviours).
Senior Software R&D Engineer, September 1996 - May 1997
Design and programming of 3D rendering infrastructure for Kodak's Cineon (movie compositing software used for post-production special effects). This had the task of holding and interpreting a high level 3D scene description, and then farming this out to one or more low level rendering services, then coordinating the 3D output into Cineonâ€™s 2D image processing pipeline.
Other Cineon plug-ins.
Designed the architecture for a camera tracking and match-move system. Argonaut Technologies Software R&D Engineer, April 1995 - September 1996
Design and programming of C++ API to the BRender 3D rendering engine.
Wrote the BRender technical reference manual.
Designed a games development system, which was proposed as a project to various companies, but despite favourable response, did not get funded.
Moved over to ASL and joined the Archaios team. Developed a high level scripting language as a superior replacement to the one in use at the time.
1991 - 2003
With 4 years of C under the belt, started using C++ in 1991 realising that it was going to become a much better language for large scale projects. First C++ compiler was Glockenspiel's - a cfront variant that used Microsoft's C compiler (they didn't have one at the time).
Soon appreciated the problems with DLL's and welcomed the advent of COM as a better way to modularise software, clearly delineating the responsibilities of each component and enabling fairly isolated development (both in terms of being able to divide work across a team as well as enable components to evolve differently over time). Use of COM also required a good understanding of multithreading and synchronisation issues. Experienced with templates
Having gone through the mill of writing umpteen class libraries (also having used iostream, MFC, OWL, and others), welcomed the arrival of templates into the language. They certainly made writing type independent code much easier. Some of the best code has relied on some of the more esoteric techniques that templates enable.
At Cinesite, produced a static array of templated object stacks. Ok, this sounds simple, but under heavy time pressures typical of post-production, this was a powerful pattern to invent at short notice and it saved the day. It not only provided an easy means of collecting elements during scene graph traversal, but could subtly switch into a completely different design pattern, i.e. a production line. This is where each stack represents a component resource, and when empty knows what other stacks from which to pull necessary constituents to make further components. This is all defined in classes as opposed to within the stack machine/production line, i.e. a completely generic solution.
Pepper's Ghost required a lot of COM and ATL coding, but still provided time to explore novel ways of using templates, e.g. to give classes public member variables that behaved almost identically, but took up no storage. (See http://tinyurl.com/g1ct)
At Acclaim, produced a resource template class which enabled expressions of the form Resource<MyClass>("Name");. The 'Resource' class manages the lifetime and memory pool for the named object, and will return the same instance wherever this class/name combination is used.
At Qube, had to produce a game camera (target tracking, position tracking, collision detection, occlusion handling, custom behaviours). One of the neat templated classes created enabled a class used by a constraint system to inherit parameters that were then exposed via an instance of this class as a member variable of the containing class. This provides a much tidier way of manipulating parameters. Development Experience C++
- Q 3D maths library 'safety' wrappers, MSVC2001-03
- 3D game camera controller, MSVC (templates, STL, QCOM)2001-03
- 3DS Max exporter for Q plug-in, MSVC2001-03
- Maya Connectivity helper plug-in, MSVC2001-03
- 3DS Max Connectivity helper plug-in, MSVC2001-03
- LOD for Ferrari PS2 game, MSVC/GCC2000
- 3DS Max exporter for ObjDb plug-in, MSVC2000
- Renderware wrappers, MSVC/GCC2000
- Game object database, MSVC/GCC (templates)2000
- Diagnostics system, MSVC/GCC (templates)2000
- Memory management system, MSVC/GCC (templates)2000
- Resource management system, MSVC/GCC (templates)2000
- Various 3D Studio Max plug-ins, MSVC1999-2000
- Document management system, MSVC1998
- Networked Games Engine, MSVC (templates, COM)1997-98
- 3D Maths library, SGI1996
- Cineon 2D Frame buffer abstraction, SGI1996-97
- Cineon 3D Rendering Production line, SGI (threads, templates)1996-97
- Cineon 3D Scenery traversal system, SGI (threads, templates)1996-97
- Cineon 2D Despill plug-in, SGI1996
- Archaios game engine, MSVC (with templates)1996
- BRender DDI C++ compliance, MSVC1995-96
- BRender 3D renderer C++ API, MSVC1995-96
- BRender 3D Maths library wrappers, MSVC1995-96
- Multiplayer networked games engine, MSVC (ODBC, RPC)1994-95
- Report Generator, Borland (with OWL)1994
- Computer assisted diagramming (27kloc), Glockenspiel (CommonView) & MS (MFC)1991-94
- Real-time graphing (bar/line), MS C (with Win32)1987-91
- Adventure Interpreter (3kloc), VAX 11/7501982-1984
- Maestro Music Score editor, Archimedes1987
- Utilities, BBC Micro1982-84
- 2D 'shoot 'em up' games, PET1980-82
- Dictionary for Scrabble game, ARM (Archimedes)1984-86
- Text analysis, 32000 (Acorn 32016)1984-86
- Microcontroller, 80851984
- Utility ROMs, 6502 (BBC Micro)1984-86
- Ported 2D scroller, 6502 (BBC Micro)1982-84
- 2D Scrolling games, 6502 (PET)1980-82
- Automatic document reformatter, VBA & MS Word2003
- Customisation of PostNuke and XOOPS (with Smarty and CSS), PHP2003
- DTD connectivity description, XML2001-03
- Customisation of Zope (with ZPT), Python2002
- Familiarity with web development, HTML1999-03
- Various 3D Studio Max scripts, MaxScript1999-2000
- Manpower Planning, MS Excel 1988-89
- Statistical Analysis, Lotus 123 1986-87
- Exploratory work, Renderman1997
- Online Auction Website back-end, MySQL2003
- IT Inventory Control System, MS Access1989
- BSc: Engineering/Computer Science (5 terms)
- A levels: Maths A, Further Maths B, Physics E
- Servan Keondjian, Qube Software.
- (Others on request)
Lewes, East Sussex, UK
Snowboarding, Mountain Biking.
FPS: Doom, Quake, Hexen, Heretic, Duke Nukem, Halflife, Unreal Tournament, Counterstrike.
RTS: Warcraft I/II/III, Starcraft, Dark Reign, Dungeon Keeper I/II, Homeworld, Sudden Strike, Age of Empires.
Arcade: Grand Theft Auto II.
Favourite: Age of Empires.