• Welcome to Smashboards, the world's largest Super Smash Brothers community! Over 250,000 Smash Bros. fans from around the world have come to discuss these great games in over 19 million posts!

    You are currently viewing our boards as a visitor. Click here to sign up right now and start on your path in the Smash community!

Universal Model Converter - Side Development Thread

left or right? (a 20x20 toggle at the top of the window)

  • Left (under the window icon)

    Votes: 23 53.5%
  • Right (under the X button)

    Votes: 20 46.5%

  • Total voters
    43
  • Poll closed .

Tcll

Smash Lord
Joined
Jul 10, 2010
Messages
1,780
Location
The Gates of Darkness
NNID
Tcll5850
good news :)
UMC's transformer is complete ;D
Code:
def __Transform():
    if __UTData:
        print 'Transforming data...'
        for SID in __UTData:
            for OID in __UTData[SID]:
                #associate an influence to every
                I,M = {None:None},[None]*len(Libs[3][OID][3][3][0])

                if Libs[3][OID][4] not in ('',None):
                    PO = Libs[3][Libs[3][OID][4]]
                    if PO[0]=="_Rig": Bs = Libs[3][OID][3][3]
                    else: print '<object %i: "%s"> parent is not a rig object.'%(OID,Libs[3][OID][1]); continue
                else: print '<object %i: "%s"> cannot find parent.'%(OID,Libs[3][OID][1]); continue

                WVs = Libs[3][OID][3][3][4]
                for prim in Libs[3][OID][3][3][5]:
                    for VID, NBTs, Cs, UVs, Ws, Ms in prim:
                        if M[VID] != None: continue # influence has already been calculated
                        Ii = len(i); M[VID] = Ii; I[Ii] = [[0.0,0.0,0.0,0.0],[0.0,0.0,0.0,0.0],[0.0,0.0,0.0,0.0],[0.0,0.0,0.0,0.0]]
                        for BID,WID in Ws:
                            tempmtx = MtxMultiply(*Bs[BID][4:6]) # world-transform matrix
                            for r in range(4):
                                for c in range(4):
                                    I[Ii][r][c]+=tempmtx[r][c]*WVs[WID]
                
                Libs[3][OID][3][3][0] = [ __TransV(Libs[3][OID][3][3][0][i],I[M[i]]) for i in __UTData[SID][OID][0] ]
                Libs[3][OID][3][3][1][0] = [ __TransN(Libs[3][OID][3][3][1][0][i],I[M[i]]) for i in __UTData[SID][OID][1][0] ]
                
        __UTData = {} # clear after finishing to save memory
but before this can actually do it's job, the verifier needs to fill in the blanks...

the transformer works off the bone's bind and inverse bind matrices, but:
- Sm4sh only supplies the LRS (verifier needs to build a bind and inverse matrix)
- Melee only supplies the LRS and inverse. (verifier needs to build the bind)

the verifier isn't yet built with this (it's been needed for a while, but I've been pre-occupied with other aspects of UMC).
so yea, this'll cause a bit more delay because it's needed for the UT functions.

this functionality has been a requirement of UMC since the rebuild (3.0) and (now that it's possible) must be implemented before I can release.

EDIT:
fun fact:
the transformer is actually a simplified version of my HAL_DAT transformer. ;)
 
Last edited:

Tcll

Smash Lord
Joined
Jul 10, 2010
Messages
1,780
Location
The Gates of Darkness
NNID
Tcll5850
just so you guys know I havn't quit ;)
here's my VERY first working test of my transformer: (no transformations applied)

importing FitPikachu00.mdl0 100%
Converting from import format...
importing Pikachu_eyes.00.png 100%
importing Pikachu_eyesYellow.00.png 100%
importing Pikachu_main.png 100%
ERROR: ugeSetImageData() image 'metal00' not found.
ACTION: Skipping
Verifying data...
Transforming data...
<object 1: "0"> parent is not a rig object.
<object 2: "0"> parent is not a rig object.
<object 3: "0"> parent is not a rig object.
<object 4: "0"> parent is not a rig object.
<object 5: "0"> parent is not a rig object.
Finalizing...
Updating Viewer

major coughing:


not exactly sure what's going on (aside from the obvious parent issue), but it involves the transformer...

EDIT:
just found out my format isn't supplying any weights...
I fixed the issue above, but the transformation is resulting in nothing but zero-influence matrices...
looked into it and every facepoint has no weight IDs and the weight influences are blank lists...
so yea, it still looks untransformed, but at least the transformer is working as it's supposed to now :)

turns out my old MDL0 script wasn't supplying any weights.

I'm doing testing with MDL0 files because they supply everything needed for transformation...
I'll get to Melee and sm4sh when the verifier can calculate everything needed. ;)

EDIT2:
so I tried playing with identity matrices instead of zero matrices...
that was a stupid idea:


my transformer IS working, but things aren't quite right... I think the order everything's applied might be affecting it...
here's a test from just before the test result above:

[-0.05074400082230568, 0.14400699734687805, 0.4003410041332245] >>> [-0.05074393791718319, 0.14400698442335938, 0.40034096580240097]

^that's a vert, before >>> after transformation...
you can see just how tiny the transformations are >_<

so yea, the model looks no different from the untransformed model, but there's just very tiny differences...

EDIT3:
well...
this happened:


obtw, ignore the bones being displayed... that's a separate thing, and I don't have my verifier managing that yet.
(the display there is controlled by the bone's LRS, where I'm working with the bind and inv matrices for the model)

once I redo the display, I'll map the bones to the bind matrix hierarchy instead of the LRS. ;)
(truthfully the LRS isn't really needed, as the only major thing we need is the bind matrix)
^ the inverse is calculated from an inversed world multiplied bind matrix, though it saves GPU to have it referenced.

EDIT4:
oh hello visual bug, where did you come from >.>
(the '...' at the upper left)
 
Last edited:

Tcll

Smash Lord
Joined
Jul 10, 2010
Messages
1,780
Location
The Gates of Darkness
NNID
Tcll5850
finally, some progress!
UMC's UT-data transformer is coming along :)

I'm still missing a few steps, but it'll catch up :)

