• 🏆 Texturing Contest #33 is OPEN! Contestants must re-texture a SD unit model found in-game (Warcraft 3 Classic), recreating the unit into a peaceful NPC version. 🔗Click here to enter!

Matrix Eater 3D Model Editor

[NOTE: Before downloading this program, consider downloading Reteras Model Studio instead. It is a better graphical model editor combined with a model viewer that shares code with this project but is 5 years ahead in terms of updates. This version is here only for people who want the old UIs and stuff for my code libraries, but to be honest Retera Model Studio is really greatly improved and I use it in all cases instead of this program.]

The Matrix Eater

With support from the community, I've been working on this tool for years. More so, I became a user of it, much to the dismay of the people who asked for the best and brightest features, because I have hardly added any features in favor of just using the program how it is.

What does the Matrix Eater do?

You can think of the Matrix Eater as an alternative to Magos's Model Editor or MdlVis, but I usually use all three of them in conjunction.

The Matrix Eater is visually like a multi-geoset version of Oinkerwinkle's Vertex Modifier from years ago, but it has the purple icon on the View Controller window which lets you move and edit Pivot Points also.

In addition, if you do Tools > Mirror and mirror a selection that includes pivot points, it will mirror the animation data. So you can make a Portrait model that faces the opposite way, or something, and still animates correctly.

The program understands the MDL format in its entirely, and has support for MDX that is newer and slightly less tested. If it spits out a broken MDX, then save as MDL and convert to MDX using other software. It can do this for you, if you go to View -> Use Native MDX Parser and turn it off, then it uses MDLX converter instead of its own code to convert to and from MDX ( so it's less likely to have any bugs ).

If you use File -> Import it can be like magic and do what you need, or break things. This new version includes pictures along with names to try to show you what part of the model you're looking at. The general idea is that it takes literally everything from a new model, dumps that into the interface alongside the model you already have open, and gives you choices of how to combine them and which new components to include. You can mash "leave all" a bunch and only include an attachment point, or you can import a grunt onto a dragon complete with animations and have an animated orc dragon rider. You just have to micromanage the little buttons and tell the pelvis of the grunt, and everything below it, to attach to the dragon's main body root.

Which version is this?

This is the official upload of the latest version of the Matrix Eater.

If there is anyone using an older version of the Matrix Eater, please stop using it and use this one. Until now, the program was only shared on forums here and there from links which were often broken and pointing to outdated versions.

If this one cannot do what an old version does, please comment on this upload and tell me why so I can fix it.

I really wanted to revamp this program and add new features and write a tutorial before I uploaded it onto the Hive, but I just haven't had time recently, and I want to stop sitting on this updated version because it has several internal fixes that should make it less likely to save buggy MDX models and so I feel the community deserves this new version in case anybody is using the program -- regardless of whether I end up getting the time to improve it to match up with my dreams or not.


I didn't check the box for Linux because I haven't tested it on there for a while, but if you're a Linux user and you want to run it on Linux, just run the JAR. Theoretically it should work, if you have a Warcraft install folder on the linux machine. I've tested that before and it seemed to work.

The real source code the program on Github is this Eclipse workspace:
GitHub - Retera/JWC3: Retera's Java WC3 libraries.

There is a similar one but it is way older and out of date.
Contents

Matrix Eater 3D Model Editor (Binary)

Reviews
eejin
A great tool for editing meshes and animations. There is a lot of functionality there and this tool surely makes editing models a lot easier! Having an undo option in the UV editor would be nice. The program also gives an error that it is missing...
I haven't updated to 1.28 yet to test that yet, this probably means they changed the MPQ format.
I'll have a look at that sometime soon.

Edit: I just tested downloading the software from the Hive for the first time and now my laptop is telling me it contains a virus, despite the fact that when I developed it on my laptop -- the same one I just downloaded the .zip onto -- there was never an issue.

The supposed virus warning (I am assuming a false positive) is coming out of the blplabcl.exe program which I got from Shadow Daemon a few years ago and which I do not have the source code for. However, it's just a Command Line interface for the BLP Lab program available here on the Hive, and I have never had any trouble with it before. This might be an update from Windows just being more paranoid, but for anyone concerned, I'll try to figure something out to make an update sometime soon.

In the meantime, if your Windows Defender deletes blplabcl, I think the Matrix Eater will still work and just be unable to render any textures on models (since the BLP Lab command line utility it leverages to load BLP files into Java will fail without that program).
 
Last edited:
Level 50
Joined
Dec 29, 2014
Messages
1,948
Fantastic tool/program, I must say. From the first time I saw this I started using it. I can't imagine doing anything modeling related without this tool now. The only thing that bothers me is the fact that I can't properly transfer some animations sometimes. But I guess that's because I didn't quite learned the process of transfering animations. Besides that, I sometimes had problem to open some models, for example, the Malfurion model from in game. When I convert it from MDX to MDL format I can't open that model at all. I didn't downloaded this version, thought, maybe now works.
Nonetheless, thank you, sire, very much for this tool, really.
 
Glad to hear you like it!

There's a bug with the Malfurion model that the name of one animation is, instead of "Stand Ready", set to "Stand Ready

"

In other words, it contains the ASCII "new line" character telling it to go to another line in the file, and this broke stuff in the Matrix Eater. If you can manage to convert Malfurion to MDL with a different program, you can just change the animation name to avoid this Matrix Eater bug. Perhaps I'll upload a fixed version of the program soon, but it means having it look for this strange special case.

You can see in the MDL block, MalFurion has:

Code:
    Anim "Stand Ready






" {
        Interval { 75667, 76667 },
        MinimumExtent { -182.496994, -147.304001, -93.549103 },
        MaximumExtent { 191.195007, 200.020996, 240.339005 },
        BoundsRadius 258.579987,
    }

