D3U Official Pyro-GL: Prepping For In-Game Use.

For Descent, Descent II and Descent3 level editing and modification assistance.
Post Reply
User avatar
[]V[]essenjah
DBB Defender
DBB Defender
Posts: 3512
Joined: Mon Dec 20, 1999 3:01 am

D3U Official Pyro-GL: Prepping For In-Game Use.

Post by []V[]essenjah »

Image
Click the picture to enlarge.

Well, my Pyro-GL is finally textured, after hours upon hours of work. Now, my problem is getting it into D3 itself. It seems that when I convert it, I lose all of the texturing and material data. This shouldn't occure but I'm wondering if I lose the data because this is an extremely complex model in comparison to my other work that I've done and because it has over 21 128X128 textures and Blender can't convert that much data all at once. My PC has also had issues so it might even be that. So, at this point, I need to: 1. Re-install my OS and all my software onto a new drive and re-convert the mesh. 2. If that fails, seperate the model into peices, convert them, and then put them all back together so that it lessens the data that blender is trying to convert.


My biggest issue, is that I don't have a direct way to convert out of Blender. Currently I have to convert it for use in Milkshape, then convert it again to Orf format. I seriously need a programmer to make a proper converter for Blender. So, this is my challenge for any programmers out there.


Resources for such a project can be found here with a list of exactly what I need: viewtopic.php?t=12133

My biggest issue, is that I don't have a direct way to convert out of Blender. Currently I have to convert it for use in Milkshape, then convert it again to Orf format. I seriously need a programmer to make a proper converter for Blender. So, this is my challenge for any programmers out there.


Resources for such a project can be found here with a list of exactly what I need: viewtopic.php?t=12133
User avatar
SuperSheep
DBB Benefactor
DBB Benefactor
Posts: 935
Joined: Sun Jun 03, 2001 2:01 am
Location: Illinois

Post by SuperSheep »

There is already an import and export tool for 3dsmax that fully preserves textures and UV mappings.

http://www.planetdescent.com/site/files ... opment.asp

3dsgen - Converts models to 3ds format.
pd3-oofgen - Converts them back to oof.

I seriously doubt that you will find someone willing to spend a 100 hours to write a converter for blender unless there was a serious need in the community.

If you really are serious about continuing to model in Blender, then might I suggest you consider writing an exporter yourself? It appears that blender using Python scripts for adding additional functionality(including import & export).

btw...Nice model :)
User avatar
[]V[]essenjah
DBB Defender
DBB Defender
Posts: 3512
Joined: Mon Dec 20, 1999 3:01 am

Post by []V[]essenjah »

Problem is... that I'm not a programmer at all. I know HTML and I used to roughly know SOME javascript. That's about it.

I'm primarily a CG artist/IT guy. The latter being what I get paid for. :) I wouldn't know the first thing about how to write an importer/exporter program.

The 3DS exporter won't work for this. Blender doesn't even have a decent 3DS exporter that maintains UV maps properly yet. If they could do that, my work would be already done by now. :)


BTW, thanks for the compliment.
User avatar
Wishmaster
DBB Ace
DBB Ace
Posts: 133
Joined: Mon Jun 18, 2007 9:48 pm
Location: In the mines

Post by Wishmaster »

That's one very nice piece of work.

I can't promise anything, since I'm a little busy with work, etc. at the minute, but I'll at least look at the Blender export scripts and see how easily I could adapt one to .oof for you. The other reason I can't promise is that I don't know Python very well - I've spent most of my programming time on C++ - but that's a more minor obstacle.
C:\\>cd games\\descent
C:\\GAMES\\DESCENT>descent
User avatar
SuperSheep
DBB Benefactor
DBB Benefactor
Posts: 935
Joined: Sun Jun 03, 2001 2:01 am
Location: Illinois

Post by SuperSheep »

I realize that the 3ds plugin will not work with blender. My point was that 3dsmax already has a large amount of tools designed to work with it. If you are a CG guy, you should be able to get yourself a copy of 3dsmax to use at the very least.