EDIT:
take note in the script selection you see "MDL0 2"
this is only a test script which uses the UT functions, rather than the traditional PT functions I've been using.
once this is complete, I'll replace the MDL0 script with MDL0 2 (renaming it to fit the old)

EDIT2:
OMFG!
weight groups...
that's the problem...

what I'm doing is just dumping all the weights into a facepoint rather than dumping groups of weights into it.
this is what's causing the influence to cough and cause the malformed model above.

time to modify SES1.1
 
Last edited:

Tcll

Smash Lord
Joined
Jul 10, 2010
Messages
1,780
Location
The Gates of Darkness
NNID
Tcll5850
erg...
it's beginning to enter that realm where I need my tools in order to build my tools.
so development on UMC might be a bit slow...

I think this issue might just be with my MDL0 script, which I'll need UMC_SIDE to more-easily analyze an MDL0 file with my script.
unfortunately, I can't implement SIDE or distribute it with 3.0a as 3.0a does not have that kind of featurability (this was one reason for the rebuild)

so yea, I'll be working on rebuilding SIDE to help me figure out this issue.

EDIT:
just wanted to note, I may have found a lead...
it's the very reason I can't import pachirisu:

Traceback (most recent call last):
File "C:\Users\Tcll\Copy\UMC_v3.0a\data\VIEWER.py", line 705, in _ImportModel
script.ugeImportModel(filepath.split('.')[-1].lower(),None)
File "scripts\MDL02.py", line 557, in ugeImportModel
XF_VtxMtxCache[XFAddr/12]=_Definitions['NodeMix'][Link] #[ [BoneID, Weight],
[] ]

KeyError: 2


XF_VtxMtxCache is what's used to set vmtcs which is used in a for loop calling ugeSetWeight() while supplying the values.

I'mma have to play around with this and look into Brbx's srcmore before I have this thing working as needed

this isn't the first time something done completely wrong has for some reason worked properly :p
 
Last edited:

Tcll

Smash Lord
Joined
Jul 10, 2010
Messages
1,780
Location
The Gates of Darkness
NNID
Tcll5850
just so everyone knows, I'm working on SIDE because I need an advanced hex viewer in order to fix this issue.
(I'd love to release SIDE with 3.0a, but the 3.0 backend is far from complete, and is needed for SIDE to reference the functions from)
^ I won't mind releasing SIDE when I finish the data interfaces and use dummy functions for the formatting functions to the 3.0 backend .

ultimately though what I need to do to 3.0a is work on the verifier to fix the rest of my scripts and add the final support to the UT functions.
 

Tcll

Smash Lord
Joined
Jul 10, 2010
Messages
1,780
Location
The Gates of Darkness
NNID
Tcll5850
tackling a bunch of small things (with Revel8n's help) :)

got a few things working that were causing loads of issues:



^can't believe how high-poly samus is

anyways revel8n added CI# support, so a few other things work now :)

though some things are still borked:



also added some extra support with revel8n's prodding :p

^ texture wrapping works now for models that need it, but the implemented method is just as complex as GL's method (it's basically a copy).

ugeSetTexParam( Target, Name, Param )

it'll most likely be deprecated after a few major updates... it's only meant to get things working for now.
(just because it'll be deprecated doesn't mean it'll be removed)

I personally don't like this method and believe the thing could be majorly simplified for noobs. ;)

all of these little things have been meant to be added by the release, but I couldn't do everything alone.
in fact, all of this stuff overwhelms me to the point where simply looking at it now gives me a major headache and greatly slows me down...
a big thanks goes to Revel8n for his help! :)

hopefully I can get back on track and have this thing ready soon ;)
 
Last edited:

Tcll

Smash Lord
Joined
Jul 10, 2010
Messages
1,780
Location
The Gates of Darkness
NNID
Tcll5850
thanks to revel8n, I can't believe I never spotted this issue.
I feel like a total dunce now.
when reading the image data, I never added 32 to the data pointers for both the image and pallet data.

ever since that was fixed, take a look at the results! =D









As much as I'd love to release this, there's still things that are unfinished which would hinder alot of scripts from being written properly.
I can't even export anything yet as I have no good format supported.
I'm working on stuff though, and thanks to revel8n, he's making things alot easier and less overwhelming for me. :)

I promise this thing will work properly when released, just please be patient, I'm only a noob working on this.
it may surprize you, but I can't read literal math beyond pre-algebra.
I'd failed pre-algebra 3 times because I couldn't keep up with my work, but what work I did get finished was done 100% correctly.
so yea, I never took geometry or that... I havn't even been to college yet as I'd put myself in some serious debt I'd never be able to pull myself out of.

another thing you may not know, my reason for falling behind on my work at school is the very reason I can't get a job.
I collect SSI for my autism... my autism, while it's a hinderance, is also a gift, and it's the reason I've been able to see the logic to get UMC this far.
I couldn't have done it though w/o the help from Ian Mallet who's been teaching me everything I know about OpenGL, Gribouillis and PyTony who've been helping me perfect my methods with python, and even ImiginaryZ who criticized my project and basically called it a stupid idea, saying blender26 had a better scripting format and such, helped me out with a few of the latest resources and techniques used with OpenGL that make it better than DirectX.
And of course, where would I be if I didn't mention my original inspirations Jahra!n, Milun, Revel8n, and a bunch of others who'd inspired me to develop something as big as UMC.
heck even the people I'd asked for help and wouldn't lend a hand, heck some who wouldn't even spit in my direction (not mentioning any names, you know who your are, and may gasoline be pored on your graves for the flames you'd put on me), but those people had sparked a fiery ambition to complete UMC and help others with whatever issues they run into while trying to learn a format, and NOT be like them, so I have that to thank them for.

I want to continue to learn as well as I want to get into game development.
heck I've talked about my Helix which is a gaming system and basically a PC that creates it's own internet rather than using the poorly structured, very slow, ugly, and highly controlled host to DNS setup we have now.
I'm designing my own modelling format that doesn't use vertices, and even working on AII which is meant to give in-game bots natural behavior.
the system's power comes from the fact it doesn't run on binary, but on analog (DARPA's ideas on analog computing are far from mine)
heck, the system doesn't even need a power cord as it gets it's power from a self-running generator.

oh and might I mention, my reputation applies here.
there is no control, everything the system can do is provided for free and runs for free ;)
it sounds fake, but I've been researching free energy since middle school.