... and it will work in the Matrix Eater if you change it to:

Code:
    Anim "Stand Ready" {
        Interval { 75667, 76667 },
        MinimumExtent { -182.496994, -147.304001, -93.549103 },
        MaximumExtent { 191.195007, 200.020996, 240.339005 },
        BoundsRadius 258.579987,
    }

I hope that helps!
 
Level 50
Joined
Dec 29, 2014
Messages
1,948
Glad to hear you like it!

There's a bug with the Malfurion model that the name of one animation is, instead of "Stand Ready", set to "Stand Ready

"

In other words, it contains the ASCII "new line" character telling it to go to another line in the file, and this broke stuff in the Matrix Eater. If you can manage to convert Malfurion to MDL with a different program, you can just change the animation name to avoid this Matrix Eater bug. Perhaps I'll upload a fixed version of the program soon, but it means having it look for this strange special case.

You can see in the MDL block, MalFurion has:

Code:
    Anim "Stand Ready






" {
        Interval { 75667, 76667 },
        MinimumExtent { -182.496994, -147.304001, -93.549103 },
        MaximumExtent { 191.195007, 200.020996, 240.339005 },
        BoundsRadius 258.579987,
    }

... and it will work in the Matrix Eater if you change it to:

Code:
    Anim "Stand Ready" {
        Interval { 75667, 76667 },
        MinimumExtent { -182.496994, -147.304001, -93.549103 },
        MaximumExtent { 191.195007, 200.020996, 240.339005 },
        BoundsRadius 258.579987,
    }

I hope that helps!
Oh right. Then that's not the problem with the program itself, it's with the model. Thanks a lot.
 
The most powerful 3D model editor for Warcraft 3... yet. What Magos's editor is too inefficient to do, Matrix Eater can do with ease. This is a life saver; I would recommend it any day.
(btw, Tvertices outside the bounds are still not shown properly and the animation viewer is kinda broken)
 
Last edited:
Level 15
Joined
Sep 6, 2015
Messages
576
Getting an error titled "MatrixEater3D.exe - Bad Image" with the message "MatrixEaterV1.20.4\jre\bin\server\jvm.dll is either not designed to run on Windows or it contains an error" each time I run this version of the program, but the program works afterwards. In the previous versions I haven't been encountering this error.
 
