FF8 Models, How did Qhimm rip them?

  • Thread starter Thread starter Satoh
  • Start date Start date
Status
Not open for further replies.
I have some documentation about quads and strips pertaining to PS2 rendering, they may not help much, but I'm posting them here just in case they might be of use...

Synopsis
A triangle strip is a speed- and space-efficient way of storing a set of triangles on a computer, usually for computer graphics.

Detail
Take, for example, a modern graphics processor, capable of drawing millions of polygons per second. One of the major limiting factors is not the triangle-drawing ability of the processor; without triangle strips often the limiting factor is the data bus between the graphics processor and the memory storing the triangles1. Triangle strips reduce the memory bandwidth needed by a graphics processor by not transmitting redundant information. Each triangle is comprised of three separate vertices, but in many cases you can find a set of topologically connected triangles which share common edges. Triangle strips exploit this fact. So what does this mean?

Consider a simple square, which would be stored as two triangles:

0--1
| /|
|/ |
2--3
Thus, the square is made up of the triangles (0, 1, 2) and (1, 2, 3)2. A naive storage format for this square would just store both those triangles, costing 6 (2 x 3) vertices. Notice how in both of those triangles, the edge (1, 2) is specified. A triangle strip simply stores that square as (0, 1, 2, 3), where the two constituent triangles share the middle edge (1, 2). In a triangle strip of length N, there are (N-2) triangles; with each triangle being a vertex and its two previous vertices. This means the square is now stored in 4 vertices, and if we wanted to add another connected triangle (sharing edge (2,3) with triangle (1, 2, 3)) we only need to add an extra vertex:

0--1
| /|
|/ |
2--3
| /
|/
4
This is extremely space efficient; in a perfect strip each extra triangle costs us only another vertex.

If you imagine a typical polygonal mesh, for example a triangulated teapot, you can see that the majority of the triangles share edges with other triangles around them. This makes finding long strips of connected triangles relatively easy, and indeed such shapes can be stored very efficiently using strips.

Given an arbitrary polygon soup, finding the perfect set of triangle strips which represent it is a difficult problem. There is a potentially infinite number of different strips you could choose to represent an object, but for efficiency's sake the strips used must be as long as possible. In fact, this process (known as triangle stripping or sometimes stripification) in an NP complete problem. However, armed with some simple heuristics you can usually come up with a near-perfect solution. There are a number of GPL libraries around for performing stripification, including a particularly good one called Stripe.

As you've seen, strips are space-efficient; it takes less vertices to specify a mesh using strips. However, it is also speed-efficient. In rasterizing a triangle, a graphics processor has to perform a fair degree of calculations, particularly if it supports something like programmable vertex shaders. When rendering a strip, if the previous two vertices are cached, then after the first triangle has been drawn, the next only requires one extra vertex calculation.

There's another trick that can be used; normally there's a set up cost associated with starting a strip on modern graphics hardware. So reducing the total number of triangle strips is beneficial too - this can be achieved using degenerate (zero area) triangles. Given two strips, you can stitch them together by duplicating the last vertex of the first strip, and the first vertex of the second strip, and then concatenating them. Consider two separated squares:

0--1 4--5
| /| | /|
|/ | |/ |
2--3 6--7
These squares can be expressed as a single triangle strip (0, 1, 2, 3, 3, 4, 4, 5, 6, 7) with four degenerate triangles (2, 3, 3), (3, 3, 4), (3, 4, 4), (4, 4, 5). As the triangles have zero area (which is quick to detect), they usually cost very little to process, and in most circumstances these long concatenated strips are more efficient than lots of small strips3.

Any task involving large numbers of triangles can benefit from triangle stripping, for example collision detection, or ray tracing.