anyways, I don't want to get too off topic... heh
I've got alot of plans for things most people wouldn't take the time to mess with.
and as you can see from my work on UMC, I have no intent to not pull them off. ;)

EDIT:
just wanted to mention, most of the player models import w/o any issues :)
the few I've tested that have issues are the wireframes and master hand.

I've organized all of the player models here:
https://copy.com/qdHjldQjlzypbJ6z
 
Last edited:

Tcll

Smash Lord
Joined
Jul 10, 2010
Messages
1,780
Location
The Gates of Darkness
NNID
Tcll5850
just to note, my HAL pathfinder might be getting an update:
Code:
    roots = { # { struct-size: [ struct-name, ... ] }
        12: ['matanim'],
        64: ['bone'],
        48: ['unk2','map_head'],
        }
    #NOTE: ^might get rid of this and have the pathfinder figure these out
    #(if the structure's function isn't _pass, it's a root structure)
this will put slightly more work on the pathfinder with 1 less array to have to add new structures to.
the only extra work the pathfinder has to do is que all the root structures of the given or near given size

fixed size standards are bad. (exactly what that code is)
unless the structure is known to be fixed, it's best to assume the worst. ;)

EDIT: yea, I updated it and currently automated building the roots var
Code:
        #TODO: (improvment) roots is not needed
        roots = {} # root structures are now automated
        for structname in structs:
            structsize, structfunc, structptrs = structs[structname]
            if structfunc!=_pass: # root structures always have their own function
                if structsize<=_size:
                    if _size in roots: roots[_size].append(structname)
                    else: roots[_size] = [structname]
I'll later be improving the pathfinder to test on 'structs' instead of 'roots'
 
Last edited:

Tcll

Smash Lord
Joined
Jul 10, 2010
Messages
1,780
Location
The Gates of Darkness
NNID
Tcll5850
putting some strain on my pathfinder and pushing it a bit:
Code:
importing GrTPc.dat 100% 
Converting from import format...
root 0 - 12/12 bytes - found matanim out of 1/1 root struct
root 1 - 2048 bytes - not found out of 5 root structs
root 2 - 65536 bytes - not found out of 5 root structs
root 3 - 32768 bytes - not found out of 5 root structs
root 4 - 8192 bytes - not found out of 5 root structs
root 5 - 512 bytes - not found out of 5 root structs
root 6 - 16384 bytes - not found out of 5 root structs
root 7 - 44 bytes - not found out of 2 root structs
root 8 - 220 bytes - not found out of 5 root structs
root 9 - 8 bytes - not found out of 0 root structs
root 10 - 48/48 bytes - found MapHeadA out of 2/4 root structs
root 11 - 12/12 bytes - found matanim out of 1/1 root struct
root 12 - 24 bytes - not found out of 1 root struct
root 13 - 4 bytes - not found out of 0 root structs
Verifying data...
Finalizing...
Updating Viewer
I knew I was gonna hate this part
@shuall I've gotten the structures up to the bones, but I'm getting no geometry.
good news is it IS working and accessing the bones.

I'll have to look into this...
thanks to it though I can't promise anything working by today :(
unless I get lucky... lol
 

Tcll

Smash Lord
Joined
Jul 10, 2010
Messages
1,780
Location
The Gates of Darkness
NNID
Tcll5850
@shuall: well your docs work :)

^NOTE: my template uses a more primitive and static pathfinder derived from my last method of my script's pathfinder.
even though this template shows some amazing progress, you'll have to wait about 4 days on a dual-core 2GHz compy for the template to load over 0x280 ( 640 ) pointers.
and that's verified using what I have now which is just the pathfinder with a few root structs used by the pathfinder.
I don't have any of the actual data structs defined yet which parse the data after the path has been found.

so yea, I don't plan to release this template after I finish it's development, but you're welcome to copy it and attempt to improve it:
https://copy.com/g9iNkU42kqH1tOJq
^I'm still working on it atm and plan to get it as functional as my script ;)

EDIT:
these are the smallest DAT files I use for testing:
- GrTSk.dat
- TyItemB.dat (same data as Pl****.dat files)

you'll find geometry data in both ;)

EDIT2: btw shuall, if you got skype, add me, and I'll add you to my dev-group :)
Tcll5850 (DarkPikachu)
if your skype name is obvious, you don't have to worry about telling me it's you ;)
otherwize I would think you're another bot trying to contact me :p
 
Last edited:

Tcll

Smash Lord
Joined
Jul 10, 2010
Messages
1,780
Location
The Gates of Darkness
NNID
Tcll5850
just made an update to the pathfinder to make the pointer verification easier to see:


still takes 5 minutes to load this small file each time I edit the template... erg >3<
 
Last edited:

Tcll

Smash Lord
Joined
Jul 10, 2010
Messages
1,780
Location
The Gates of Darkness
NNID
Tcll5850
well this seems to be the only other main stage that actually shows something:


however, most of the target stages seem to import near perfectly :)





what's funny is hardly anything relating to the stage data is supported XD
I've only partly supported the first 3 structures: MapHeadA, MapHeadB, and MapHeadJD, where the last 2 structures have a link to a bone structure. :p

that's literally the only support I have, and Shuall's docs list much more :3

GOD I can't wait to release this! =D

I can't yet though, I've still got alot to fix and update :(

EDIT:
not sure why this smiley is here and not after "link to a bone structure." -->
 
Last edited:

Milun

Smash Ace
Joined
Oct 29, 2009
Messages
516
Location
Australia
...Well holy crap. I've been using my shoddy model and face converter for years (the ones which require copying into .txt files), and you've actually gone and Brawl Boxed it.
 

Tcll

Smash Lord
Joined
Jul 10, 2010
Messages
1,780
Location
The Gates of Darkness
NNID
Tcll5850
haha, just wait for my next screenshots ;3
I think you might know what I plan on importing ;3

and really, what's on show is literally just what is right now, I really can't do much else than JUST import the model.

EDIT:
hey @ Milun Milun , you want me to add you to my dev group just cause?? :)