Mine's probably 64-bit.
Here's a possible fix to try, if you go to oracle's website and install Java SE Runtime Environment (if you're willing) and it installs to "C:/Program Files/Java/jreXXX", then see if you can copy this folder's contents instead of the "jre" folder in the Matrix Eater. It should replace the Matrix Eater's java that it is using with Java that is compatible with your computer -- assuming you download the right one.

Edit: or try the attached ZIP file, which should have the 32 bit version, and let me know if it seems to work
 

Attachments

  • Matrix Eater 3D Model Editor 32bit.zip
    61.7 MB · Views: 501
Last edited:
Level 15
Joined
Sep 6, 2015
Messages
576
Mine's probably 64-bit.
Here's a possible fix to try, if you go to oracle's website and install Java SE Runtime Environment (if you're willing) and it installs to "C:/Program Files/Java/jreXXX", then see if you can copy this folder's contents instead of the "jre" folder in the Matrix Eater. It should replace the Matrix Eater's java that it is using with Java that is compatible with your computer -- assuming you download the right one.
I have Java installed already. I've copied the files and now everything works properly - there is no error.
 
@General Frank it's coded so you can just skip all that. Just use Right-click, then find "re-assign matrix", something like that (I'm forgetting the specific name).

It doesn't operate on the level of matrices because I found that unnecessary. So, you just choose bones, and it will assign all selected vertices to one or more bones. Basically, it builds a new matrix for the list of bones you choose, but don't think of it that way -- since if a matrix already exists connected to the chosen list of bones, then it binds to the already existing one.
 
@General Frank it's coded so you can just skip all that. Just use Right-click, then find "re-assign matrix", something like that (I'm forgetting the specific name).

It doesn't operate on the level of matrices because I found that unnecessary. So, you just choose bones, and it will assign all selected vertices to one or more bones. Basically, it builds a new matrix for the list of bones you choose, but don't think of it that way -- since if a matrix already exists connected to the chosen list of bones, then it binds to the already existing one.

Wow, this is amazing.
 
@dtnmang Yes, it should be possible to select by vertex groups, I just never coded it in. I was working on something like that in a separate version, but broke a lot of features at the time and removed it for the time being. I was trying to make the program understand selecting vertex groups as each their own node, and it only understood selecting vertices.

On the flipside, if all you want is a hotkey to select everything in the same vertex group as a particular vertex, coding that with the existing interface would probably take like 10 mins.

Edit: See attachment, where I tried to reinvent elements of the program to allow for Face and Vertex Group selection. I was trying to make it more like 3ds max, and you can see I added in the clickable autodesk-looking move widget (look in lower left hand viewport).
It's a cool idea but I broke a bunch of basic features and didn't finish.
 

Attachments

  • GroupSelection.png
    GroupSelection.png
    966.6 KB · Views: 659
Last edited:
Yes, it already can, but the option is hard to find.

  1. First, save the model as MDL in a folder somewhere.
  2. Then do File -> Edit/delete model components. This will show all the parts of the model. Don't click or change anything, if you click anything on the right-hand side it edits stuff.
  3. Only click on the Animations tab, then click the animation listed that you want to reverse, then click the checkbox that says Reverse.
  4. Then, choose "Finish" at the bottom of that screen.

What this feature does, is run the Import code but importing your model into an empty new one, effectively. This let's you erase entire geosets and animations, or in your case, reverse animations.

When it's done, you'll see a new copy of your model open up in the matrix eater. It will be called MyModel1 if the old model was called MyModel, and it saves as an MDL in the same folder where you saved previously.

