by date
Torque pipeline progress
Torque pipeline progress
| Name: | Phil Carlisle | ![]() |
|---|---|---|
| Date Posted: | Jun 19, 2007 | |
| Rating: | 5.0 out of 5 | |
| Public: | YES | |
| Comments: | YES | |
| RSS Feed: | or Subscribe with . | |
| Profile Page: | View profile page for Phil Carlisle |
Blog post
If you look at the current art pipeline for torque, you can see that there are some issues in terms of usability and process that could do with getting some attention.
The main problems as I see it are:
> The reliance on "exporters" for DCC apps is too much for GG to maintain
> The scene structure implies far too much within the modelling app
> The reliance on a non standard format means that there are issues when working with third parties
> The extensibility of the exporter based approach is in question as new features become available
> There are obvious flaws and missing features in the current pipeline
> The pipeline itself isnt readily extensible with third party tools
Now, I'm not saying that you cant produce great artwork for torque, as clearly you can. But if you start trying to use it from anything but a professional's standpoint, clearly it becomes troublesome. Specifically, for less experienced developers I feel that the process of using thier creations is too complex.
So I've started addressing these and other issues, which is what I'm going to write about here. I wanted to throw out my plans in order for people to feed back and possibly spot potential issues I've not considered.
First, let me outline the basic methodology.
I'm aiming to create a flexible pipeline, that will allow content production in as many applications as possible. By moving to an "import" based methodology rather than an "export" based one, I hope to leverage the fact that file formats change far less frequenctly than DCC apps, plus also capturing many more of these applications in the process.
So where to start?
The ideal, is to allow the user to simply select ANY supported model format (formats I'll enumerate later) from within the world editor and use it as a shape. I plan on having this functionality, but I feel there is some benefit to a slight different strategy initially.
My thinking, is that before I start adding format support directly into torque, I will get a feel for the formats and add some much required functionality into the pipeline beforehand. So my first goal, will be to create a pipeline that allows for conversion from external formats to internal formats. So in a nutshell, you will be able to go from an input format, to an internal format. Lets enumerate them now:
External input formats:
3ds, collada (dae),fbx,obj,mdl,md3,?????
Internal output formats:
dts,dtx
You might have noticed that DTX at the end. Thats going to be an interim test format, so that I can incorporate added functionality into the engine core side of things (i.e. add UV layers etc) while still allowing legacy support for dts's.
So, how does all this work?
Here's a diagram that should give you an overall picture of the structure of this application.

Click here for higher res version
The important parts are the importer, the internal scenegraph, the conditioner and the exporter. These are all scriptable by design, such that more complex control is possible.
So what do the parts do?
Importer
This is the interface for loading a given file format into a scene. Essentially it converts an external format into a format that I can easily understand and document, its only purpose is to read from the file and stuff data into the scene.
Scene
The scene is the data repository. There is a manager interface because some situations will require multiple individual scenes to be present (for example, you might want seperate files for each LOD and to use a conditioner to then create a single scene from those).
Conditioner
I coined this term from the Collada docs. Basically, its a process that somehow either processes the data, or transforms it. There are so many different things you would use a conditioner for. The prime one I'm interested in, is the ability to call third party apps for baking ambient occlusion or GI lighting. So for instance, you would write a gelato conditioner that would write out an interim scene and then use NVidia's Gelato renderer to bake out individual lightmaps for each object. A simpler conditioner would perhaps reduce the polygon count on a given mesh, or even simpler still, automatically compute the bounds box of a given shape.
Exporter
This is the final peice of the puzzle. You somehow have to use this data in torque. At some point, the internals of this app will be incorporates into the main engine such that this process isnt required. But for now, it will simply take a given scene and write it out to either dts format, or the new extended capability dtx format.
The main thing is that this is all extensible. Primarily, I can see two main efforts here. Beyond actually reading the given formats. The first is to create a set of useful conditioners. The second is to make the whole process a lot more user friendly.
The second part of that, will require the creation of a "tool" application. Right now I'm thinking that the initial release of this application will be command line based. I understand thats counter to what I say about ease of use. But I intend to remedy that with a follow up UI application that takes the core code and allows you to perform the same operations only graphically. If you've used any of the high end DCC apps in command line mode, you'll see where I'm going with that.
So as you can see, its a considerable task, although to be fair, its not as complex as it sounds. Its basically reading and writing data for the most part. I'll post some more complete design notes later and hopefully get some base code fleshed out and documented enough to show how it all works. One thing I'm very aware of is not making this whole thing more complex than it needs to be. Having working defaults for everything where possible and generally making an easy to use and modify api is important.
So, thats what I'm up to. What about you? :)
The main problems as I see it are:
> The reliance on "exporters" for DCC apps is too much for GG to maintain
> The scene structure implies far too much within the modelling app
> The reliance on a non standard format means that there are issues when working with third parties
> The extensibility of the exporter based approach is in question as new features become available
> There are obvious flaws and missing features in the current pipeline
> The pipeline itself isnt readily extensible with third party tools
Now, I'm not saying that you cant produce great artwork for torque, as clearly you can. But if you start trying to use it from anything but a professional's standpoint, clearly it becomes troublesome. Specifically, for less experienced developers I feel that the process of using thier creations is too complex.
So I've started addressing these and other issues, which is what I'm going to write about here. I wanted to throw out my plans in order for people to feed back and possibly spot potential issues I've not considered.
First, let me outline the basic methodology.
I'm aiming to create a flexible pipeline, that will allow content production in as many applications as possible. By moving to an "import" based methodology rather than an "export" based one, I hope to leverage the fact that file formats change far less frequenctly than DCC apps, plus also capturing many more of these applications in the process.
So where to start?
The ideal, is to allow the user to simply select ANY supported model format (formats I'll enumerate later) from within the world editor and use it as a shape. I plan on having this functionality, but I feel there is some benefit to a slight different strategy initially.
My thinking, is that before I start adding format support directly into torque, I will get a feel for the formats and add some much required functionality into the pipeline beforehand. So my first goal, will be to create a pipeline that allows for conversion from external formats to internal formats. So in a nutshell, you will be able to go from an input format, to an internal format. Lets enumerate them now:
External input formats:
3ds, collada (dae),fbx,obj,mdl,md3,?????
Internal output formats:
dts,dtx
You might have noticed that DTX at the end. Thats going to be an interim test format, so that I can incorporate added functionality into the engine core side of things (i.e. add UV layers etc) while still allowing legacy support for dts's.
So, how does all this work?
Here's a diagram that should give you an overall picture of the structure of this application.

Click here for higher res version
The important parts are the importer, the internal scenegraph, the conditioner and the exporter. These are all scriptable by design, such that more complex control is possible.
So what do the parts do?
Importer
This is the interface for loading a given file format into a scene. Essentially it converts an external format into a format that I can easily understand and document, its only purpose is to read from the file and stuff data into the scene.
Scene
The scene is the data repository. There is a manager interface because some situations will require multiple individual scenes to be present (for example, you might want seperate files for each LOD and to use a conditioner to then create a single scene from those).
Conditioner
I coined this term from the Collada docs. Basically, its a process that somehow either processes the data, or transforms it. There are so many different things you would use a conditioner for. The prime one I'm interested in, is the ability to call third party apps for baking ambient occlusion or GI lighting. So for instance, you would write a gelato conditioner that would write out an interim scene and then use NVidia's Gelato renderer to bake out individual lightmaps for each object. A simpler conditioner would perhaps reduce the polygon count on a given mesh, or even simpler still, automatically compute the bounds box of a given shape.
Exporter
This is the final peice of the puzzle. You somehow have to use this data in torque. At some point, the internals of this app will be incorporates into the main engine such that this process isnt required. But for now, it will simply take a given scene and write it out to either dts format, or the new extended capability dtx format.
The main thing is that this is all extensible. Primarily, I can see two main efforts here. Beyond actually reading the given formats. The first is to create a set of useful conditioners. The second is to make the whole process a lot more user friendly.
The second part of that, will require the creation of a "tool" application. Right now I'm thinking that the initial release of this application will be command line based. I understand thats counter to what I say about ease of use. But I intend to remedy that with a follow up UI application that takes the core code and allows you to perform the same operations only graphically. If you've used any of the high end DCC apps in command line mode, you'll see where I'm going with that.
So as you can see, its a considerable task, although to be fair, its not as complex as it sounds. Its basically reading and writing data for the most part. I'll post some more complete design notes later and hopefully get some base code fleshed out and documented enough to show how it all works. One thing I'm very aware of is not making this whole thing more complex than it needs to be. Having working defaults for everything where possible and generally making an easy to use and modify api is important.
So, thats what I'm up to. What about you? :)
Recent Blog Posts
| List: | 09/18/08 - Tell me I'm not going crazy!! 12/05/07 - The importance of good tools for productivity 11/17/07 - Using the way back machine. 09/21/07 - Juggling cats. 09/04/07 - End of Summer. 08/27/07 - Come work with me!! 08/14/07 - The changing nature of entertainment 07/25/07 - Someone stole my notes!! |
|---|
Submit your own resources!| Anton Bursch (Jun 19, 2007 at 17:24 GMT) |
| Craig Fortune (Jun 19, 2007 at 17:39 GMT) |
However, as you asked for some feedback on things you may not have considered I'll throw this one straight into the mix: not all apps treat the common file formats in the same way. For instance the 3DS format can be treated in vastly different ways in different apps. (To the point you can just end up with junky models being imported into app B even tho its fine when you exported from app A)
This will obviously cause some problems with importing straight off the bat. I'd suggest maybe having fbx as your first file format to try importing, it supports a lot of functionality and behaves nicely across various apps.
| Phil Carlisle (Jun 19, 2007 at 18:39 GMT) |
The worst part is mainly the animation stuff, which I'll do once the basic pipeline works.
| Sean H. (Jun 19, 2007 at 19:30 GMT) |
| James Laker (BurNinG) (Jun 19, 2007 at 20:31 GMT) |
I dunno... I still dont know how LOS work in the Milkshape Exporter... So make that automatic or something ;)
Good luck!
| J Sears (Jun 19, 2007 at 20:57 GMT) |
| Jeremy Alessi (Jun 19, 2007 at 20:58 GMT) |
| Phil Carlisle (Jun 19, 2007 at 22:03 GMT) |
| Sean H. (Jun 19, 2007 at 22:13 GMT) |
| Gavin Bunney (Jun 19, 2007 at 22:54 GMT) |
| Craig Fortune (Jun 20, 2007 at 22:50 GMT) |
Quote:
Torque's pipeline is a stregth and a weakness all at the same time. When models come in perfect from an experienced artist it's great...
Too true, too true by far :P I've worked with a 'variety of quality' of models etc that I've had to get into Torque in the past and have often found that just tidy neat modelling can save a whole heap of time with getting stuff in-engine.
This is why I'm a little iffy about 3ds being a worthwhile file format to include in the potential import list. I've had models been crazy unwelded at hundreds of verts just because two apps treat the 3ds in different ways. That being said, theres only slight differences... so maybe the import system could include functionality to guess (heck you can probably pick it straight up from the file itself?) which app wrote the 3ds (or whatever file format) and tweak the import slightly?
| Thomas Shaw (Jun 20, 2007 at 23:23 GMT) |
| CDK (Jun 22, 2007 at 10:55 GMT) |
| Phil Carlisle (Jun 23, 2007 at 13:18 GMT) |
| Stephan Goebels (Jun 24, 2007 at 18:57 GMT) Resource Rating: 5 |
What is with function expansions like procedural texture?
FxGen is a procedural texture generation library and tool to let you implement high resolution textures that fit in kilobytes in your applications. Hear you find informations from the developer of FxGen
| Frank Carney (Jul 05, 2007 at 16:58 GMT) |
The only way I know of getting the animations out of blender is to export to DTS. The animations do not get exported in any format other than .blend. At least they didn't the last time I looked.
Now, if the same kind of attention were given to a common open format that the Blender DTS exporter has gotten then this approach would be great. You would still have to write an exporter for Blender, but if the format is an open format the rest of the world uses then the exporter would get more attention than a DTS exporter for Blender has.
I think I am starting to see how this would work. The key is using an open format that is extensible for future needs and will not break older exporters/importers.
| Phil Carlisle (Jul 12, 2007 at 14:54 GMT) |
The thing is, for example if blender output its animations as Collada, or FBX (both fairly competent file formats with open SDK's), then you could simply read any of those formats and have DTS's.
If not, then the solution would be to write a .blend "reader" plugin that would then work. I guess the main point is that its better to only lock you into the DTS format right at the point you need it (as an art asset in the final game) and not at the point where youre editing it (in your DCC application).
Either way works.. but I prefer reading common formats than writing them for reasons I've stated.
You must be a member and be logged in to either append comments or rate this resource.



5.0 out of 5