considering you've been around since the start of my hacking, you've more than earned it ;D
 
Last edited:

Tcll

Smash Lord
Joined
Jul 10, 2010
Messages
1,780
Location
The Gates of Darkness
NNID
Tcll5850
HexEdit finally decided to cooperate :)
but this file is so large it actually topped HexEdit's color buffer with just the pointers alone! D:

but since HexEdit managed to show me the root struct size, here's a thing I know everyone will like :D

^you need a life if you don't know this stage! XD

I'm getting pallet errors with it though:
img0003EE28 ([color]*16)[[0]]
img0003DEF4 ([color]*16)[[1]]
img0003E054 ([color]*16)[[5]]
img0003D214 ([color]*16)[[0]]
img0003D01C ([color]*16)[[0]]
img00038260 ([color]*16)[[1]]
img0003896C ([color]*16)[[0]]
img00038AAC ([color]*16)[[0]]
img00038ED4 ([color]*16)[[0]]
img0003A38C ([color]*16)[[0]]
img0003A4F8 ([color]*16)[[0]]
img0003A598 ([color]*16)[[0]]
img0003A6D8 ([color]*16)[[0]]
img0003A778 ([color]*16)[[0]]
img0003A844 ([color]*16)[[0]]


bad: img0003A844 ([color]*16)[[0]]
good: img0003A844 ([color]*16)[0]

basically [0] is the index instead of 0
something's not passing the index correctly and instead passing an intensity-formatted image:

pixel format:

index:
0

intensity:
[0]

intensity-alpha:
[0,0]

RGB:
[0,0,0]

RGBA:
[0,0,0,0]
 
Last edited:

Tcll

Smash Lord
Joined
Jul 10, 2010
Messages
1,780
Location
The Gates of Darkness
NNID
Tcll5850
here's me favorite DD Event level :)



imports currently w/o error :3

btw, all stages look better with lighting disabled...
perhaps that's the reason most stages are freakin huge in this game. :D
HAL really outdid themselves here :3
 
Last edited:

Kahnu

Banned via Warnings
Joined
Sep 14, 2014
Messages
1,273
Location
Miami FL
here's me favorite DD Event level :)



imports currently w/o error :3

btw, all stages look better with lighting disabled...
perhaps that's the reason most stages are freakin huge in this game. :D
HAL really outdid themselves here :3
KAR hype
 

Tcll

Smash Lord
Joined
Jul 10, 2010
Messages
1,780
Location
The Gates of Darkness
NNID
Tcll5850
just so you guys know, I know my images look promising, but trust me, they're really not :p
I'm still working on ALOT...

one of those things being the logic for bone verification... which is really painful:
Code:
def __VerifyBoneTree(BID,Data,children,wpbind,wptransform):
    BoneName, BDL, (l,r,s), Res, Bind, Inv_Bind, PBID, PrBID, CBID, NBID = Data
    
    default = __rr.Matrix44(DM) # default (same as identity)
    
    transform = __rr.Matrix44.from_scale(s) * __rr.Matrix44.from_eulers(r) * __rr.Matrix44.from_translation(l) # Local Transform
    bind = __rr.Matrix44(Bind) # Local Bind
    inverse = __rr.Matrix44(Inv_Bind) # World Inverse Bind
    
    wtransform = __rr.matrix44.multiply(transform,wptransform) # World Transform
    wbind = __rr.matrix44.multiply(bind,wpbind) # World Bind
    
    cinverse = __rr.matrix33.inverse(wbind)
    if (transform == bind).all():
        if (default == bind).all(): # possible problem (this may be the proper local location)
            if (default == inverse).all(): # this may not be the proper locations
                if (default != wpbind).all(): # assume identity to parent and recalculate the inverse bind.
                    inverse = __rr.matrix33.inverse(wpbind)
            else: # recalculate defaulted bind and LRS
                wbind = __rr.matrix33.inverse(inverse)
                pinverse = __rr.matrix33.inverse(wpbind)
                bind = wbind * pinverse
                transform = bind
                
        else: # make sure the bind matches the inverse
            if (default == inverse).all(): # this is obviousely wrong
                inverse = __rr.matrix33.inverse(wbind)
            elif (cinverse != inverse).all():
                inverse = cinverse
    
    elif (default == bind).all(): pass
    elif (default == transform).all(): pass
    else: # neither are default, but don't match
        pass
    
    # recalculate
    #wtmtx = __rr.matrix44.multiply(ltmtx,wptmtx)
    #wbmtx = __rr.matrix44.multiply(lbmtx,wpbmtx)
    
    if BID in children: # if this bone has any children
        for CID in children[BID]:
            __VerifyBoneTree(CID,Data,children,wbind,wtransform)
^ what this does is compare the LRS, Bind matrix, and Inverse matrix to make sure their locations match.

the current code here though only has the first part of the logic done...
what has yet to be done is:
- bind and transform matrices don't match and bind is defaulted
- bind and transform matrices don't match and transform is defaulted
- neither match nor are defaulted
 

Tcll

Smash Lord
Joined
Jul 10, 2010
Messages
1,780
Location
The Gates of Darkness
NNID
Tcll5850
just thought I'd post an update...
finally got around to fixing the CI4 texture issues mentioned in the last image of this stage (not specific about CI4 though)

^disabled lighting compared to the last image

hey I have hype myself with this as I plan on making a game with this! :3
once I can actually export it... =3=

you guys WILL like the game, but I won't say anything until I start development on it. ;)
that's not a demand, I already know cause my stuff is actually cool! ;D
 
Last edited:

Tcll

Smash Lord
Joined
Jul 10, 2010
Messages
1,780
Location
The Gates of Darkness
NNID
Tcll5850
btw, if anyone wants to start working on a script for UMC, add me on skype :)
Tcll5850 (DarkPikachu)
I'll add you to my group discussion and share my public repo with you ;)

just let me know you want to work on a script :p

