Page 96 of 123

Re: Señor Casaroja's Noesis

Posted: Thu Jun 27, 2013 8:26 pm
by howfie
yo rich, got a question for ya...

I coded my own PS3 index buffer decompression routine based on docs from the SDK and help from chris, but it still doesn't generate the same indices that you get. It doesn't crash and it generates valid indices, but I think something is wrong with my two-bit stream processing. I think I am doing something out of order... is the processing like so?

two bytes, 8 triangles, 2-bits per triangle

is order
11010010-10101001 -> 11 01 00 10 10 10 10 01 (bits right-to-left, bytes left-to-right)

or

11010010-10101001 -> 10 00 01 11 01 10 10 10 (bits left-to-right, bytes left-to-right)

or something else? This is my code, processing the two-bit stream is the last step, coming after processing deltas and the one-bit stream (the incremental indices step).

Code: Select all

 // delta processing crap
 // ...

 // one-bit processing crap
 // ...

 // process two-bit data stream
 std::deque<uint32> idxbuffer;
 uint08* ptr = reinterpret_cast<uint08*>(&bs[(8 + onebits_bytes)]);
 uint32 new_index = 0;
 for(uint32 i = 0; i < twobits_bytes; i++)
    {
     uint08 b[4];
     b[0] = ((ptr[i] >> 6));
     b[1] = ((ptr[i] & 0x30) >> 4);
     b[2] = ((ptr[i] & 0x0C) >> 2);
     b[3] = ((ptr[i] & 0x03));

     for(uint32 j = 0; j < 4; j++)
        {
         uint32 size = idxbuffer.size();
         if(b[j] == 0) {
            uint32 i0 = idxbuffer[size - 3];
            uint32 i1 = idxbuffer[size - 2];
            idxbuffer.push_back(i1);
            idxbuffer.push_back(i0);
            idxbuffer.push_back(newlist[new_index++]);
           }
         else if(b[j] == 1) {
            uint32 i0 = idxbuffer[size - 3];
            uint32 i2 = idxbuffer[size - 1];
            idxbuffer.push_back(i0);
            idxbuffer.push_back(i2);
            idxbuffer.push_back(newlist[new_index++]);
           }
         else if(b[j] == 2) {
            uint32 i1 = idxbuffer[size - 2];
            uint32 i2 = idxbuffer[size - 1];
            idxbuffer.push_back(i2);
            idxbuffer.push_back(i1);
            idxbuffer.push_back(newlist[new_index++]);
           }
         else {
            idxbuffer.push_back(newlist[new_index++]);
            idxbuffer.push_back(newlist[new_index++]);
            idxbuffer.push_back(newlist[new_index++]);
           }

         std::cout << (idxbuffer[idxbuffer.size() - 3] + 1) << " ";
         std::cout << (idxbuffer[idxbuffer.size() - 2] + 1) << " ";
         std::cout << (idxbuffer[idxbuffer.size() - 1] + 1) << std::endl;
        }
    }
thx

Re: Señor Casaroja's Noesis

Posted: Mon Jul 01, 2013 4:55 am
by MrAdults
Sorry, Edge stuff is a work-related conflict of interest for me now, so no comment.

Re: Señor Casaroja's Noesis

Posted: Mon Jul 01, 2013 7:31 pm
by howfie
lol, no problem rich hahahahaha i will eventually figure it out.

Re: Señor Casaroja's Noesis

Posted: Wed Jul 03, 2013 1:17 pm
by Demonsangel
I know there is a binary find tool, but I'm not sure if it actually works from a Noesis script.
Bascally I'm trying to find certain byte groups within a NoeBitStream() and get their position.

I'm currently using

Code: Select all

def SearchChunk(self,byteArray,readFlag=1):
        found = 0
        byte1 = int(byteArray[:2],16)
        type2 = len(byteArray[2:])//2
        if type2 == 2:
            byte2 = int(byteArray[4:]+byteArray[2:4],16)
        else:byte2 = int(byteArray[2:],16)
        while found!=1:
            byte = self.data.readByte()
            if byte == byte1:
                if type2 == 2:flag = self.data.readShort()
                else:flag = self.data.readByte()
                if flag ==byte2:found=1
        if readFlag == 0: self.data.seek(-3,1)
        return
to find chunk headers and

Code: Select all