1.Indexing vertices and storing vertex data separately to topology information is another common way of reducing the bandwidth, which is compatible with stripping.
2.Usually triangles are stored with a consistant winding order, I ignore winding issues here for clarity. Where winding order is important (e.g. on graphics processors) note that every other triangle's winding order is opposite, and this is taken into account by the hardware.
3.Some specialist applications (e.g. the PlayStation 2's rendering system) store an extra piece of information with each vertex: whether that vertex and its previous two vertices should be considered a valid triangle. This allows an even more efficient way of stitching triangles together; you can simply concatenate strips together and ensure the first two vertices are not marked as valid triangles. For example, using an asterisk to mark valid triangles, the two squares can be expressed as (0, 1, 2*, 3*, 4, 5, 6*, 7*) using such a system.


also, as I don't think any of that mentions normals, it should be noted that most systems use clockwise vertex orientation as one type of normal (usually facing the camera) and counterclockwise numbering denoting a the other(usually reversed, with the invisible side pointed at the camera)


So most quads, being drawn as two triangles, will be half invisible. Since one triangle is drawn as

Code: [Select]
Code:
1. .2 and the next triangle being  .1(2)3.                           2(3). .3(4)
Thus making triangle 2,3,4 counterclockwise and having an inverse normal.


Does any of that help? (If you already knew that, I apologize, I'm not trying to belittle you. I just get so few opportunities to really do anything helpful)
 
RinoaParty_GoodRotations_1.png


 :-D

I don't actually know how what I did works, but I'm now very close to proper bone rotations. Still need to fix the other issues though.

Some issues

  • Gaps in UV
  • Textures don't show up in render (Need to associate it correctly or something.)

Hmmm, I've come a long way since I started, when it had no skeleton at all and was just a clump of parts stuck together. (Those are stages which I didn't show here.)


Edit: Didn't notice that the parts of the body (noticeably the hands) were flipped. I think I've fixed it in the script now.
 
Last edited:
RinoaParty_GoodRotations_1.png


 :-D

I don't actually know how what I did works, but I'm now very close to proper bone rotations. Still need to fix the other issues though.

Some issues

  • Gaps in UV
  • Textures don't show up in render (Need to associate it correctly or something.)

Hmmm, I've come a long way since I started, when it had no skeleton at all and was just a clump of parts stuck together. (Those are stages which I didn't show here.)


Edit: Didn't notice that the parts of the body (noticeably the hands) were flipped. I think I've fixed it in the script now.
I've never liked Rinoa as much as I do in this post...

What is that black line coming out of her thigh? a bone?

Also I think you have the bones in the waist reversed; the rotation looks correct, but the bones themselves have the wrong legs weighted to them. I think after you fix that you can probably start finalizing little details... It certainly looks near completion in that image sequence.
 
Last edited:
Actually it's the arms and hands also. Depending on your purpose once you get the mesh and the UV it's easy to fix the rest.
 
Last edited:
Edit: Didn't notice that the parts of the body (noticeably the hands) were flipped. I think I've fixed it in the script now.
Sorry, I misunderstood that the first time I read it... you may ignore my comment about reversed bones...
 
:-o arg, we still can't get models from FF8?

I wonder, the PC game is dx8 or dx6 based?
 
:-o arg, we still can't get models from FF8?