this is currently left at models, images, and pallets only (you'll have to wait untill the next update for archive support),
I don't yet have any matrix functions, however that should change soon :)

as of right now, I'm still trying to work on the bone verification, and getting no help as usual... heh

if you want to learn the various matrices involved with animation, here you go :)
https://www.daniweb.com/software-de...to-verify-bone-lrs-bind-and-inverse-bind-data
I've described the full process in my question XD

Q: well why doesn't 3.0a support animations then?
A: because 3.0a uses the old GL-FFP and displays the model using a compiled display list.
because UMC is written in python, I can't have the CPU manage much of the draw-code, and using a VBO as expected with the FFP would do just that.
meaning animations would most likely render at about 3FPS or so...
even for a single model, unless the model was like an N64 model, then we might get some FPS.


so anyways, I'm still doing alot of work on UMC which I don't know how to do... heh

like I've said, I'm just a noob :p


btw, you don't have to "know" python to get started writing a UMC script
while UMC scripts are written using python, you don't need to know the complex object-orientation stuff to simply write a script (unlike Blender26)

all you have to know is how to write in-line code, which is very simple :)
Code:
def ugeImportModel( fileTypes, UI ):

    # File is already imported by here, just read ;)

    magic = string(4)
I can help you out with more info on my dev-chat ;)
 

Tcll

Smash Lord
Joined
Jul 10, 2010
Messages
1,780
Location
The Gates of Darkness
NNID
Tcll5850
you know what... screw everything I'm doing with this verifier... I'm redoing the thing to send in a bone using None instead of a defaulted setting.
not only that, but I'm including the relation so I can modify the data accordingly.

this will take a bit of time, but it'll be WELL worth it and less stress in the end.

I'm fed up with getting no help from anyone on anywhere I ask.
and where I do ask, I'm downvoted for it...
I can't even ask on StackOverflow anymore...
I'm banned because I can't ask questions like a perfect englishman, so whatever... 9_9
 

Tcll

Smash Lord
Joined
Jul 10, 2010
Messages
1,780
Location
The Gates of Darkness
NNID
Tcll5850
Hey all you skype bots think ur so smart, I got my eye on you!

skype name: banjomanden12
full name: bondig

next time send me a message before adding me with a default message! >:/
Hej DarkPikachu! Jeg vil gerne føje dig til min liste over kontaktpersoner.
^nice try speaking danish

also, responding to me would help me accept your request as well


don't think I don't know you!

EDIT:
if this is a mistake, please send me an acceptable contact request.
 
Last edited:

Tcll

Smash Lord
Joined
Jul 10, 2010
Messages
1,780
Location
The Gates of Darkness
NNID
Tcll5850
changing a few functions around before releasing

ugeFileName()
ugeFileOffset()

ugeGetFileName( None/Name/ID ) # supplying the name returns the ID
ugeSetFileName( Name ) # finally you can rename files (does not change file extension)
ugeGetFileOffset( None/Name/ID )
ugeSetFileOffset( offset ) # slight alternative to jump(), just because. (current file only)
 
Last edited:

Kahnu

Banned via Warnings
Joined
Sep 14, 2014
Messages
1,273
Location
Miami FL
Hey all you skype bots think ur so smart, I got my eye on you!

skype name: banjomanden12
full name: bondig

next time send me a message before adding me with a default message! >:/
Hej DarkPikachu! Jeg vil gerne føje dig til min liste over kontaktpersoner.

^nice try speaking danish

also, responding to me would help me accept your request as well


don't think I don't know you!

EDIT:
if this is a mistake, please send me an acceptable contact request.
The Skype bots are real dude
 

Tcll

Smash Lord
Joined
Jul 10, 2010
Messages
1,780
Location
The Gates of Darkness
NNID
Tcll5850
well the UT transformer is almost done, it seems I'm getting zero-matrices as the result...
time to rip this thing apart... again 9_9

all you need to supply for the bones is the LRS, which should be a key factor in any rigged model format :)

ugeSetBoneMtx is currently removed as I need to undo the matrix into the LRS values.
in the future, you can expect to set the bone rot as a quaternion :)
(Blender could really benefit from this) ;)
 
Last edited:

Kahnu

Banned via Warnings
Joined
Sep 14, 2014
Messages
1,273
Location
Miami FL
well the UT transformer is almost done, it seems I'm getting zero-matrices as the result...
time to rip this thing apart... again 9_9

all you need to supply for the bones is the LRS, which should be a key factor in any rigged model format :)

ugeSetBoneMtx is currently removed as I need to undo the matrix into the LRS values.
in the future, you can expect to set the bone rot as a quaternion :)
(Blender could really benefit from this) ;)
bone rot hahahahahahah hilaroois

currupted bone, hahhhahahahha
 

Tcll

Smash Lord
Joined
Jul 10, 2010
Messages
1,780
Location
The Gates of Darkness
NNID
Tcll5850
yea, I'm not just getting zero-matrices, this is what's being supplied by the frontend functions:

Verifying data...
((0.0, 0.0, 0.0), (0.0, 0.0, 0.0), (1.0, 1.0, 1.0))
((0.0, 0.0, 0.0), (0.0, 0.0, 0.0), (1.0, 1.0, 1.0))
...
((0.0, 0.0, 0.0), (0.0, 0.0, 0.0), (1.0, 1.0, 1.0))
((0.0, 0.0, 0.0), (0.0, 0.0, 0.0), (1.0, 1.0, 1.0))
Transforming data...
Finalizing...
Updating Viewer


not sure why it's defaulting like that...
I'll keep working at it until it actually gives me the values it's supposed to be recieving... erg >_<