I guess I wonder at why you would make your model to the extent you did in a program that you know doesn't export to a usable format for D3, and then ask for someone else to write a converter so you can finish your work.

Writing a exporter for Blender or any 3d program for that matter is not going to be a simple 1.2.3. task for even a skilled programmer unless they had already wrote scripts for Blender and had an intimate knowledge of D3's OOF/ORF format.

Instead of complaining that you don't have the neccessary skillset to accomplish writing a script to export a model you made in a program that is unsupported to this date for D3 development, get your hands dirty, and write the code.

I will gladly provide you with all of the specs I've gathered on the OOF format and even give you a good place to begin...
http://en.wikibooks.org/wiki/Blender_3D ... rt_scripts

Code: Select all

***** OOF File Format *****

The beginning of every OOF file has a File Header which contains
the file ID and version number of the OOF. After that is a series
if chunks that each begin with a Chunk Header describing the type
of chunk.

// General Data Types
struct vector {
	float x;
	float y;
	float z;
}
struct RGB {
	byte red;
	byte green;
	byte blue;
}
struct FACE_VERT {
	int Index;		// Index of face vert
	float tu;		// Texture U mapping coordinate
	float tv;		// Texture V mapping coordinate
}
struct FACE {
    	vector normal;		// Faces normal
    	int numVerts;		// Number of verts on face
	int textured;		// Is this face textured? 0-No,
				// Anything else, yes
UNION {
	int textureID;		// Texture index(if textured<>0)
	RGB color;		// Color of face(if textured=0)
}
	FACE_VERT faceVerts[numVerts];	// Face vert data
	float x_diff;		// Used for lightmaps I believe
	float y_diff;		// ditto
}
struct SPCL_PT {
	int nameLen;		// Length of SPCL point Name
	char name[nameLen];	// SPCL point name
	int propLen;		// Length of SPCL point Property name
	char prop[propLen];	// Property Name
	vector pos;		// SPCL point position
	float radius;		// Radius of SPCL point
}
struct OOF_PT {
	int parent;		// Parent of Point
	vector pos;		// Position of Point
	vector dir;		// Direction of Point
}
struct WBAT_DATA {
	int numWBATGPNT;		// Number of Gunpoints
	int GPNTindex[numWBATGPNT];	// Gunpoint indexes
	int numWBATTuuret;		// Number of Turrets
	int turretIndex[numWBATTurret];	// Sub-Object index
}
struct TXTRdata {
	int nameLen;		// Length of Texture Name
	string name[nameLen];	// Texture name(Imagename)
}
struct PANI_FRAMES {
	int startTime;		// Start Time of frame
	vector pos;		// Position
}
struct RANI_FRAMES {
	int startTime;		// Start Time of frame
	vector axis;		// Axis of rotation
	int angle;		// Angle to rotate(0-65535=0-360 degrees)
}
struct RANI_ANIM {
	int numKey;		// Number of Key frames
	int min;		// Minimum Key Frame number
	int max;		// Maximum Key Frame number
	RANI_FRAMES RANIFrames[numKey];	// RANI Frames data
}
struct PANI_ANIM {
	int numKey;		// Number of Key frames
	int min;		// Minimum Key Frame number
	int max;		// Maximum Key Frame number
	PANI_FRAMES PANIFrames[numKey];	// PANI Frames data
}



// File Header
struct OOFHeader {
	char fileID(4);		// File ID
	int version;		// Version number
}

struct OOFChunk {
	char chunkID(4);	// Chunk ID
	int chunkLength;	// Length of Chunk
}

// OHDR = Object Data Chunk
struct ObjectData {
	int numSOBJ;		// Number of Sub-Objects in OOF
	float maxRadius;	// Max Radius of Model
	vector minBounding;	// Minimum bounding point for model
	vector maxBounding;	// Maximum bounding point for model
	int numDetailLevels;	// Number of detail levels in model
}

struct ObjectDetail {
	int detailLevel;	// Level of detail
	float depth;		// Depth in models
}