I wonder, the PC game is dx8 or dx6 based?
On the contrary, it is quite possible to get the battle models (eventhough they are somewhat twisted, it's easily fixed)  It is reportedly possible to also get the field models, but I have yet to do it or see it being done.
 
:-o arg, we still can't get models from FF8?

I wonder, the PC game is dx8 or dx6 based?
On the contrary, it is quite possible to get the battle models (eventhough they are somewhat twisted, it's easily fixed)  It is reportedly possible to also get the field models, but I have yet to do it or see it being done.
Beg pardons, but if you can get battle models, could you explain how? I've tried a few programs but most fail miserably to even run at all...

Also, this thread is currently concentrating on the field models, so far what you see here is the progress... I haven't looked around the web in depth lately, but it seems from the sites I visit, that we're the only ones actively pursuing this... or at least the only ones on a site I've ever seen...

It's entirely plausible that some tiny unknown site is off doing this very thing, but they are just that... small and unknown to me.

In the end, any information you may have is a possible benefit.


And I completely forgot MK64 was even here... I was honestly quite surprised to see him... (here anyway... there are a few other modding/3D exploration sites I see him at regularly XD )

...I really need to learn to recognize headers... one of these days I'll get something done...
 
On the contrary, it is quite possible to get the battle models (eventhough they are somewhat twisted, it's easily fixed)  It is reportedly possible to also get the field models, but I have yet to do it or see it being done.
Beg pardons, but if you can get battle models, could you explain how? I've tried a few programs but most fail miserably to even run at all...
Sure, this will be the quick version though because I have a lot of stuff to get done today.

Somewhere on this site you will find a link to a program that can display the battle models.  Try searching "FF8 Models" or something similar.   The post will say something about a guy from another site having success, but his program doesn't display them 100% (they are twisted).  When you click on the link and download his program, it comes with all of the .dat battle files, so you don't even need to go through the trouble of ripping them yourself.  I think the post may have been made by Mirex... but I'm not positive.

Then you will need 3dvia to rip them from his program (he doesn't have an export function).  After you download that you will have to google a program made by a guy that I think is called Koichi Senada.   His program uses 3DSMax to convert the 3dvia format to a .max format.  And from there obviously you can convert it to anything else.

Like I said, some of them are pretty badly twisted, but with a little 3D knowledge it's a pretty easy fix.

Proof  :-D
odin.jpg
 
Last edited:
I see... I hadn't thought about using 3dvia on kvaks...

Thanks for the heads up, I'll definitely be using that info for great justice.
 
Great!  I know nothing about the battle or field models, but if they are composed the same way, you might be best off waiting for Vehek to finish since he seems to be making leaps and bounds in progress, and his viewer will undoubtedly be better than KVAKS
 
the models are very lowpoly.. I can't imagine it be that too hard to extract.
I think it's largely due to how old these models are.. they are outdated.. so whats the point cracking a heavily optimised/condensed format..

it just sucks that no reliable viewer has ever been made considering that FF8 is just one of those lagacy games

ohwell guess it's time to start re-modeling so of these characters right ;)
 
the models are very lowpoly.. I can't imagine it be that too hard to extract.
I think it's largely due to how old these models are.. they are outdated.. so whats the point cracking a heavily optimised/condensed format..
I guess just to show we can.  All the information is there (I think) and Qhimm is supposed to be the mecha of 90's FF modding.

it just sucks that no reliable viewer has ever been made considering that FF8 is just one of those lagacy games

ohwell guess it's time to start re-modeling so of these characters right ;)
Well Vehek was making awesome progress, maybe he'll decide to take it back up.

I don't know about remodeling though... No one likes FF8 THAT much lol
 
giving the graphics a boost could be fun if 1. there were a tool to weigh the mesh to the bones, and 2. you could completely hack the gameplay to eliminate or otherwise make drawing enjoyable. (along with a rather long list of poor gameplaymechanics plaguing ff8)


 ;D
 
I would love to see progress made on this game, I'm one of it's few fans. :)

Here is a tool that is capable of ripping 3d data directly from games, maybe it could help you, it offers a different method of getting data. (Ie, it hooks DX, when the model is drawn, it can dump that data directly, rather than bothering with figuring out the file format.. I've used this myself, it's not perfect, but it can get the models out of otherwise undocumented game formats.)

It basically takes a 3d screenshot.

3d Ripper DX
http://www.deep-shadows.com/hax/3DRipperDX.htm
 
Last edited:
3D Ripper was only compatible with DX9 and 10 last I read, FF8 runs on what 6 or 7, it may be possible using other programs to work around it though.
 
I would love to see progress made on this game, I'm one of it's few fans. :)

Here is a tool that is capable of ripping 3d data directly from games, maybe it could help you, it offers a different method of getting data. (Ie, it hooks DX, when the model is drawn, it can dump that data directly, rather than bothering with figuring out the file format.. I've used this myself, it's not perfect, but it can get the models out of otherwise undocumented game formats.)

It basically takes a 3d screenshot.

3d Ripper DX
http://www.deep-shadows.com/hax/3DRipperDX.htm
One necro isn't terribly bad when it brings something new to the table.  2 is bad.  Definitely bad.  Locked. Warned.
 
Status
Not open for further replies.
Back
Top