EDIT:
here's the full thing I'm dealing with:
importing PlPcNr.dat 100%
Converting from import format...
(0.0, 0.0, 0.0)
(0.0, 0.0, 0.0)
(0.0, 0.0, 0.0)
(0.0, 0.0, 0.0)
(0.0, 0.0, 0.0)
(0.0, 0.0, 0.0)
(0.0, 0.0, 0.0)
(0.020935000851750374, -0.29993799328804016, 0.0)
(-1.570796012878418, 0.0, -0.0)
(-0.13175000250339508, 0.21610699594020844, -0.5848309993743896)
(0.0, 0.0, -0.01745299994945526)
(-0.0, 0.0, 0.0)
(0.0, 0.0, 0.0)
(0.0, 0.3700000047683716, -0.0)
(0.37428900599479675, -0.27092400193214417, -0.10473699867725372)
(0.019999999552965164, 0.0, 0.0)
(0.0, 0.0, 0.0)
(-0.0, 0.0, 4.71238899230957)
(-0.20384499430656433, 0.29500699043273926, -1.0373409986495972)
(-0.0, 0.0, 9.999999974752427e-07)
(0.4537859857082367, 0.0, 0.0)
(-0.11027300357818604, -0.24404500424861908, 0.9701430201530457)
(0.0, 0.0, 0.0)
(0.020935000851750374, 0.29993799328804016, 0.0)
(-1.570796012878418, -0.0020000000949949026, -3.1415929794311523)
(0.1302960067987442, -0.2186249941587448, -0.5704500079154968)
(0.0, 0.0, -0.017583999782800674)
(-0.0, -0.0, 0.0)
(-0.0, -0.0, 0.0)
(-0.0, -0.36000001430511475, -0.0)
(-0.3776949942111969, -2.84128999710083, 0.11682599782943726)
(-1.570796012878418, 0.0, -1.570796012878418)
(-3.211329936981201, -2.754779100418091, 3.32395601272583)
(0.0, 0.0, 0.01745299994945526)
(-0.34746798872947693, 0.3170500099658966, -1.0370010137557983)
(-3.1740469932556152, -3.115001916885376, 2.8109419345855713)
(0.0, -0.0, 0.0)
(-1.570796012878418, 0.0, -1.570796012878418)
(0.06429500132799149, 0.37825098633766174, 0.17195400595664978)
(0.0, 0.0, 0.01745299994945526)
(0.346792995929718, -0.3152250051498413, -1.0389529466629028)
(3.1671319007873535, -3.1735470294952393, 2.823391914367676)
(-0.0, 0.0, 0.0)
(0.0, 0.0, 0.0)
(0.0, 0.0, 0.0)
(0.0, 0.0, 0.0)
root 0 - 64/64 bytes - found bone out of 1/5 root structs
root 1 - 12/12 bytes - found matanim out of 1/1 root structs
Verifying data...
((0.0, 0.0, 0.0), (0.0, 0.0, 0.0), (1.0, 1.0, 1.0))
((0.0, 0.0, 0.0), (0.0, 0.0, 0.0), (1.0, 1.0, 1.0))
((0.0, 0.0, 0.0), (0.0, 0.0, 0.0), (1.0, 1.0, 1.0))
((0.0, 0.0, 0.0), (0.0, 0.0, 0.0), (1.0, 1.0, 1.0))
((0.0, 0.0, 0.0), (0.0, 0.0, 0.0), (1.0, 1.0, 1.0))
((0.0, 0.0, 0.0), (0.0, 0.0, 0.0), (1.0, 1.0, 1.0))
((0.0, 0.0, 0.0), (0.0, 0.0, 0.0), (1.0, 1.0, 1.0))
((0.0, 0.0, 0.0), (0.0, 0.0, 0.0), (1.0, 1.0, 1.0))
((0.0, 0.0, 0.0), (0.0, 0.0, 0.0), (1.0, 1.0, 1.0))
((0.0, 0.0, 0.0), (0.0, 0.0, 0.0), (1.0, 1.0, 1.0))
((0.0, 0.0, 0.0), (0.0, 0.0, 0.0), (1.0, 1.0, 1.0))
((0.0, 0.0, 0.0), (0.0, 0.0, 0.0), (1.0, 1.0, 1.0))
((0.0, 0.0, 0.0), (0.0, 0.0, 0.0), (1.0, 1.0, 1.0))
((0.0, 0.0, 0.0), (0.0, 0.0, 0.0), (1.0, 1.0, 1.0))
((0.0, 0.0, 0.0), (0.0, 0.0, 0.0), (1.0, 1.0, 1.0))
((0.0, 0.0, 0.0), (0.0, 0.0, 0.0), (1.0, 1.0, 1.0))
((0.0, 0.0, 0.0), (0.0, 0.0, 0.0), (1.0, 1.0, 1.0))
((0.0, 0.0, 0.0), (0.0, 0.0, 0.0), (1.0, 1.0, 1.0))
((0.0, 0.0, 0.0), (0.0, 0.0, 0.0), (1.0, 1.0, 1.0))
((0.0, 0.0, 0.0), (0.0, 0.0, 0.0), (1.0, 1.0, 1.0))
((0.0, 0.0, 0.0), (0.0, 0.0, 0.0), (1.0, 1.0, 1.0))
((0.0, 0.0, 0.0), (0.0, 0.0, 0.0), (1.0, 1.0, 1.0))
((0.0, 0.0, 0.0), (0.0, 0.0, 0.0), (1.0, 1.0, 1.0))
((0.0, 0.0, 0.0), (0.0, 0.0, 0.0), (1.0, 1.0, 1.0))
((0.0, 0.0, 0.0), (0.0, 0.0, 0.0), (1.0, 1.0, 1.0))
((0.0, 0.0, 0.0), (0.0, 0.0, 0.0), (1.0, 1.0, 1.0))
((0.0, 0.0, 0.0), (0.0, 0.0, 0.0), (1.0, 1.0, 1.0))
((0.0, 0.0, 0.0), (0.0, 0.0, 0.0), (1.0, 1.0, 1.0))
((0.0, 0.0, 0.0), (0.0, 0.0, 0.0), (1.0, 1.0, 1.0))
((0.0, 0.0, 0.0), (0.0, 0.0, 0.0), (1.0, 1.0, 1.0))
((0.0, 0.0, 0.0), (0.0, 0.0, 0.0), (1.0, 1.0, 1.0))
((0.0, 0.0, 0.0), (0.0, 0.0, 0.0), (1.0, 1.0, 1.0))
((0.0, 0.0, 0.0), (0.0, 0.0, 0.0), (1.0, 1.0, 1.0))
^actual color of my terminal btw, not silver :p
((0.0, 0.0, 0.0), (0.0, 0.0, 0.0), (1.0, 1.0, 1.0))
((0.0, 0.0, 0.0), (0.0, 0.0, 0.0), (1.0, 1.0, 1.0))
((0.0, 0.0, 0.0), (0.0, 0.0, 0.0), (1.0, 1.0, 1.0))
((0.0, 0.0, 0.0), (0.0, 0.0, 0.0), (1.0, 1.0, 1.0))
((0.0, 0.0, 0.0), (0.0, 0.0, 0.0), (1.0, 1.0, 1.0))
((0.0, 0.0, 0.0), (0.0, 0.0, 0.0), (1.0, 1.0, 1.0))
((0.0, 0.0, 0.0), (0.0, 0.0, 0.0), (1.0, 1.0, 1.0))
((0.0, 0.0, 0.0), (0.0, 0.0, 0.0), (1.0, 1.0, 1.0))
((0.0, 0.0, 0.0), (0.0, 0.0, 0.0), (1.0, 1.0, 1.0))
((0.0, 0.0, 0.0), (0.0, 0.0, 0.0), (1.0, 1.0, 1.0))
((0.0, 0.0, 0.0), (0.0, 0.0, 0.0), (1.0, 1.0, 1.0))
((0.0, 0.0, 0.0), (0.0, 0.0, 0.0), (1.0, 1.0, 1.0))
((0.0, 0.0, 0.0), (0.0, 0.0, 0.0), (1.0, 1.0, 1.0))
Transforming data...
Finalizing...
Updating Viewer
^printed from inside ugeSetBoneLoc() and the start of __VerifyBoneTree()
so the input is recieving values, but for some reason is not writing them...

