Join also our Discord channel! Click here.

3D model reversing compilation

Post questions about game models here, or help out others!
User avatar
Posts: 2912
Joined: Fri Apr 20, 2012 9:24 am
Location: Nexus, searching for Jim Kirk
Has thanked: 743 times
Been thanked: 1498 times

Re: 3D model reversing compilation

Post by shakotay2 » Sun Mar 05, 2017 12:53 am

blackracer wrote:I decided to explore the noesis but I did not get to do one-stop solution for all model files ((
Seems you didn't even get the solution for loading one img file.
in def noepyCheckType(data):
if bs.readBytes(4).decode,
so (4) not (8)

why do you try to get VCount from address 0x0004?, NOESEEK_ABS)
VBytes = 36
VCount = bs.readUInt() // VBytes

Your reading the VBuf then IBuf, though IBuf comes first in wheel_rays_te37.img,
your reading short instead of float, you're reading triangles, though you used Strip with hex2obj,
guess you don't know what you're doing with that script, do you?

There's a basic tutorial from chrrox here: viewtopic.php?f=29&t=7760
Here's your modified script that does import the wheel only, counts set manually:

Code: Select all

from inc_noesis import *
import noesis
import rapi

def registerNoesisTypes():
    handle = noesis.register("TestScriptGame", ".img")
    noesis.setHandlerTypeCheck(handle, noepyCheckType)
    noesis.setHandlerLoadModel(handle, noepyLoadModel)
    return 1

def noepyCheckType(data):
   bs = NoeBitStream(data)
   if len(data) < 8:
      return 0
   if bs.readBytes(4).decode("ASCII").rstrip("\0") != NOEPY_HEADER:
      return 0
   return 1  

def noepyLoadModel(data, mdlList):
    ctx = rapi.rpgCreateContext()
    bs = NoeBitStream(data)
    fileName = rapi.getLocalFileName(rapi.getInputName()).rstrip(".img")
    print(fileName), NOESEEK_ABS)

    #FCount = bs.readUInt() // 2
    FCount = 513
    IBuf = bs.readBytes(FCount * 2), NOESEEK_ABS)
    VBytes = 36            
    #VCount = bs.readUInt() // VBytes
    VCount = 200
    VBuf = bs.readBytes(VCount * VBytes)
    #skip = bs.readBytes(8)

    rapi.rpgBindPositionBufferOfs(VBuf, noesis.RPGEODATA_FLOAT, VBytes, 0)   
    rapi.rpgBindUV1BufferOfs(VBuf, noesis.RPGEODATA_SHORT, VBytes, 28)   
    rapi.rpgCommitTriangles(IBuf, noesis.RPGEODATA_USHORT, FCount, noesis.RPGEO_TRIANGLE_STRIP, 1) #SHORT for word indices
    mdl = rapi.rpgConstructModel()                                                          
    return 1
Here I made a template, you can help me fix it to read model with names of the textures.
Getting textures is the next step. Try to get the models first.
Bigchillghost, Reverse Engineering a Game Model: viewtopic.php?f=29&t=17889
extracting simple models: viewtopic.php?f=29&t=10894
"You quoted the whole thing, what a mess."

User avatar
Posts: 51
Joined: Sat Jun 27, 2015 1:20 pm
Has thanked: 30 times
Been thanked: 49 times

Re: 3D model reversing compilation

Post by blackracer » Sun Mar 05, 2017 1:11 am

Yes, I really do not quite understand, thank you very much for the modification of the script in the first place I need to understand the structure of hex.
Next step I will try to read all meshes in this format.
I have been studying this tutorial :)

Posts: 3
Joined: Sat Sep 22, 2018 2:10 am

Re: 3D model reversing compilation

Post by zaphiri » Wed Sep 26, 2018 9:10 pm

Would you convert the ''obj ou 3d'' in ''SKI'' ?

Posts: 47
Joined: Thu Sep 20, 2018 9:28 pm
Has thanked: 10 times
Been thanked: 2 times

Re: 3D model reversing compilation

Post by usabdt » Thu Dec 06, 2018 10:12 am

finale00 wrote:3D model formats index
3D model guide

Now something is coming together.
finale00 wrote:We should probably add something similar to the definitive guide to exploring file formats, for 3D models.
The layout would be similar, in particular listing some common patterns that are usually observed. It would then diverge into different "types" of formats, as I would imagine models for console games would be much different from models for PC games for various reasons.

Though, I'm not sure if people actually check the wiki :|
HI, finale00
Do you know what software does this? viewtopic.php?f=16&t=8347 I need to get the file in. dat I do not know english. I tried reversing but it was too hard. If you know let me know. Thanks you

Posts: 21
Joined: Sun Apr 28, 2019 1:15 pm
Has thanked: 3 times
Been thanked: 6 times

Re: 3D model reversing compilation

Post by andy97 » Sun Apr 28, 2019 2:06 pm

Hi, I'm a newbie in parsing 3d model. I'm learning to write my own Noesis script. I have a question:

Based on my knowledge in using shakotay's hex2obj, I know that we have 3 ways to get the vertex count:
- It is defined in the data
- Divide vertex block length by 1-vertex stride length
- Max face index

Unfortunately, the files that I'm working on don't have defined vertex count inside itself but in another file. As far as I know, Noesis scripts must have VCount and FCount. Since I'm a newbie, I just want to work with a single format only. Is there any solution for this case? Thank you :D :D

P/s: Also, regarding to the files that have vertex count defined in them, how can we recognize "vertex count" exactly?

Post Reply