def findGEOM(self):
        fName=rapi.getInputName().split('\\')[-1]
        dirPath = rapi.getDirForFilePath(rapi.getInputName())
        f = open(dirPath + "/" + fName,'rb')
        file = f.read()
        f.close()
        offset = file.find(b"GEOM")
        self.data.seek(offset)
to find strings

But this isn't really efficient or failsafe. Just wondering what your input on this was.


EDIT:
I changed my string method to the following, which I guess is as good as any other.

Code: Select all

o3d = rapi.loadPairedFileOptional("Skeleton File","o3d")
offset = o3d.find(name.encode('utf-8'))

Re: Señor Casaroja's Noesis

Posted: Thu Jul 04, 2013 1:59 pm
by MrAdults
I couldn't tell you what the absolute best Python method is for finding data in a bytearray, cause I'm not all that well-versed in Python myself. But I bet it's a question that's been addressed on stackoverflow.com if you can manage to figure out the right thing to search for.

Re: Señor Casaroja's Noesis

Posted: Fri Jul 05, 2013 10:32 am
by Alsair
Would be cool if Noesis in the future adds support for model creation and modification, what do ya say MrAdults, is it part of your plans?

Re: Señor Casaroja's Noesis

Posted: Fri Jul 12, 2013 1:37 am
by MrAdults
Sorry for disappearing for a week again. My life is hell and stress and chaos.

I don't have any plans to really expand the visual editing capabilities of Noesis. It's meant more for processing of an automated nature. But you can build all of those things into it via the plugin framework, so anyone is free to if they really want to. There's a triangle picker plugin up on the official Noesis plugins repo that demonstrates how you'd go about something like that. All it does is let you select triangles of a(n optionally animated) model and export the selection as another model, but you could do anything you want there from assorted modeling functions to a full-blown topology-based modeling tool.

You can also override the rendering completely (that particular plugin just demonstrates rendering on top of the existing scene) and you have all the data you need to replace the base model renderer. So there's that too.

Re: Señor Casaroja's Noesis

Posted: Sat Jul 13, 2013 7:13 pm
by Justdragos
Hy guys! Is there any way to export maps or animation from dragon ball raging blast?
I am willing to donate 15 euro to the person who cand help me do that:D.

Re: Señor Casaroja's Noesis

Posted: Mon Jul 29, 2013 7:45 pm
by kilian277
Any change of getting multiexport , like that you can select multiple items in the listview and then export them all together ?

Thanks

Re: Señor Casaroja's Noesis

Posted: Sun Aug 04, 2013 9:38 am
by kawayide
Wrote an export plugin. When exporting a .GMO which has external texture file, texture count always be zero (i.e. pmdl->matData->numTextures zero). also can't get texture's filenames. Help plz.

(the obj dae exporters can find the texture filename)

Re: Señor Casaroja's Noesis

Posted: Sun Aug 04, 2013 5:25 pm
by MrAdults
That's because there are no textures. Get the reference name from the material, and manually load up external textures as seen in the Quake 2 MD2 exporter code.

Re: Señor Casaroja's Noesis

Posted: Mon Aug 05, 2013 5:21 am
by MrAdults
Was it you that submitted a Noesis GMO crash report? Your bone reference index is garbage in whatever broken model you tried to load, if so.

It's easier for me to find crashes like that in the loader if you simply send me your data.

Re: Señor Casaroja's Noesis

Posted: Mon Aug 05, 2013 11:59 am
by kawayide
MrAdults wrote:Was it you that submitted a Noesis GMO crash report? Your bone reference index is garbage in whatever broken model you tried to load, if so.

It's easier for me to find crashes like that in the loader if you simply send me your data.
I remember noesis didn't crashed, crashes I can recall are caused by my noesis plugin.

(If so, tell me file name, I can get I have it or not)

Re: Señor Casaroja's Noesis

Posted: Sun Aug 11, 2013 6:49 am
by MrAdults
It was just some random file on someone's desktop. Probably incorrectly-extracted garbage or something.

Re: Señor Casaroja's Noesis

Posted: Wed Aug 14, 2013 6:37 pm
by itoikenza
MrAdults wrote:Select a bone in the data viewer, then over the model preview, hold shift+left mouse and move the mouse around. It will modify the selected bone's rotation offset. As for individual frame export from the in-preview bone transforms, maybe at some point.
MrAdults is this broken "hold shift+left mouse" ? cause i tried with a paine.fbx and no dice...

oh and i haven't forgotten about helping you get your hands on a Qumarion. they just have been slow on allowing imports to addresses outside of japan, plus i don't have the funds yet...