by date
Art pipeline and other things.
Art pipeline and other things.
| Name: | Phil Carlisle | ![]() |
|---|---|---|
| Date Posted: | Jul 16, 2007 | |
| Rating: | 2.5 out of 5 | |
| Public: | YES | |
| Comments: | YES | |
| RSS Feed: | or Subscribe with . | |
| Profile Page: | View profile page for Phil Carlisle |
Blog post
Art pipeline update
Greetings.
Ok, so more stuff on the Art pipeline. This week I spent time mulling over how various DCC apps export differently to FBX format. It seems there really isnt a single convention as to how one app saves as compared to another. On the upside though, the main advocate of FBX format also produces most of the main FBX content production tools (max, maya, motionbuilder) so I'm sure they will internally link up at some point and come to an understanding.
FBX format and the SDK is a tad weird though, because it has to support so many DCC tool features.
Originally I had envisioned using the FBX SDK from discreet for supporting Collada format files too (in addition to the obj/3ds formats it also handles). But having reviewed the code, I've decided to go for Feeling Software's FCollada libraries for it. FCollada is actually reasonably sane, if completely undocumented and frankly makes my eyes water less than the collada DOM and other api's I've seen floating around.
Right now I can read FBX format files with >1 UV sets (which is why I originally decided to do this), interestingly I was messing around with multi-sub materials in max trying to figure out how the FBX file would look internally after exporting a number of different setup scenarios (mostly in this case, adding a texture mapped box then trying to add different UV mappings and layers and textures and seeing how they worked). I've now figured out at least one useful workflow that seems to be what artists expect to do, so we're good to go from the FBX format front for at least moving forward.
So, next task is to get the DTSSDKPLUS to export the FBX format data from my internal scenegraph into Torque's DTS mesh format. From there its a matter of then adding the features to the Torque side to handle the various functionality I want (multiple UV sets etc) and then writing out the new features from the DTSSDKPLUS side and handling them in torque.
Once all of that works, I can integrate the Collada loader code into my scenegraph and the export should just work as-is. Same with .x and any other format I choose.
Game related
With a burst of productive energy right now, I'm having fun getting on with our games projects. Right now we're revamping the GUI to look more consistant and we're adding the UI to incorporate our shop-store backend system. I've come to the conclusion that writing custom GUI controls is for the birds and I'm using a compositional model a lot more (where you add controls to a GUIStackCtrl nested within a GUIScrollCtrl). Only downside is the pretty mixed up positioning elements and what appears to be a bug with extents of GUI controls not being updated properly when using the "width" and "height" of the parent control. Not to worry though.
I also started prototyping a simple 2D game during this weeks GID weekend. Although technically I wasnt GID'ing, it certainly kind of went that way. I implemented a simple heirarchy of objects in script, only to realize that I think I prefer to do that in C++ (plus the script was VEEEERY slow).
The basic premise of the game remains a closely guarded secret right now (ok, not closely, but I havent told anyone yet), but it involves a randomly generated heirarchy. The cool thing about using a randomly generated environment is that it allows me to offer unlimited mission possibilities.
Just to explain the random generation thing in a bit more detail. I decided to use a technique we used in the old worms games. When you generate a new game level, you are given an N character string. That string is the parameters to the generation algorithm encoded such that ANYONE can generate the same level based on that string. So sharing a good game level with someone else will be as simple as sharing 16 characters. Not only that but you can also randomly generate different TYPES of level based on different properties of the string (perhaps different bits in random parts of the string).
When players play the game, it is basically a logical puzzle, but it is bounded by time. You will earn a rating for any given level that gives you a "score" so to speak. So we can have people generate levels, have people DESIGN levels based on tweaking parameters, we can have people SHARE levels based on simple strings and we can SCORE players based on thier achievements for a given level. All with minimal effort and almost no data transfer. Sounds good no?
Another great advantage of this game idea, is that it essentially contains only procedurally generated content. Even the graphics will for the most part be procedurally generated (using an external application). In fact, the only thing that wont be generated is the world map. I'm hoping to find a source that will allow me to download the data I need to recreate that map though, so again NO artwork!
I'm happy with my prototype though. It feels like a good thing to do.
Greetings.
Ok, so more stuff on the Art pipeline. This week I spent time mulling over how various DCC apps export differently to FBX format. It seems there really isnt a single convention as to how one app saves as compared to another. On the upside though, the main advocate of FBX format also produces most of the main FBX content production tools (max, maya, motionbuilder) so I'm sure they will internally link up at some point and come to an understanding.
FBX format and the SDK is a tad weird though, because it has to support so many DCC tool features.
Originally I had envisioned using the FBX SDK from discreet for supporting Collada format files too (in addition to the obj/3ds formats it also handles). But having reviewed the code, I've decided to go for Feeling Software's FCollada libraries for it. FCollada is actually reasonably sane, if completely undocumented and frankly makes my eyes water less than the collada DOM and other api's I've seen floating around.
Right now I can read FBX format files with >1 UV sets (which is why I originally decided to do this), interestingly I was messing around with multi-sub materials in max trying to figure out how the FBX file would look internally after exporting a number of different setup scenarios (mostly in this case, adding a texture mapped box then trying to add different UV mappings and layers and textures and seeing how they worked). I've now figured out at least one useful workflow that seems to be what artists expect to do, so we're good to go from the FBX format front for at least moving forward.
So, next task is to get the DTSSDKPLUS to export the FBX format data from my internal scenegraph into Torque's DTS mesh format. From there its a matter of then adding the features to the Torque side to handle the various functionality I want (multiple UV sets etc) and then writing out the new features from the DTSSDKPLUS side and handling them in torque.
Once all of that works, I can integrate the Collada loader code into my scenegraph and the export should just work as-is. Same with .x and any other format I choose.
Game related
With a burst of productive energy right now, I'm having fun getting on with our games projects. Right now we're revamping the GUI to look more consistant and we're adding the UI to incorporate our shop-store backend system. I've come to the conclusion that writing custom GUI controls is for the birds and I'm using a compositional model a lot more (where you add controls to a GUIStackCtrl nested within a GUIScrollCtrl). Only downside is the pretty mixed up positioning elements and what appears to be a bug with extents of GUI controls not being updated properly when using the "width" and "height" of the parent control. Not to worry though.
I also started prototyping a simple 2D game during this weeks GID weekend. Although technically I wasnt GID'ing, it certainly kind of went that way. I implemented a simple heirarchy of objects in script, only to realize that I think I prefer to do that in C++ (plus the script was VEEEERY slow).
The basic premise of the game remains a closely guarded secret right now (ok, not closely, but I havent told anyone yet), but it involves a randomly generated heirarchy. The cool thing about using a randomly generated environment is that it allows me to offer unlimited mission possibilities.
Just to explain the random generation thing in a bit more detail. I decided to use a technique we used in the old worms games. When you generate a new game level, you are given an N character string. That string is the parameters to the generation algorithm encoded such that ANYONE can generate the same level based on that string. So sharing a good game level with someone else will be as simple as sharing 16 characters. Not only that but you can also randomly generate different TYPES of level based on different properties of the string (perhaps different bits in random parts of the string).
When players play the game, it is basically a logical puzzle, but it is bounded by time. You will earn a rating for any given level that gives you a "score" so to speak. So we can have people generate levels, have people DESIGN levels based on tweaking parameters, we can have people SHARE levels based on simple strings and we can SCORE players based on thier achievements for a given level. All with minimal effort and almost no data transfer. Sounds good no?
Another great advantage of this game idea, is that it essentially contains only procedurally generated content. Even the graphics will for the most part be procedurally generated (using an external application). In fact, the only thing that wont be generated is the world map. I'm hoping to find a source that will allow me to download the data I need to recreate that map though, so again NO artwork!
I'm happy with my prototype though. It feels like a good thing to do.
Recent Blog Posts
| List: | 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!! 07/16/07 - Art pipeline and other things. |
|---|
Submit your own resources!| Tim Heldna (Jul 16, 2007 at 10:22 GMT) |
Nearly all DCC programs support Collada now and the ones that don't soon will. It is proving to be a very stable, usable and valuable format. It's allowing me to shift content from engine to engine and from modelling application to modelling application with ease and no corruption of files. Plus it supports physics data as well!
I have personally tested and used skinned, animated objects in the Collada format from Max, Maya, XSI, TrueSpace and Blender. I've exported static meshes in the Collada format from Milkshape, SketchUp, DeleD, Carrara and Modo.
I've used meshes from modelling applications such as Cinema 4D, that do not have Collada support, by using the Autodesk FBX Converter. This tool allows one to convert FBX files to Collada.
Collada is the future - it's about time someone came up with a unified 3D extension.
| Phil Carlisle (Jul 16, 2007 at 11:45 GMT) |
FBX and Collada are the two main formats I can see being adopted right now. I want to have 3ds and obj because of the content available out there. I want halflife MDL formats because of similar issues.
To be honest, I think the "main" format will be collada. In that I'll concentrate on making sure that I keep that up to date. But It is still a work in progress, so best not to put all your eggs in one basket!
| David Janssens (Jul 16, 2007 at 12:15 GMT) |
The 'almost no data transfer' is higly interesting for me. Looking for more info on that one.
| Prairie Games (Jul 16, 2007 at 14:07 GMT) |
| Adrian Tysoe (Jul 16, 2007 at 15:15 GMT) |
| Phil Carlisle (Jul 16, 2007 at 18:58 GMT) |
David: Its mainly just procedural methods. I suppose there wont be a general paper on such a thing as it tends to be game specific. In worms we used it to generate landscapes to play on. So it would essentially map the character string down to a seed for our random level generator in such a way that certain bits affected certain parts of the random generation (think of it like bits 0..4 map to "smoothness", bits 5..10 map to "island-ness" etc).
For my prototype, my bits will map to things like tree balance (i.e. can the tree be more "lop sided" or does it remain fairly evenly weighted) or things like difficulty level or complexity.
For a terrain, you might have an erosion algorithm with a strength value and that strength value is taken from the appropriate number of bits in the bits of the character string. Pack enough parameters together and encode it as a string and youre golden.
You must be a member and be logged in to either append comments or rate this resource.



2.5 out of 5


