06-14-2023, 11:27 AM
No, they're not rigged, nor have I been able to crack the compressed formats. Still ripping from a capture...
If you're still here, this is what you will need:
* A Windows PC (or a Mac with Bootcamp). RenderDoc doesn't work on MacOS as of writing this, unfortunately.
* RenderDoc - https://renderdoc.org/ - I used version 1.27 for this.
* Xemu - https://github.com/xemu-project/xemu - I used version 0.7.24.
* Blender 2.8 - https://www.blender.org/download/releases/2-83/ - The python script below ONLY works with Blender 2.8 due to internal code changes in Blender, but I'm sure it is possible to port it to 2.79b and 3.x if necessary.
* This CSV importer - https://drive.google.com/file/d/14mbsxFP...sp=sharing (credit to sbobovyc and Medstar117 for the original!)
At the time of writing this there aren't many details on how to get models out of this game. In fact, the method I'm currently using uberk2's method of ripping (https://web.archive.org/web/202308121231...php?t=8505), but outside of mentioning RenderDoc, no instructions were given. I gave it a go and was able to get better results when importing, so I wanted to share how I did it.
From the tools shown it's fairly obvious that we will be ripping from a snapshot of live gameplay. Unfortunately, this means you will have to either play through to the point that the model you want is onscreen, or get a save state, AND that the models won't have rigs. But fortunately, this means you can rip models any model you can see (and luckily they're T-posed).
=== Demonstration ===
Start by launching RenderDoc. Open the Launch Application tab and launch xemu from RenderDoc.
These are the settings I use:
Now either play through the game or load a snapshot to get the model you want onscreen. Once it's on screen, take some snapshots with RenderDoc (more than one; just one tends to miss either the model you want or some UV data).
Try to take multiple snapshots with the camera as close to the model as possible, as the model you want may not appear under a glDrawElements call first try.
After you've taken snapshots, your captures should load in RenderDoc. Make sure you have free space, as captures are often 100+MB each.
Once you've loaded your save state, you want to look at the Event Browser on the left. You're looking for draw calls (mostly glDrawElements) as these are the meshes you want to rip. Most models are drawn with multiple of these.
I decided to randomly pick a model from the intro to rip. The intro has a lot of models loaded at once so I have a lot of geometry to go through, so I decided to look for a texture first. Click on the Texture viewer tab and open the Texture list in the Actions tab with the three paper. You can skim through the textures quickly by using the Go buttons (scroll to the right inside the texture list).
Conker's crown texture is Texture 82430 for me.
You can search for assets by either texture first or mesh first.
If you find a texture first, you can double click the texture name to see what uses it: If the lists are empty, the mesh didn't get captured, but if it did, you can open the mesh in the Mesh Viewer.
If you find the mesh first, you can see what textures it's using the API Inspector below the Event Browser, and double click on the name to be directed to the texture in the Texture Viewer. Then you can click on the save button in the Actions menu to save a texture to your PC.
You can also use the Outputs window on the side to check if the mesh you want has been drawn yet. If it's there you want to look above the draw call you're on, otherwise move downwards. This doesn't indicate the draw call for the object you want happened in that capture, though.
(Note that Conker doesn't have his crown.)
It turns out the crown didn't get captured in the snapshot I took. Since I didn't want to go through more snapshots, so I decided to rip the pitchfork guy who's just slightly offscreen instead.
Go to the Mesh Viewer tab and click the save icon, then Export VS Input to CSV (Make sure you export the Input!). Don't forget to get the textures you need for the mesh as well (API Inspector -> glBindTexture(GL_TEXTURE_2D, SomeTexture))
Now open Blender 2.8 and use the plugin to open the CSV (Install it like any other plugin; go to Edit -> Preferences -> Addons -> Install... -> Pick import_csv.py. Then you can Import .csv from the file menu.) Most meshes may be very large, so you have to scale them down to see them. Also, the scale of the UVs varies as well, so you may have to scale that as well (If you scale around the 2D Cursor, it should match up: Often in ratios of 2, i.e. 0.5, 0.25, 2, 4)
Then just apply the texture and you should have a finished model.
And there he is in Blender. This mesh is missing the eyes, so one would have to go back to find another draw call that drew them. Fortunately if you save the renderdoc snapshot, you can come back to it later without having to have all the background programs running.
=== Other notes about taking RenderDoc captures ===
* Don't do so when xemu's snapshot menu is open, or when the gameplay is paused with the emulator pause function. The game appears to just stop rendering and all you will get is a few quads that draw the emulator UI.
* It seems that if you can get the camera closer to a model, that model is most likely to be ripped (Based on only a few dozen captures! Might actually just be pure luck). Removing models that you don't want to rip (enemies, extra health) can also help.
* From experience, a good amount of your snapshots during regular gameplay will simply have just one or two glDrawElements(400) (a mesh with 400 vertices). This is likely Conker's tail.
* Before exporting a CSV, make sure to select a row in the VS Input. The VS Output will import as a flat disfigured plane which isn't very useful on its own.
=== Final notes ===
* Sometimes the UV coordinates either don't appear or don't appear in their usual spot. If this happens you can read the output csv and modify the plug-in to read the correct columns. The line you want to change is
Change 14 and 15 to the correct columns (the first column counts as 0).
* Normals don't import properly despite the plugin description, and crash blender when edited. What you can do to fix it is export as .dae, re-import that dae, and then edit the normals with Alt + N. Re-importing appears to fix crashing so you can edit them cleanly.
That should be it. It's a bit of a process, but it yeilds OK results so far. Thanks for reading. :o)
If you're still here, this is what you will need:
* A Windows PC (or a Mac with Bootcamp). RenderDoc doesn't work on MacOS as of writing this, unfortunately.
* RenderDoc - https://renderdoc.org/ - I used version 1.27 for this.
* Xemu - https://github.com/xemu-project/xemu - I used version 0.7.24.
* Blender 2.8 - https://www.blender.org/download/releases/2-83/ - The python script below ONLY works with Blender 2.8 due to internal code changes in Blender, but I'm sure it is possible to port it to 2.79b and 3.x if necessary.
* This CSV importer - https://drive.google.com/file/d/14mbsxFP...sp=sharing (credit to sbobovyc and Medstar117 for the original!)
At the time of writing this there aren't many details on how to get models out of this game. In fact, the method I'm currently using uberk2's method of ripping (https://web.archive.org/web/202308121231...php?t=8505), but outside of mentioning RenderDoc, no instructions were given. I gave it a go and was able to get better results when importing, so I wanted to share how I did it.
From the tools shown it's fairly obvious that we will be ripping from a snapshot of live gameplay. Unfortunately, this means you will have to either play through to the point that the model you want is onscreen, or get a save state, AND that the models won't have rigs. But fortunately, this means you can rip models any model you can see (and luckily they're T-posed).
=== Demonstration ===
Start by launching RenderDoc. Open the Launch Application tab and launch xemu from RenderDoc.
These are the settings I use:
Now either play through the game or load a snapshot to get the model you want onscreen. Once it's on screen, take some snapshots with RenderDoc (more than one; just one tends to miss either the model you want or some UV data).
Try to take multiple snapshots with the camera as close to the model as possible, as the model you want may not appear under a glDrawElements call first try.
After you've taken snapshots, your captures should load in RenderDoc. Make sure you have free space, as captures are often 100+MB each.
Once you've loaded your save state, you want to look at the Event Browser on the left. You're looking for draw calls (mostly glDrawElements) as these are the meshes you want to rip. Most models are drawn with multiple of these.
I decided to randomly pick a model from the intro to rip. The intro has a lot of models loaded at once so I have a lot of geometry to go through, so I decided to look for a texture first. Click on the Texture viewer tab and open the Texture list in the Actions tab with the three paper. You can skim through the textures quickly by using the Go buttons (scroll to the right inside the texture list).
Conker's crown texture is Texture 82430 for me.
You can search for assets by either texture first or mesh first.
If you find a texture first, you can double click the texture name to see what uses it: If the lists are empty, the mesh didn't get captured, but if it did, you can open the mesh in the Mesh Viewer.
If you find the mesh first, you can see what textures it's using the API Inspector below the Event Browser, and double click on the name to be directed to the texture in the Texture Viewer. Then you can click on the save button in the Actions menu to save a texture to your PC.
You can also use the Outputs window on the side to check if the mesh you want has been drawn yet. If it's there you want to look above the draw call you're on, otherwise move downwards. This doesn't indicate the draw call for the object you want happened in that capture, though.
(Note that Conker doesn't have his crown.)
It turns out the crown didn't get captured in the snapshot I took. Since I didn't want to go through more snapshots, so I decided to rip the pitchfork guy who's just slightly offscreen instead.
Go to the Mesh Viewer tab and click the save icon, then Export VS Input to CSV (Make sure you export the Input!). Don't forget to get the textures you need for the mesh as well (API Inspector -> glBindTexture(GL_TEXTURE_2D, SomeTexture))
Now open Blender 2.8 and use the plugin to open the CSV (Install it like any other plugin; go to Edit -> Preferences -> Addons -> Install... -> Pick import_csv.py. Then you can Import .csv from the file menu.) Most meshes may be very large, so you have to scale them down to see them. Also, the scale of the UVs varies as well, so you may have to scale that as well (If you scale around the 2D Cursor, it should match up: Often in ratios of 2, i.e. 0.5, 0.25, 2, 4)
Then just apply the texture and you should have a finished model.
And there he is in Blender. This mesh is missing the eyes, so one would have to go back to find another draw call that drew them. Fortunately if you save the renderdoc snapshot, you can come back to it later without having to have all the background programs running.
=== Other notes about taking RenderDoc captures ===
* Don't do so when xemu's snapshot menu is open, or when the gameplay is paused with the emulator pause function. The game appears to just stop rendering and all you will get is a few quads that draw the emulator UI.
* It seems that if you can get the camera closer to a model, that model is most likely to be ripped (Based on only a few dozen captures! Might actually just be pure luck). Removing models that you don't want to rip (enemies, extra health) can also help.
* From experience, a good amount of your snapshots during regular gameplay will simply have just one or two glDrawElements(400) (a mesh with 400 vertices). This is likely Conker's tail.
* Before exporting a CSV, make sure to select a row in the VS Input. The VS Output will import as a flat disfigured plane which isn't very useful on its own.
=== Final notes ===
* Sometimes the UV coordinates either don't appear or don't appear in their usual spot. If this happens you can read the output csv and modify the plug-in to read the correct columns. The line you want to change is
Code:
uv_dict[vertex_index] = (float(row[14])/float(maxim), (float(row[15]))/float(maxim))+tuple()
* Normals don't import properly despite the plugin description, and crash blender when edited. What you can do to fix it is export as .dae, re-import that dae, and then edit the normals with Alt + N. Re-importing appears to fix crashing so you can edit them cleanly.
That should be it. It's a bit of a process, but it yeilds OK results so far. Thanks for reading. :o)