let's see if the session data reflects this...

EDIT2:
no, it does not:
| | | Bone: bn0000F200
| | | | Parent: bn0000F120
| | | | Previous: bn0000F190
| | | | Child: bn0000F240
| | | | Next: bn0000F550
| | | | LocRotSca: [[0.020935000851750374, -0.29993799328804016, 0.0], [0.46322301030158997, 2.269134998321533, 0.05187699943780899], [1.0, 1.0, 1.0]]
| | |
| | | Bone: bn0000F240
| | | | Parent: bn0000F200
| | | | Previous: None
| | | | Child: bn0000F2B0
| | | | Next: bn0000F4E0
| | | | LocRotSca: [[-1.570796012878418, 0.0, 0.0], [2.5169119834899902, 0.23849700391292572, 0.5031920075416565], [1.0, 1.0, 1.0]]
| | |
| | | Bone: bn0000F2B0
| | | | Parent: bn0000F240
| | | | Previous: None
| | | | Child: bn0000F320
| | | | Next: None
| | | | LocRotSca: [[-0.13175000250339508, 0.21610699594020844, -0.5848309993743896], [9.999999974752427e-07, 0.0, -3.000000106112566e-06], [1.0, 1.0, 1.0]]
so for some reason, the verifier is not identifying the data...
let's see if this data passes through to the transformer and the verifier is just printing garbage.

EDIT3:
nope, the transformer never prints a single bone...
so this means the initial zero-matrix used for the influence matrix is being supplied for transforming the vertices
which explains why you can't see anything after importing.

WHY IS THIS THING MESSED UP, I KNOW I CODED IT RIGHT!
AAAARRRRG!!! >3<

I need help =3=

EDIT4:
this also affects the PT functions:

^no bones
actually the bones are there, they're all just at 0,0,0

it'll get finished guys, but I just can't say when... heh
 
Last edited:

Tcll

Smash Lord
Joined
Jul 10, 2010
Messages
1,780
Location
The Gates of Darkness
NNID
Tcll5850
btw, once everything works, here's a nice little trinket you can expect by the release: :)
https://github.com/assimp/assimp/tree/master/port/PyAssimp
here's how many model formats this will support:
http://assimp.sourceforge.net/main_features_formats.html
(the archive formats (such as pk3(zip)) will be supported by UMC-archive scripts, when that functionality is available)

but of course, this little binding can only import for now...
for exporting, you'll have to wait for them to catch up before I can use it.

EDIT:
ok, I've got this working as a library, but I don't have a model script for it yet... :p
 
Last edited:

Tcll

Smash Lord
Joined
Jul 10, 2010
Messages
1,780
Location
The Gates of Darkness
NNID
Tcll5850
ok, so I've taken a few steps back and got my transformer kindof working (it no longer transforms with a zero matrix)

so MDL0 2 actually supplies weights, but all the bones are for some reason defaulted, so they're all at 0,0,0 (no transformation)


HAL Labs 2 however for some reason does not supply weights, so there's absolutely no transformation going on.
the bones are defaulted anyways, so it's not like it really matters... heh


what's odd is the coords for the LRS transformations actually show up in the SES, so I have no idea why they're shown as defaulted during verification.
 
Last edited:

Kahnu

Banned via Warnings
Joined
Sep 14, 2014
Messages
1,273
Location
Miami FL
ok, so I've taken a few steps back and got my transformer kindof working (it no longer transforms with a zero matrix)

so MDL0 2 actually supplies weights, but all the bones are for some reason defaulted, so they're all at 0,0,0 (no transformation)


HAL Labs 2 however for some reason does not supply weights, so there's absolutely no transformation going on.
the bones are defaulted anyways, so it's not like it really matters... heh


what's odd is the coords for the LRS transformations actually show up in the SES, so I have no idea why they're shown as defaulted during verification.
Boo!! 0,0 Bones go home!
 

Tcll

Smash Lord
Joined
Jul 10, 2010
Messages
1,780
Location
The Gates of Darkness
NNID
Tcll5850
just so everyone knows, I've gotten my secondary compy up and running with WinXP Black (can't do x64) and have pretty much set up Comodo (everything) and Avast

I'm still configuring Comodo Dragon and syncing all of my of my stuff... blah blah

don't worry about me getting infected ;)
for just about anything that uses internet, I'll be using Comodo's virtual desktop environment. ;)

anyways...
I've installed copy and gotten that set up, and am waiting for it to finish syncing my repo.
so now I have a legit XP testing interface :)

