READ THE RULES: Click here

Follow us on Facebook: https://www.facebook.com/xentax/ :)

3D model reversing compilation

Post questions about game models here, or help out others!
User avatar
shakotay2
MEGAVETERAN
MEGAVETERAN
Posts: 2666
Joined: Fri Apr 20, 2012 9:24 am
Location: Nexus, searching for Jim Kirk
Has thanked: 662 times
Been thanked: 1366 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):
it's
if bs.readBytes(4).decode,
so (4) not (8)

why do you try to get VCount from address 0x0004?
bs.seek(0x4, 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)
    #noesis.logPopup()
    return 1

NOEPY_HEADER = "IMGE"
   
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")
    rapi.rpgSetName(fileName)
    print(fileName)
    bs.seek(0xFE3, NOESEEK_ABS)

    #FCount = bs.readUInt() // 2
    FCount = 513
    IBuf = bs.readBytes(FCount * 2) 

    bs.seek(0x20C0, 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()                                                          
    mdlList.append(mdl)
    rapi.rpgClearBufferBinds()
    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
Make_H2O-ForzaHor3-jm9.zip
"You quoted the whole thing, what a mess."

User avatar
blackracer
advanced
Posts: 51
Joined: Sat Jun 27, 2015 1:20 pm
Has thanked: 30 times
Been thanked: 47 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 :)

zaphiri
ultra-n00b
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'' ?

usabdt
advanced
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

andy97
n00b
Posts: 12
Joined: Sun Apr 28, 2019 1:15 pm
Has thanked: 3 times
Been thanked: 2 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?

veer31
ultra-n00b
Posts: 1
Joined: Thu May 16, 2019 5:10 am
Contact:

Re: 3D model reversing compilation

Post by veer31 » Thu May 16, 2019 7:27 am

Excellent thread ..!!!

Amoli579
ultra-n00b
Posts: 1
Joined: Thu Jul 18, 2019 7:32 am
Contact:

Re: 3D model reversing compilation

Post by Amoli579 » Thu Jul 18, 2019 7:37 am

I agree that was indeed a great thread.

Post Reply