For really advanced users, note that the new copy of the model, even if you change nothing in that menu, will have it's animation start/end times shifted even though all animations will be kept the same and it doesn't show in game any differently. It's just important to know this shifting will occur if you text edit the MDL a lot.
It's because the import script is copying each animation back into an empty model to rebuild your source model, and it always copies at an interval of 300 away from the last animation that already exists in the model.
(So, it would also drop or confuse any keyframes that weren't a part of any animation, if you had those for some reason)
Edit: It also will sometimes lose links when Nodes have a parent that is not a Bone or a Helper. For example, the Troll Bat Rider has a bone whose parent is an attachment point, whose parent is another bone. These links are lost to the Matrix Eater Import functionality because it wasn't designed correctly. Someday I should fix it.


Edit: also guys, don't let me forget, there's a critical bug in the matrix eater right now that Rotation chunks on RibbonEmitters are erased just by opening a model and saving it again. I'm not sure how I never had fixed it before, but sometime soon I'll release a patch.
 
Last edited:
Level 11
Joined
Jan 25, 2017
Messages
213
Love this tool. I've been using an old version for awhile- mistakenly thinking I had the newest one- but the download date says I downloaded it a day before this one came out haha. But I really like all the improvements.

Just wondering. Is there a feature to merge animations? (ie. when one ends- add another to be one longer animation) Or do you know if this can be done in MDLvis or Magos?
 
Love this tool. I've been using an old version for awhile- mistakenly thinking I had the newest one- but the download date says I downloaded it a day before this one came out haha. But I really like all the improvements.

Just wondering. Is there a feature to merge animations? (ie. when one ends- add another to be one longer animation) Or do you know if this can be done in MDLvis or Magos?
Only MDLvis can do it afaik.
 
@Misha I believe I may know the issue. For the latest version of the Matrix Eater, I included Java itself in the build, instead of requiring users to install Java -- the java updater thing is stupid, even though I like the language, and I wanted to respect users who don't actually wish to install Java globally on their computer.

But, this probably means the embedded Java in the latest download is for the wrong version of windows for you. To fix it, you could probably just copy "MatrixEater3D.jar" from the new download into a clone of your old working one, and it might start running the new Java code I wrote using your computer's true installation of Java.

@dtnmang Yeah, there may not be a feature for sticking two animations together in the current release, but if you hack the Matrix Eater the Animation class used to represent animations in the MDL object has on the method "myAnimation.copyToInterval(newstart, newend)" or something like that, and you could use it to align animations in the model and build this feature you are talking about very easily. That function modifies all non-GlobalSequence keyframes by doing a relative shift between intervals, so "copyToInterval(100,200)" on an animation with "Interval { 1000, 3000 }" in the MDL will copy every frame between 1000 and 2000, and multiply the copy's time interval by (200-100)/(2000-3000) relative to its new start at 100. So, 1666 becomes 133, and 2000 becomes 150.

So, you could code this feature you were talking about in 10 or 20 minutes if you had the code open and knew what to type like I do. That's why it's so hard on days when I realize that I spent 10 minutes typing this post instead of typing code.


 
Last edited:
@Retera well, i'd rather wait on you to code in the geoset-merging, that lets me just check all geosets with the same material, but also be able to recognize which geosets have the same geoset animation, and merge them into a separate group, from the geosets that have a different, or no geoset animation

its really me wanting to merge all of the cut-up mesh and don't have to re-rig later. my current model in works is only waiting on that
 
Can't you just do "File -> Merge geoset" a bunch of times to fix a cut up model like that?
But, you're right I could make it a one-click feature.

I made a video of me adding the animation + animation feature in 30 minutes, but it was 30 minutes long and uploading to youtube failed. I made a footman with an animation called Attack Stand Victory -- it was attack and stand victory played back to back -- and it worked on the first try.

Now, I just need to get that feature to you guys.
 
Last edited:
Can't you just do "File -> Merge geoset" a bunch of times to fix a cut up model like that?
But, you're right I could make it a one-click feature.

I made a video of me adding the animation + animation feature in 30 minutes, but it was 30 minutes long and uploading to youtube failed. I made a footman with an animation called Attack Stand Victory -- it was attack and stand victory played back to back -- and it worked on the first try.

Now, I just need to get that feature to you guys.

well, yes i could, but, i don't want to re-rig stuff xD i think it'll be the same way in how you can (for example) choose to transfer all animations, versus the combine animations :)

feel free to bonk me if i'm making too many suggestions XD
 
As long as you can fit tags into it.
e.g. The Blademaster has an animation named "Attack Walk Stand Spin" for Bladestorm. So the Blademaster will do this 'spin' animation whenever he attacks, moves, or stands and has the animation tag "spin" (through casting Bladestorm or triggers)

"Alternate Gold Attack Walk Stand Spell Upgrade Three" -> This animation is used whenever the unit attacks, walks, stands or casts a spell when it's in the alternate form (tag Alternate) of its 3rd level upgrade form (tag Upgrade Three) while carrying gold (tag Gold).
 