// SOBJ = Sub-Object Chunk
struct SOBJData {
	int Index;		// Sub-Objects index
	int parent;		// Sub-Objects parent index
	vector norm;		// norm for seperation plane(debugging)
	float d;		// norm d for seperation plane(debugging)
	vector pnt;		// pnt for seperation plane(debugging)
	vector offset;		// 3D offset from parent(pivot point)
	float radius;		// Radius of Sub-Object
	int treeOffset;		// Offset of tree data(not used)
	int dataOffset;		// Offset of the data(not used)
	vector geo_center;	// geometric center of this subobject.
				// In the same Frame Of Reference as
				// all other vertices in this submodel.
				// (Relative to pivot point)
	string Name;		// Name of Sub-Object(null terminated)
	string Property;	// Property Name of Sub-Object
				// (null terminated)
	int move_type;		// -1 if no movement, otherwise
				// rotational or positional movement
				// Not used
	int move_axis;		// Movement Axis(Axis to Rotate
				// or move around). Not used
	int numFSChunks;	// Number of freespace chunks
	int FSData[numFSChunks];	// Freespace data
	int numVerts;		// Number of vertices on Sub-Object
	vector vertex[numVerts];	// Vertex positions
	vector normal[numVerts];	// Vertex normals
	float alpha[numVerts];	// Vertex Alpha value. Only present
				// if version => 2300
	int numFaces;		// Number of faces on Sub-Object
	FACE faceData[numFaces];	// Face information
}

// SPCL - Special Point Chunk
struct SPCLData {
	int numSPCL;			// Number of Special Points
	SPCL_PT SPCLpoint[numSPCL];	// Special Point data
}

// ATCH - Attach Point Chunk
struct ATCHData {
	int numATCH;			// Number of Attach points
	OOF_PT pntData[numATCH];	// Attach Point data
}

// NATH - Attach Normal Point Chunk
struct NATHData {
	int numNATH;			// Number of Attach Normals
	OOF_PT pntData[numNATH];	// Attach Normal Point data
}

// GRND - Ground Point Chunk
struct GRNDData {
	int numGRND;			// Number of Ground points
	OOF_PT pntData[numGRND];	// Ground Point data
}

// GPNT - Gunpoint Chunk
struct GPNTData {
	int numGPNT;			// Number of Gunpoints
	OOF_PT pntData[numGPNT];	// Gunpoint data
}

// WBAT - Weapons Battery chunk
struct WBSData {
	int numWBAT;			// Number of Weapons Batteries
	WBAT_DATA wbatData[numWBAT];	// Weapon Battery data
}

// TXTR - Texture Chunk
struct textureData {
	int numTextures;		   // Number of textures
	TXTRdata textureData[numTextures]; // Texture data
}

// RANI, ANIM - Rotational Animation Chunk
struct RANIData {
	RANI_ANIM FrameData[numSOBJ];	// RANI Frames data
}

// PANI - Positional Animation Chunk
struct PANIData {
	PANI_ANIM FrameData[numSOBJ];	// PANI Frames data
}

// PINF - Information chunk
struct PINFData {
	char info[chunkLength];		// Information chunk data
}


// IDTA - Interpreter Data
??

// GRID - Grid Data
??
User avatar
[]V[]essenjah
DBB Defender
DBB Defender
Posts: 3512
Joined: Mon Dec 20, 1999 3:01 am

Post by []V[]essenjah »

SS, I have a way to convert it over. It's just that I would like to have a more efficient way of doing it. It seems that my current method sucks as it didn't like a model this complex. I expected it to work fine but for some reason, my current converter going from MS3D to orf doesn't like over 20 textures on a mesh. I may be able to remedy that. The converter going from Blender to ms3d that I'm using doesn't like to export over 2 objects at a time with multiple textures on each object. I fixed that issue though.