for those who still want to question me using XP:
XP gives me more freedom and control to do what I want w/o much hassle.
but the best part is I don't have to worry about being controlled and locked out of my compy, unlike Win Vista and up.

I will never develop on a newer Windows OS
(until MS stops going after your money and starts concentraiting on what people actually want)
 

Tcll

Smash Lord
Joined
Jul 10, 2010
Messages
1,780
Location
The Gates of Darkness
NNID
Tcll5850
brace yourselves because we're about to get a whole lot of no progress.

I'm currently at that point where my knowledge betrays me, and what I thought I knew well enough to build something with turns out to be completely backwards.

Did You Know!
An MDL0 bone's bind matrix (with the right inversion method) is equal to the inverse of that bone's inverse matrix.
Yes, the MDL0 bone's supplied bind matrix is in world relation.

To add, any form of calculation from the supplied LRS to a bind matrix I do always results in a zero-division error when that matrix is inverted.

If UMC's gonna get any farther any time soon, I'm gonna need someone who knows enough about 3D development to help me out.
Otherwize, the time it could take to learn the required knowledge to build THIS BLASTED THING could take a few years before I'm able to actually implement it.

so if anyone wants to see something soon, please find someone who can, and is willing to help me complete where my knowledge ends.

until then I'll just be working on a few scripts while I learn a few things about how 3D formatting works.

as for right now, UMC doesn't quite function right and is pretty much unusable.
*throws a pebble at the contraption while a few of it's peices fall off inside it*


EDIT:
This project ain't dead until I say it's dead! >;)
 
Last edited:

Tcll

Smash Lord
Joined
Jul 10, 2010
Messages
1,780
Location
The Gates of Darkness
NNID
Tcll5850
here's an idea: (next update)
ugeGetBoneLoc( Rel=UGE_INVERSE_WORLD )

for whatever your needs, you can specify the relation you want.

as for right now though, as of the release, you'll only be able to retrieve the LRS in parent relation.

also, I'm changing around a few things when setting the LRS:
ugeSetBoneLoc( ... )
ugeSetBoneRel( UGE_WORLD )


should make things a bit looser ;)
 

Tcll

Smash Lord
Joined
Jul 10, 2010
Messages
1,780
Location
The Gates of Darkness
NNID
Tcll5850
hey guess what :)
some REALLY good news if I redo a small portion of API.py and create a few extra sys entrys in COMMON.py and FORMAT.py :)

since 3.0a is now roughly capable of most of 3.0's basic functions, you may just see UMC_SIDE released with 3.0a! ;D
I didn't realize how little I actually had to open up and how easy it is to implement it in 3.0a.

so SIDE just might be available by the next release :)

for the note, that's currently being rebuilt to be better as well ;)
 
Last edited:

Tcll

Smash Lord
Joined
Jul 10, 2010
Messages
1,780
Location
The Gates of Darkness
NNID
Tcll5850
so here's SIDE on linux (first test of a ported widget):


not sure why it's not working on windows:
C:\Documents and Settings\Owner\My Documents\Copy\UMC_v3.0\SIDE.py
['C:\\Documents and Settings\\Owner\\My Documents\\Copy\\UMC_v3.0', 'C:\\Python27\\Lib\\idlelib', 'C:\\WINDOWS\\system32\\python27.zip', 'C:\\Python27\\DLLs', 'C:\\Python27\\lib', 'C:\\Python27\\lib\\plat-win', 'C:\\Python27\\lib\\lib-tk', 'C:\\Python27', 'C:\\Python27\\lib\\site-packages', 'C:\\Documents and Settings\\Owner\\My Documents\\Copy\\UMC_v3.0\\SIDE\\PyQt4-4.11.3-cp27-none-win32.whl', 'SIDE']


Traceback (most recent call last):
File "C:\Documents and Settings\Owner\My Documents\Copy\UMC_v3.0\SIDE.py", line 5, in <module>
from SIDE.common import *
File "C:\Documents and Settings\Owner\My Documents\Copy\UMC_v3.0\SIDE\common.py", line 3, in <module>
from PyQt4 import QtCore, QtGui, QtOpenGL
ImportError: No module named PyQt4


as you know, I have it synced, so it's the same exact stuff on both OS's

EDIT:
oh, yes, I have a reload function :p
Qt is stupid when it comes to editing code, so I can't simply update it...
but I can make an edit and reload the application :3

the button just saves a hassle :p
 
Last edited:

Tcll

Smash Lord
Joined
Jul 10, 2010
Messages
1,780
Location
The Gates of Darkness
NNID
Tcll5850
ok, so here's an update:


moved the selectors into the document wrapper so I could independantly apply allowed references to them based on the script's type.

also, I found out why it worked on linux and not windows...
the whl doesn't work portably like the others I have,
and I've just recently learnt I had a PyQt4 installation on my linux test envionment, not my windows.

EDIT:
got a portable PyQt4 working, so now it works on windows :)
 
Last edited:

Tcll

Smash Lord
Joined
Jul 10, 2010
Messages
1,780
Location
The Gates of Darkness
NNID
Tcll5850
so here's something I've been working on ;)

^noobs will like just how well I intend to use this feature ;D

btw, this is something you can't normally do with Qt :p
I had to use a disgusting QPainter to pull off these lousy effects.

and as usual, I'm getting no help with anything:
https://www.daniweb.com/software-de.../how-could-this-be-more-efficient#post2168184

idk wtf I'm doing when it comes to this stuff... I'm literally just figuring it out as I go.
would be nice if there was such a thing as DOCUMENTATION!!!
so others could learn how to properly do this stuff >_<

sorry to blow a gasket, I'm sick of wasting my life looking for horrible discoveries just to be told I could've done it a better way.
rather than be told the better way 2 years earlier when I actually ask the stupid Q.

ugh...
don't worry guys, I'm not even close to quitting, but if this keeps up, you might not see a next release for the next few years...
THAT's the pain I'm feeling and am so P'd about, and to say I have more patience than probably everyone on this forum, yea, that's saying alot.
I'm just sick of the constant having to wait 2 years for my next answer... I can't move that slow people, I WANT to get these things released by tomorrow!

thank you to everyone who cares :)
 
Last edited:
Top Bottom