I'm working on some big upgrades to this tool, but they are not done yet.
This should include a Select Faces and Select Vertex Groups mode, but while you are in these modes you can still edit nodes if you have them toggled on to display.
I also modified the nodes to be toggleable in a tree widget (see in the attachment on the left hand side of the screen) that combines nodes and geosets into one view control widget. I'm hoping it will be more convenient, but time will tell.
My current build also now has a copy paste feature, so you can select stuff (such as with Select Vertex Groups mode, see attachment #2, I clicked once on the paladin's head and it lit up in orange) then after you select stuff, press Ctrl+C to copy it and then later Ctrl+V in another Model Tab in a different model file to paste mesh or nodes. I haven't worked out all the details yet on what would happen if you copied stuff with a lot of animation and visibility data, but it probably will favor ease of use and require the user to clean up a bit after copy pasting (maybe tweak some geoset animations).

If you try to paste the contents into another program, like notepad, after copying model data in the matrix eater, it prints out an MDL-format file of the model data that you had selected, currently. It's a kind of weird feature, because to transfer data I just stored an MDL model in the clipboard.


Edit: So, one reason for this post -- does anybody here think these changes would impede their workflow? My aim is to enhance things, but I have broken a lot along the way with these changes.
Already the feature of "Visible" but not editable mode for a geoset is currently gone, but it still exists in the code and will probably be re-enabled as the ability to right click a Geoset in the controller on the left and choose "Pin Visible" or something.
Other changes in the UI are visible in the image attached. I still can't decide if I like the darker theme, so I'm hoping to have a Preferences window where you can choose the theme by the time I release this. Don't have it yet, though, but I have a preferences system that will make it easy to add the window.
This version also moved all of the buttons on the right-hand side of the screen into a Toolbar across the top, so that I can use that part of the screen for adding new primitives, and editing selected node properties, like in 3ds max.

Edit again: I'm also going to be faced with design questions like: do I want to bother to code vertex-group selection and face-based selection in the TVertex editor. I haven't done that at all yet, that thing crashes if you try to open that window in this new version that I'm still working on. That will be fixed before I release it.
 

Attachments

  • upgrades.png
    upgrades.png
    414.1 KB · Views: 315
  • upgrades2.png
    upgrades2.png
    388.4 KB · Views: 332
Last edited:
Level 1
Joined
Nov 22, 2013
Messages
1
Your tool really useful i use it a lot and have adding normal DecayFlesh feature in mind? Tried to duplicate last frame of death animation(It about 30k frame) and moving main bone in same (-z) every frame If you adding DecayFlesh to Matrix Eater be great (choose Death animation(copy last frame of animation) for DecayFlesh animation > type number for how many duplicate frame > choose main bone (that is connect all bone) > type number of moving animation (-z) each frame(only first frame is not moving))
 
Last edited:
I graduated from college and have been working full time, and then the code mostly turned into mush. To be honest, if I want to get modeling work done, I typically redownload this Tool link from this page instead of using the "up-to-date" build from the codebase at this point, because it is a stable working program. I am un-inclined to post a release until I no longer feel this way about my work. In order to support select by faces and select by vertex group, the new version saw an almost total rewrite of the very basic functions of the program. I'd say it's at 90%. Move/rotate/scale and all of those work correctly, and some stuff like cloning and other things can actually be hit by "undo" now instead of being bugged in that regard. And, you can copy/paste geometry and nodes between models. But it comes at a really heavy cost. Some features that used to work, don't anymore. For example, at least for a while, "Mirror X" would create multiple mirror lines for differing types of data. For example, if you were selecting Faces and Nodes, then there would be one mirror line for faces and one for nodes. It was just a total oversight in how I attempted to organize the code -- but it means that one simple "mirror" operation can totally wreck the model.

It's bugs like this that are just really, really annoying as a user. I wouldn't feel good publishing it when it's like that. So, I've been planning to just keep working for a few years, hopefully get draw-from-scratch functionality for mesh, and the ability to edit animations like MdlVis, and then when I have a new program that is actually legitimately better I'll probably come back and post it. But that's a long way off, still.

Edit: If you scroll up through this thread a bit, you find a picture of the program that looks like a more or less working build. That build got modified further to support dockable dyanmic windows. Initially, I really loved this new windowing system that I started using, but it lends itself towards an entirely new program. I want to use the new windowing system, and make something a lot better, but the old code was rickety and falling apart when I tried to inject it in. Sometimes now I would save a model, and it would save a different one of the windows instead and become internally confused. And it didn't really tell me. When I have the time to fix it, I think it could become something very great, but I guess my attempt to update that system was the "straw that broke the camel's back" in the sense that it was after this point I went back to just using the release from a year or two ago to get things done.

Edit: Here's a video of the features that I unveiled to some friends about a month ago that are in store for the next Matrix Eater release:

Edit:

Edit: I'm just some guy who wrote the Matrix Eater, and I'm aware that not every feature idea that I have is the best use of my time that could be spent developing the tool you guys want to have. I would be excited and interested to hear back from you guys about which features highlighted in the "Why No Updates?" video are things you would like, and which trouble you.

Edit: My ideal release would feature the "Track View - Dope Sheet" from the Matrix Eater Max video (spoiler above), the Material Editor window from the same, as well as the Set Keyframe Mode, also in that video. However, I have yet to add these.
 
Last edited:

Kyrbi0

Arena Moderator
Level 44
Joined
Jul 29, 2008
Messages
9,484
Glad to hear from you again on this matter.

Insofar as you are a busy guy & having trouble marshalling the time/motivation to complete it, I wish you only the best & assure you of my/our patience.

However, insofar as you simply feel like it's an inferior product with no value... I must respectfully disagree. I am already a huge fan of what you presented there, warts & all. Yes the program-breaking bugs should be squashed. But for everything else, there's Mastercard just slap a big ol "X" on the button (and/or a pop-up saying "this function does not currently work/is not currently implemented"), and ship it out! Plenty of companies do that (having a later, 'stable' version and a newer, 'WIP/testing/coolstuff' version simultaneuosly). I see no reason (aside from the 1st paragraph) why you should feel bad about doing the same.

Personally, I'm a fan of almost everything you showed, especially the various methods of fetching models. Tabs is SUPER. Moveable windows is pretty dang cool & I can see the utility, but.... If it's breaking things I don't mind it being taken out.

(For the "which window is saving" issue, can you just include a little pop-up that confirms? "You are saving Rifleman_Portrait.blp?" kinda deal? Maybe also have the active window be highlighted a bit more obviously in some way?)

For the "can't remember the window you had/preferences you used", that's annoying, sure. Closing a window & not being able to get it back. But not user-killing. I don't know what it would take to get that to work.

I will again admit: I'd love to see just one big perspective window, with the geosets made editable selectively (like you have it, but maybe just a straight list instead of by-Node (or both: preferences!), and have the texture have toggled visibility (so you can be looking at vertices, then hit a hotkey & see them wrapped, then switch back with the same key). This would fix the missing "visible but not editable" bit, perhaps. However, I realize that that basically means "copy MDLVis" since that's all of what they do. Lol.

Anyway, either way, don't feel too bad about it. It's looking great overall, and we know you can't do everything.


(also I apologize: I have no idea how hard the things I've suggested are, so feel free to ignore)
 
I'm very interested in your response. I might edit this post with even more when I get home from work. The biggest difference I see in our ideas/goals is actually the tabs. I was thinking of eliminating them, and switching to the World Editor paradigm of viewing one thing at a time, but having multiple "open" that you can swap between in the Window menu. So, just like when you have two maps open, and can switch between, you could have two models open. This would mean that I could do "Window -> Front" to open the Front view for editing, etc. And, these views could be placed in user chosen areas, and would remain there when swapping to open new files. Only downside would be clicking 2x to open the Windows drop-down, then choose a file, as a way to swap between active models. It's a two-click change, instead if aof a one-click tab system
 

Kyrbi0

Arena Moderator
Level 44
Joined
Jul 29, 2008
Messages
9,484
I like the Tabs, but that doesn't sound bad either.

And if you're ever worried about 'adding clicks', consider the power of simply hot-keying those actions. So "Window" might be 'W', which opens an arrow-key-traversable dialog box List of the open models.
 
Top