I've been a CG guy for a few years and I have never been able to afford 3DS Max and I refuse to \"acquire it\" by any questionable means. My car is $1500 and has issues. All my savings are donated to health issues and living expenses I will face within the next year. Do you really think that I would give that money up, that I would use for a new car or a better life to 3DS Max, when that is not an absolute necessity? This is a hobby for me right now. A serious hobby, but it has to remain a hobby right now. Trust me, this is not something I can simply stop doing. I would go downhill fast without it. Mind you, I do have experience in 3DS Max, Maya, and Blender. I want to get my hands on Lightwave first. At least Max? I would say, at least, Lightwave. It is a decent 3D modeling program used in such shows as Firefly and BSG. It runs about $800-$1000. Maya and Max are a close tie, but I like Maya better since it has a really nice animation and history system and it is cheaper than Max.

I'm primarily a computer tech, working my way up from the bottom, making $7 an hour and I have to pay bills like everyone else. As a hobby and a secondary: CG artist. I don't really need the stress of a programmer on top of that right now. :) Otherwise, I'll bite off more than I can chew.
User avatar
Sirius
DBB Master
DBB Master
Posts: 5616
Joined: Fri May 28, 1999 2:01 am
Location: Bellevue, WA
Contact:

Post by Sirius »

Maya and Lightwave are the ones I primarily hear of being used for pre-rendered graphics. 3DS seems to have a bigger market share in game content creation.
User avatar
[]V[]essenjah
DBB Defender
DBB Defender
Posts: 3512
Joined: Mon Dec 20, 1999 3:01 am

Post by []V[]essenjah »

Yeah, I've noticed that as well. A lot of new games are looking at Lightwave/Maya though. CD and UT3 I'll bet, both use Maya. Probably even Gears Of War used it. Can't say that for sure though, mind you. UT2003-UT2004 both used Maya and I'll bet UT3 uses it. They seem to have a deal set up where they can provide Maya PLE for the modding side of the game.

Max is probably the top program for game modeling due to the fact that it has been the industry standard for so many years. Maya used to be more focused on pre-rendered content but it has been catching up for the past few years.


Mind you, I have used both Max and Maya and I like Maya. Mind you, Max feels a lot more natural and user friendly. Maya is a bit more complex but I love it's set of tools and it's animation system.


Right now, I'm focused on Blender for D3 work. When I'm done with D3U, I'll move on to Maya PLE to work with Sushi on a UT related project. Possibly even Lightwave if I can find the plugins for it that I need. But I'm focused on finishing one thing at a time.

By the way, I'm getting this figured out piece by piece. It's just taking longer than I had hoped. I'll get there though.
DigiJo
DBB Ace
DBB Ace
Posts: 491
Joined: Thu Jul 18, 2002 2:01 am
Location: Germany
Contact:

Post by DigiJo »

have a look at this thread on descentforum.de:

http://www.descentforum.de/forum/viewtopic.php?t=3549

ouch made a simple .x to .orf converter a while ago for blender. from the converted .orf it should be easy to get your pyro ready into d3 with supersheeps oof-editor. i havent tested this converter yet, but it may convert the uv-mapping as well. there is also a linux version avaible.

here is the download-url:

http://www.descentforum.de/forum/download.php?id=962

good luck and nice pyro, messenger.

Dig out
jshaner
DBB Ace
DBB Ace
Posts: 124
Joined: Sat Feb 23, 2008 4:16 pm

Post by jshaner »

I know how old this subject is...but I really love the ship! Is there any chance you would put it up for download?

does it pass positively when doing an SDL check? (if your 3D program has that feature)
User avatar
[]V[]essenjah
DBB Defender
DBB Defender
Posts: 3512
Joined: Mon Dec 20, 1999 3:01 am

Re:

Post by []V[]essenjah »

jshaner wrote:I know how old this subject is...but I really love the ship! Is there any chance you would put it up for download?

does it pass positively when doing an SDL check? (if your 3D program has that feature)
I had this ship in-game a while back. I didn't have enough support for it and lost interest. Too many textures to take care of all the time. That ship had like 30 some-odd texture files on it when I was done. Modern games require far less.
Post Reply