Jump to content

[PS2] EyeToy:Play


Go to solution Solved by Bigchillghost,

Recommended Posts

14 minutes ago, shak-otay said:

@Thatonebruh196: because you seem to use the original .etc file, not the cut one.

------------

As Bigchillghost mentioned there's a mix of triangles and tri strips.

(I've used C code to reproduce roocker666's script but without normals.

I had adapted TriList(skipList) from the ShaolinMonks' thread already, that's why I didn't use the updated script from Bigchillghost.)

What confuses me a little bit is rapi.rpgCommitTriangles(triangles, noesis.RPGEODATA_INT, len(triangles)// 4, noesis.RPGEO_TRIANGLE, 1)

Usually CommitTriangles creates faces from a face index buffer (pointer? to buffer triangles here) and modifies it depending on the parameter RPGEO_xxx,

where xxx=TRANGLE or TRIANGLE_STRIP for example. From my understanding. But what does it do here exactly? Just copy the index values?

That's why I prefer using C which is more transparent to me.  In a createTriList() clone I directly log the auto created face indices like so:

if (faceDir > 0) fprintf( stream, "f %d %d %d\n", f1+1, f2+1, f3+1 ) ;
                else fprintf( stream, "f %d %d %d\n", f2+1, f1+1, f3+1 ) ;

But I get a different shading when dragging/dropping the C-apps obj output onto Noesis (for "toggle face cull"):

https://imgbox.com/06Myv6HF

I hope that's because I didn't create normals from the .etc file.

I'm not using the original .etc, I'm using the edited one it comes with, is there anything up with that file? 

Link to comment
Share on other sites

  • Engineer
Posted (edited)
7 hours ago, Thatonebruh196 said:

I'm not using the original .etc,

Sorry, then. Because I could reproduce the error (partially) using the original etc file.

Original versus cut file

And yes, the displayed model is from .obj. I was too lazy to create a new picture. The outcome is the same.

edit:

Kieu, left hand

Yeah, it's left, not right.

Yume, mesh missing

edit: missing one is at 0x60DBC, vCnt= 165

edit2: couldn't track Vernon's sub meshes automatically, found 8 so far,

Vernon head etc

Edited by shak-otay
Link to comment
Share on other sites

1 hour ago, Thatonebruh196 said:

Ah, thanks for looking at it, unfortunately I get the same error...

Just noticed that the original script was using the NoeBitStream::read() handler to read bytes which on your system apparently triggered a false judgement. You may try download the script again and see if it works this time.

Link to comment
Share on other sites

8 hours ago, Bigchillghost said:

Just noticed that the original script was using the NoeBitStream::read() handler to read bytes which on your system apparently triggered a false judgement. You may try download the script again and see if it works this time.

image.thumb.png.3cef7ddfbad7c1286ea45d2f1b35f4f4.png

It worked great! Tysm!! Unfortunately my lack of hex knowledge is stopping me from tracking down Kieu's other parts, I wonder if someone would be able to create a script to automatically disassemble the files.. 

Link to comment
Share on other sites

  • Engineer
Posted (edited)
6 hours ago, Thatonebruh196 said:

 I wonder if someone would be able to create a script to automatically disassemble the files.. 

 

roocker666 said there's no pointers (to blocks). You can use the string "Shape" as a ref for finding them.

Works good for Kieu, for Yume partially.

For Vernon there's only 2 findings, Finally I'll try counts and calculation; for Kieu the vertex starts were startOfString (containing "Shape") + vCount*32 +0x58

For vernon the vStarts are 0x42C8, 0xc6b0, 0xFBBC, 0x20954,..., 0x44510

Just checking a formula vStart_next= vstart-prev + vcount*16 +something

(My results so far see my previous post.)

 

Edited by shak-otay
Link to comment
Share on other sites

The skeleton can be parsed correctly with ASH:

skel.thumb.png.64d99f29d4dab05fc3ca5886b3ad78a3.png

skelPV.png.5282dee5ea6acb209506747fe10c3f53.png

 

Yet the anim data seem weird.

anim.thumb.png.e5566b6c20f31e4d777d19e75e9c5b4c.png

Most of the translations match with the bind pose factor of correspond bone, while rotations look a bit off. And for both of them, there's a huge difference between the 1st frame and the rest.

animKeys.thumb.png.73057d167508b016b84c8ce9414a0390.png

Anim preview:

animPV.png.98bc7af4de5a988465dd472d82c4926a.png

 

Still, there's no blend indices attribute in the file so it doesn't make much sense to care for the skinning info or anim, etc.

  • Thanks 1
Link to comment
Share on other sites

  • Engineer
Posted (edited)
28 minutes ago, Bigchillghost said:

The structure seem pretty straight-forward to me:

For Kieu, yes. For Vernon it says: meshcnt=2, but there's many sub meshes, (biggest ones at 0x42C8, vCnt 1676?; 0x16D8C, vCnt 699; 0x20954, vCnt 1091?; 0x2A7A0, vCnt 1439, 0x33CC4, vCnt 599; 0x44510, vCnt 1814 etc )

edit: ok, see, you've found long subMeshCnt...

I'm too lame for it.:classic_sad:

Edited by shak-otay
Link to comment
Share on other sites

  • Engineer
Posted (edited)
1 hour ago, shak-otay said:

roocker666 said there's no pointers (to blocks).,,

Sorry about that, later I found the pointer to meshes but I was trying to understand mesh header, lol. But yes,  Bigchillghost info is correct, submesh count appears in mesh header, like in KIEU first mesh header has two submeshes(body and face). In Lhand and Rhand headers says 1 submesh. 

Edited by roocker666
Link to comment
Share on other sites

6 hours ago, Bigchillghost said:

The skeleton can be parsed correctly with ASH:

skel.thumb.png.64d99f29d4dab05fc3ca5886b3ad78a3.png

skelPV.png.5282dee5ea6acb209506747fe10c3f53.png

 

Yet the anim data seem weird.

anim.thumb.png.e5566b6c20f31e4d777d19e75e9c5b4c.png

Most of the translations match with the bind pose factor of correspond bone, while rotations look a bit off. And for both of them, there's a huge difference between the 1st frame and the rest.

animKeys.thumb.png.73057d167508b016b84c8ce9414a0390.png

Anim preview:

animPV.png.98bc7af4de5a988465dd472d82c4926a.png

 

Still, there's no blend indices attribute in the file so it doesn't make much sense to care for the skinning info or anim, etc.

image.png.ec12fd264c9801275f119e259d9db7c5.png

Animations are stored elsewhere, it might be acting weird cause it doesn't have the right data... I've listed the animations that correspond with the minigame (Rocket Rumble) 

ANIMS.zip

Link to comment
Share on other sites

20 hours ago, Thatonebruh196 said:

Animations are stored elsewhere, it might be acting weird cause it doesn't have the right data... 

Same structure, still bad outcome...

(KieuIntroEnter.ETA)

KieuIntroEnterArgs.thumb.png.0e4e6f5c727238e1acc3ec20b7fc3045.png

KieuIntroEnter.gif.3b74ceca70a4f48e955ab825b72cbe10.gif

 

Maybe the bind-pose skeleton is required instead of the posed one in the ETC file.

Link to comment
Share on other sites

3 hours ago, Bigchillghost said:

Same structure, still bad outcome...

(KieuIntroEnter.ETA)

KieuIntroEnterArgs.thumb.png.0e4e6f5c727238e1acc3ec20b7fc3045.png

KieuIntroEnter.gif.3b74ceca70a4f48e955ab825b72cbe10.gif

 

Maybe the bind-pose skeleton is required instead of the posed one in the ETC file.

Hmm, unfortunately I don't think I ever found a bind-pose file in the folders, weird... Maybe if we ever update the plugin to have the rigs we should leave out the animations. 

Link to comment
Share on other sites

On 6/7/2024 at 7:23 AM, shak-otay said:

roocker666 said there's no pointers (to blocks). You can use the string "Shape" as a ref for finding them.

Works good for Kieu, for Yume partially.

For Vernon there's only 2 findings, Finally I'll try counts and calculation; for Kieu the vertex starts were startOfString (containing "Shape") + vCount*32 +0x58

For vernon the vStarts are 0x42C8, 0xc6b0, 0xFBBC, 0x20954,..., 0x44510

Just checking a formula vStart_next= vstart-prev + vcount*16 +something

(My results so far see my previous post.)

 

Also I'd like to ask. How much data do you need to put into a new file? I've tried multiple times but it always ended with failure (I get an error basically) 

Link to comment
Share on other sites

On 6/8/2024 at 8:14 PM, Thatonebruh196 said:

Hmm, unfortunately I don't think I ever found a bind-pose file in the folders, weird...

Is there any skel file similiar to the ani?

On 6/8/2024 at 8:14 PM, Thatonebruh196 said:

Maybe if we ever update the plugin to have the rigs we should leave out the animations. 

Well, don't get me wrong, I was just looking for a chance to test my ARC app.🙃

Seems several world-space matrices of the skeleton use negative scaling factors. Though the left hand looks correcttly within Noesis, it's wrong when exported to FBX and imported into 3ds Max. There's a similar issue with ASH so one more problem to tackle.

diff.thumb.png.8b42c393b0ad9a1a61b1c40beb4b5bd2.png

  • Like 1
Link to comment
Share on other sites

1 hour ago, Bigchillghost said:

Is there any skel file similiar to the ani?

Well, don't get me wrong, I was just looking for a chance to test my ARC app.🙃

Seems several world-space matrices of the skeleton use negative scaling factors. Though the left hand looks correcttly within Noesis, it's wrong when exported to FBX and imported into 3ds Max. There's a similar issue with ASH so one more problem to tackle.

diff.thumb.png.8b42c393b0ad9a1a61b1c40beb4b5bd2.png

To answer your first one, no there's only animations and models, everything else is audio, textures, subtitles, particles and fonts. 

And second, is that the original not edited file? And would I be able to try it out for myself? 

Link to comment
Share on other sites

On 6/10/2024 at 12:34 AM, Thatonebruh196 said:

And would I be able to try it out for myself? 

Sorry but it was just a test script and I'm not in the mood for potential maintenance.

 

On second thought I just realized that it's not a problem about the bind-pose skeleton coz every single bone has at least one T, R and S frame so even if I wiped the transformation and use a fake skeleton it'll still produce the same result.

If taking account of the scaling curves, half of the body looks fine while the other half not.

KieuIntroEnter_WithScaling.gif.615fb28f0fa50eba3610ca3c5e8ce99a.gif

 

Multiplying the rotation key with the last matrix among the four of each bone from the ETC skeleton, however, do reveal the correct result.

Kieu_Final.gif.5f194f99ce0171dad76d4668f5a70e4f.gif

KieuIntroEnter_Final.gif.356910d2c369a6442bd900f7013b965d.gif

  • Like 1
Link to comment
Share on other sites

14 minutes ago, Bigchillghost said:

Sorry but it was just a test script and I'm not in the mood for potential maintenance.

 

On second thought I just realized that it's not a problem about the bind-pose skeleton coz every single bone has at least one T, R and S frame so even if I wiped the transformation and use a fake skeleton it'll still produce the same result.

If taking account of the scaling curves, half of the body looks fine while the other half not.

KieuIntroEnter_WithScaling.gif.615fb28f0fa50eba3610ca3c5e8ce99a.gif

 

Multiplying the rotation key with the last matrix among the four of each bone from the ETC skeleton, however, do reveal the correct result.

Kieu_Final.gif.5f194f99ce0171dad76d4668f5a70e4f.gif

KieuIntroEnter_Final.gif.356910d2c369a6442bd900f7013b965d.gif

Well shoot, seems like were getting somewhere! (Also I wanted the test script cause of it getting all of Kieu's model) 

Link to comment
Share on other sites

  • Solution

It appeared that the implicit indices encoding is not as simple as it may seem. For example the one on the left of the following image is what the script generated (with fixes of the existing code) while the one on the right seems more desirable. But I'll leave it just like that.

image.thumb.png.635b56fea2f8d9bc82c1a3622f4bb960.png

On 6/11/2024 at 1:32 AM, Thatonebruh196 said:

Also I wanted the test script cause of it getting all of Kieu's model

Here is the final script that will work with all samples.

fmt_EyeToyPlay_PS2_ETC.zip

Link to comment
Share on other sites

21 minutes ago, Bigchillghost said:

It appeared that the implicit indices encoding is not as simple as it may seem. For example the one on the left of the following image is what the script generated (with fixes of the existing code) while the one on the right seems more desirable. But I'll leave it just like that.

image.thumb.png.635b56fea2f8d9bc82c1a3622f4bb960.png

Here is the final script that will work with all samples.

fmt_EyeToyPlay_PS2_ETC.zip 1.34 kB · 0 downloads

The first one is actually accurate to the model in-Game specifically in that one minigame! For some reason in that minigame, all the models are edited to be more low poly, with the messier verts, I know this as I have tried to rip from the game before using Ninjaripper, and thank you the script works like a charm!

image.thumb.png.84a6aea8b06949083033077b975754ad.png

Every character model in the game works with it perfectly, some even have T-Poses

image.png.9a77e7832fcbdc37e30b5fa8979aa854.pngimage.png.d13ed17860b45e82eb16d53553e33585.png

It's probably down to what animation frame is first (Which is a T-pose for these two) 

 

Link to comment
Share on other sites

  • 3 weeks later...
On 6/5/2024 at 9:30 PM, roocker666 said:

I remember some scripts to generate faces, Sparagas created these. I think are based on a function by Bigchillghost, I can't remember very well, lol.

Maybe these could help:

Generate-Faces last version.zip 1.99 kB · 4 downloads

Hi, I made this script. They were quickly made for private use (by private I mean, it has no explanation of what it does, and not that no one can use it).

So I updated it with an explanation of what it does and how to use it:
https://github.com/Sparagas/Triangle-Generator/tree/main

Feel free to use it if it helps.

  • Like 1
Link to comment
Share on other sites

Create an account or sign in to comment

You need to be a member in order to leave a comment

Create an account

Sign up for a new account in our community. It's easy!

Register a new account

Sign in

Already have an account? Sign in here.

Sign In Now
×
×
  • Create New...