• 🏆 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!
  • It's time for the first HD Modeling Contest of 2024. Join the theme discussion for Hive's HD Modeling Contest #6! Click here to post your idea!

Model Optimizer and Converter v1.2.1

Model Optimizer and Converter
  • Batch processing.
    • Drop files/folders on the window
  • Reforged support
    • MDL output can't be read by Retera's Model Studio 0.4
  • Check the tooltips for more info about the options
  • Separate CMD executables
    • --help for info about the options
    • Drop files/folders on the executables

Big thanks to @GhostWolf and @Retera for their help, their code, and their software.
Also a big thanks to @Macadamia for his invaluable feedback.
And thanks to @eejin for improving the UI theme.



1.2.1
- Fixed a crash that could occur when a geoset has no UVs or normals
- Fixed options sorting
- New options: Delete Unused Global Sequences, Delete Invalid Keyframes, Fix Self-referencing Nodes
- Small UI tweaks

1.2.0
- Fixed a crash that could occur when a geoset has an invalid matrix
- Delete same-ish keyframes
- Split "Match Sequence Extents" into delete (opt) and add (sanity)
- Added a few sanitization options
- Improved theme

1.1.11a
- Tweaked UI
- External stylesheet (style.css)

1.1.11
- Fixed nodes sometimes losing their parent node
- Fixed missing PE2 gravity field
- Fixed PE2 width and length fields being inverted when writing to MDX files
- Added percentage to filesize reduction message

1.1.10
- Added Delete Unused Bones/Helpers/Event Object options
- Added "Pass 1/2/..." messages
- UI style based on Hive

1.1.9a
- Fixed crash on program exit

1.1.9
- Implemented all animated objects
- Delete 0-Length global sequences
- Delete unknown chunks
- Remember active subtab

1.1.8
- Added Geoset Animation options
- Implemented Lights

v1.1.7b
- Fixed MDL Geoset Extent reading

v1.1.7a
- Fixed material merging
- Fixed global sequence unused keyframes deleting
- Fixed node hierarchy being partially destroyed
- Fixed crash when merge similar geosets is checked

v1.1.7
- Fixed Materials & Textures optimizations
- Added Merge Similar Geosets option
- Geosets left empty after deleting free vertices are now deleted
- Adding sequence extents now takes the geoset extent if no sequence extents are available
- Fixed Optimization options not being disabled when Optimize is unticked

v1.1.6 (FIXED)
- Fixed crash when optimizing
- Minor fixes

v1.1.6
- Removed recursive optimization option (always recursive)
- Delete 0-length sequences
- Partial Linearize Anims
- Partial delete unused keyframes
- Partial delete empty animations
- Delete Unused/Merge Identical Materials, Textures & Texture Animations
- Misc fixes

v1.1.5
- Considering normals when merging vertices is now optional (default off)
- Added "Delete 0-length Sequences" option
- Removed "Reforged Data" checkbox (always written now)
- Changed window title to "MOP"

v1.1.4
- Fixed 0-value Tangents and SkinWeights being written to >v800 models without this data
- Improved RMS 0.4 Reforged MDL reading
- Misc fixes

v1.1.3
- Fixed a bug with writing MDX files without any FaceFX
- Miscellaneous bugfixes/crash fixes
- Added partial support for reading Reforged MDL files written by RMS 0.4
- Unknown tokens will once again cause MDL loading to fail
- Moved suffix options to Optimize and Convert Options respectively
- Magos Compatibility now only applies to v800 models
- Magos Compatibility disabled when Version 900/1000 checked
- Fixed CMD processing
- Changed the way CMD options/arguments work

v1.1.2
- Fixed a crash that could occur when merging vertices
- Merging vertices is now faster
- Merging vertices now requires identical vertex groups
- Fixed a bug with writing Color to Geoset Animations
- Fixed automatic filenaming (increment & suffix)
- Fixed ignored tokens' attributes not being skipped
- Checkboxes are now disabled when appropriate

v1.1.1
- Changed UI layout a bit
- Added radio buttons for preselection of file conflict handling
- Improved messages and added filesize difference
- It' now possible to process files when neither Optimize or Convert are checked
- Added "suffix" option for file conflicts
- Fixed a bug that would sometimes cause a crash
- Fixed Reforged model optimizing causing a crash
- Fixed Reforged data not being written to MDL files when not converting
- Unknown tokens will no longer cause parsing MDL files to fail
- Fixed layer TextureID token not being recognized
- Improved floating point rounding

If you encounter any problems or have any more ideas, let me know :)
GitLab repo
Previews
Contents

Model Optimizer and Converter (Binary)

Alright, new version is up. Haven't tested it that much, so hopefully everything works well.
Btw @Macadamia I update the to do list between updates here, if you're interested: misc | HIVE

Most of the groundwork has been laid now, so future updates should be relatively straightforward :)

Edit: oops, it just crashes with any optimization lol, brb
 
Last edited:
Level 12
Joined
Jan 30, 2020
Messages
875
Well I couldn't approve your ToDoList more ^^

I really like the growing number of options, and can't wait to test linearization's first implementation.
The way you re-arrange options is a nice move indeed.

I also experienced the crash, but as always I stay tuned ;)
 
Level 12
Joined
Jan 30, 2020
Messages
875
Nothing wrong there, being a coder does not mean being a machine.

What matters is that your work will help many people, the hiccups along the way are not relevant !

Get some rest, and take care :)
 
Level 12
Joined
Jan 30, 2020
Messages
875
@Everyone : just tested the fixed version and it works wonders, so don't hesitate.
There is already partial support for Linearizations and other nice optimizations, people need to check it out :)
 
Level 12
Joined
Jan 30, 2020
Messages
875
That really sounds promising.
It seems like the tool will end up being a complete model converter / optimizer / fixer.
At least for all the aspects that can be automated. It is already incredibly useful !
 
Level 4
Joined
Nov 12, 2017
Messages
15

Attachments

  • ElvenEnversor.mdx
    121.5 KB · Views: 84
  • ElvenSwordmaster.mdx
    67.3 KB · Views: 79
  • Tank_WW1.mdx
    31.1 KB · Views: 177
  • T_GroundVehicles.blp
    102.3 KB · Views: 173
Last edited:
Nice to see we start having more testers !!!
Indeed! :D

@MaximBit I think I fixed it, but will do some more testing first to be sure. Sorry for releasing it buggy.

Also need to test geoset merging more, but I think it's okay. So next update will probably be released tomorrow =)
 
Level 12
Joined
Jan 30, 2020
Messages
875
Amazing !!!

Tested it on my usual series of models plus a couple new ones.
Seems to work nicely, Linearizations seem pretty functional as far as I have seen too.

I wanted to start testing the geoset merging on the list of models to see what issues would appear, unfortunately, with the merging option, the program quickly crashed on a simple model exported from Blender with 2 geosets.

I have attached the model.
 

Attachments

  • BlenderBall.mdl
    2.9 MB · Views: 67
Ah, yes, fixed that, thanks! The material merging bug is still eluding me, the issue is that it doesn't seem to be checking for the texture path properly, but I don't see why.

I've also found that geoset extents are always being read as all 0 values from MDL files, which is really weird because it's being read and written in the same way as all other extents, which are fine, and I don't see anything wrong with the code.

The vertex stuff takes reaaaally long on that model though, lol, I should add a cancel button.
 
Level 12
Joined
Jan 30, 2020
Messages
875
Yes the blender model has quite a lot of vertices, and as Reforge models can potentially have that many, a cancel button could be helpful - or maybe better than cancel, a skip button ;)

I didn't notice the extents issue as I mostly did an ingame + animations test.

This strange problem you are having with reading values is indeed weird. If you have traced that the issue comes straight from the reading function, might be an issue with the parsing itself ?
Would have been easier if the values were properly read and kind of zero-ed later ^^

As for the texture paths, did you check the parser handled them properly ?

Hope you'll find out, I know how frustrating those kind of inexplicable (until we find out) issues can be.
 
Destroys the caterpillar animation (Tank_WW1.mdx + T_GroundVehicles.blp)
View attachment 357426

Crashes without any errors (I know about the caution)
View attachment 357429
Destroys the view Animation (ForgottenOneBirth.mdx)
View attachment 357433
View attachment 357443View attachment 357445
Thanks, I will have a look at those. The crash should be fixed but I will test it again before updating.

Just in case, could your post your actual C++ function that is checking for the texture path ?
Sure:
Code:
void Optimizer::mergeIdenticalMaterials()
{
    for (size_t i=0; i<model.edit.materials.size(); i++) {
        for (size_t j=i+1; j<model.edit.materials.size(); j++) {
            // Materials match
            if (*model.edit.materials[i] == *model.edit.materials[j]) {
                // Change geosets materialId
                for (auto &geoset : model.edit.geosets) {
                    if (geoset->material == model.edit.materials[j]) {
                        geoset->material = model.edit.materials[i];
                    }
                }

                // Change ribbon emitters materialId
                for (auto &ribbonEmitter : model.edit.ribbonEmitters) {
                    if (ribbonEmitter->material == model.edit.materials[j]) {
                        ribbonEmitter->material = model.edit.materials[i];
                    }
                }

                // Delete matching material
                if (model.edit.deleteMaterial(j, true)) {
                    diffCount_++;
                    j--;
                }
            }
        }
    }
}
model.edit.materials is a vector of shared_ptrs to the actual objects.

The equality operators are overloaded:
Code:
bool operator==(const MaterialEdit &lhs, const MaterialEdit &rhs)
{
    if (lhs.priorityPlane == rhs.priorityPlane && lhs.flags() == rhs.flags() && lhs.shader() == rhs.shader()
            && lhs.layers.size() == rhs.layers.size())
    {
        for (size_t i=0; i<lhs.layers.size(); i++) {
            if (*lhs.layers[i] != *rhs.layers[i]) {
                return false;
            }

            return true;
        }
    }

    return false;
}
Code:
bool operator==(const LayerEdit &lhs, const LayerEdit &rhs)
{
    return lhs.filterMode() == rhs.filterMode() && lhs.shadingFlags() == rhs.shadingFlags()
            && ((!lhs.texture && !rhs.texture) || (lhs.texture && rhs.texture && *lhs.texture == *rhs.texture))
            && ((!lhs.textureAnimation && !rhs.textureAnimation)
                || (lhs.textureAnimation && rhs.textureAnimation && *lhs.textureAnimation == *rhs.textureAnimation))
            && lhs.coordId == rhs.coordId && compf(lhs.alpha, rhs.alpha)
            && compf(lhs.emissiveGain, rhs.emissiveGain) && compf(lhs.fresnelColor, rhs.fresnelColor)
            && compf(lhs.fresnelOpacity, rhs.fresnelOpacity) && compf(lhs.fresnelTeamColor, rhs.fresnelTeamColor)
            && lhs.animations == rhs.animations;
}
Code:
bool operator==(const TextureEdit &lhs, const TextureEdit &rhs)
{
    return lhs.replaceableId() == rhs.replaceableId() && lhs.path() == rhs.path() && lhs.flags() == rhs.flags();
}
Something goes wrong in either the layer comparison or the texture comparison. It only happens with materials that have the same amount of layers.

edit: OMG I'm such a dumbass, that return true statement has to be outside the loop, how did I not notice this until now *facepalm*
Ok, fixed xD

edit:
Destroys the caterpillar animation (Tank_WW1.mdx + T_GroundVehicles.blp)
Fixed. I forgot to take global sequence animations into account when deleting unused keyframes.
 
Last edited:
Level 12
Joined
Jan 30, 2020
Messages
875
Oh well I knew asking you to post the code would help :D

Interesting syntax, I think I should indeed learn some C++, it does indeed remind me of C when I was using it ages ago !

It reminds me I haven't tried altering operators since I came back to development, I suppose it can also be done in Lua, and will check it out, thanks for posting the code again.
 
Oh man it's a major bug that's causing the ForgottenOneBirth animation to break. All implemented nodes lose their parent nodes if they aren't of an implemented type. *facepalm*

Edit: updated, all the reported bugs should be fixed. The MDL file geoset extent reading is still bugged though.

^ Yeah IMO C++ is a rewarding language to code with. Although I don't have much experience with anything else besides PHP and jQuery (and vJASS :p).

Edit: updated again, found the issue with MDL geoset extent reading, something really dumb again ^^

Edit: uploaded v1.1.8, geoset animation deleting implemented =)
 
Last edited:
Level 12
Joined
Jan 30, 2020
Messages
875
Sounds like 99% of the mistakes that made my map bug along the last 6 months :D

Thanks for your work, this is getting big. Will try the animation deletion a bit later.
 
Level 12
Joined
Jan 30, 2020
Messages
875
Wow I was so busy that I nearly missed the update (although I'd need to stay away from Hive long to really miss that ^^)

thanks for this update, will tell you if I hit any bug.
 
Level 12
Joined
Jan 30, 2020
Messages
875
Awww nice !

Didn't encounter issues with 1.1.9 yet anyways :)

So yes, nice UI change, for some inexplicable reasons it feels like being on The Hive ;-)

I like it a lot, I hope everyone will agree on this.

Small note : where has the default precision display gone ? ^^

EDIT : Ok it is there, just not enough width to see it properly.

EDIT 2 :

Ok rather than testing the new version with my usual list of models, I extracted all the current models from my map, and tried the optimization alone for MDXs without conversion.
All options were left as default.

First, know that the map has lost 200Kb after the operation, when many models were already optimized with an early version of your tool.

Nearly all models that were reduced in size seem to be working so far, but I had issues with 2 models.

First my StormBell tower, a model made out of pieces from @Mythic's Starfall Empire series.

Here is how the model looks in RMSRH before optimization :

StormBell1.png


and then after :

StormBell2.png


The second problematic model is a missile I made by modifying the POTM's Classic Searing Arrows missile. Here it is before optimization :

UMB1.png


and then after :

UBM2.png


I have attached both models for you to see what went wrong there.

Thanks again for your hard work !
 

Attachments

  • StormBell.mdx
    60 KB · Views: 44
  • UltimateBouncingMissile.mdx
    6.3 KB · Views: 87
Last edited:
Level 12
Joined
Jan 30, 2020
Messages
875
Thanks for your extra test !

Fun enough you don't seem to have the width problem with the precision drop down.

Maybe it's because I have high DPI small screen :O
 
Thanks for the tests! Will fix asap.
I think the dropdown width may be because its padding is 0, didn't notice it on my screen either.

Edit: Could you maybe send the reforged textures too? Only the ones for the particles should be fine, so I can see if they're still blocky like in the screenshot.
 
Last edited:
Level 12
Joined
Jan 30, 2020
Messages
875
Wait.

The missile is the Classic Reforged version, I just forgot to convert it to 800 when I modified it, but it should use the classic blp textures.

As for the StormBell edit, I just attached the only external texture it uses.
 

Attachments

  • AtlanteanBTex.blp
    44.4 KB · Views: 45
First my StormBell tower, a model made out of pieces from @Mythic's Starfall Empire series.

The second problematic model is a missile I made by modifying the POTM's Classic Searing Arrows missile.
Fixed! I will fix the UI problems later.

This one is a bug in the model. It has two geoset animations for the same geoset, the "Delete Duplicate Geoset Animations" option deletes all except the first, there's no way to know which one is best.

Fixed!
 
Level 12
Joined
Jan 30, 2020
Messages
875
True, but you did the hardest part.

And now the community has a complete optimizer / converter with maximum compatibility already.
And I can't imagine when more features are added and more bugs fixed.

I can't imagine this not being one of the main tools for any dedicated modeler (and not only modelers) :)
 
Level 12
Joined
Jan 30, 2020
Messages
875
Yes it is, wonderful !!!

Thanks for the fix.

EDIT :

Ok just had a glimpse at v1.2.0, the UI improvement indeed gives better visibility !

Haven't found any more visual glitch on the interface btw :)

Haven't yet checked the new sanity options yet, but will do some tests tomorrow !
 
Last edited:
Ok just had a glimpse at v1.2.0, the UI improvement indeed gives better visibility !

Haven't found any more visual glitch on the interface btw :)

Haven't yet checked the new sanity options yet, but will do some tests tomorrow !
Great, thanks!

Edit: I just ran the optimizer on all classic Blizzard models:
Total filesize reduction: 41.80MiB (36.04%).

And without Sanitation:
Total filesize reduction: 41.93MiB (37.21%).

:grin:
 
Last edited:
Level 12
Joined
Jan 30, 2020
Messages
875
Right.
tested the sanity options.
Took older versions of my map models (tested them with @GhostWolf 's sanity tester, had some incorrect light attenuation values, and missing (or too many) sequence extents) on the other hand I am not 100% I had models with missing Bind Pose Matrices as all the models worked fine ingame.

Anyways after optimizing the MDX models (no conversion for this test) with sanity options enabled, and then pasting them all in GW's tool, it seems that the only severe warnings I had left are the missing death sequences (but thats something I did on purpose) and missing opening and closing tracks on some sequences as normal warnings.

So I guess sanity options do work as far as I am concerned :)

EDIT : I still had a model with unused global sequences, maybe removing these wouldn't be too hard to implement ?
 
Last edited:
Yay! :D Thanks!

I wanted to add an option to add opening and closing tracks, but I'm not sure if there's a good way to do it. Maybe sometimes the best thing is to copy the nearest keyframe, but maybe sometimes it's best to copy the closing/opening frame respectively, if available.
Or sometimes maybe just 0 values is best.

Edit:
EDIT : I still had a model with unused global sequences, maybe removing these wouldn't be too hard to implement ?
Huh, now why didn't I think of that xD Will add it!

Edit: added

I did notice two big problems though: 1) each model processed adds to the tool's memory consumption and isn't freed until the programs closes. 2) processing continues in the background if you close the program while it's still running.
 
Last edited:
Level 12
Joined
Jan 30, 2020
Messages
875
Nice, thanks about the addition :)

For your first issue, I just learned things about C++ even before having started to use it :
"
How to avoid Memory Leak?
  • Instead of managing memory manually, try to use smart pointers where applicable.
  • use std::string instead of char *. The std::string class handles all memory management internally, and it’s fast and well-optimized.
  • Never use a raw pointer unless it’s to interface with an older lib.
  • The best way to avoid memory leaks in C++ is to have as few new/delete calls at the program level as possible – ideally NONE. Anything that requires dynamic memory should be buried inside an RAII object that releases the memory when it goes out of scope. RAAI allocate memory in constructor and release it in destructor, so that memory is garanteed to be deallocated when the variable leave the current scope.
  • Allocate memory by new keyword and deallocate memory by delete keyword and write all code between them."
I suppose you already know all that and that you'll easily find out. Fun enough feels like good old wc3 scripting ^^

As for the process not ending, found this interesting thread that taught me it could be related to your previously mentioned memory leak(s) :
How to end C++ code

I believe I will soon need to learn a lot again when getting to know C++ !


EDIT : back to sanity options.

There are issues that persist with the Ember Forge and Multishot tower models.
I didn't notice for Ember Forge because it does not show on stand animation, but it affects all other animations except spell one :

emberforgebug2.png


My Multishot tower model looked perfect in Retera's MSHRH, but its "stand victory" animation looks weird ingame :

multishotbug2.png


Attached both models used before their optimization + sanitization.
The Ember Forge I used is an edit from @Mythic himself that fixed a blinking terrain bug in top down view.
 

Attachments

  • MultishotTower.mdx
    200.2 KB · Views: 29
  • Ember_Forge_Edit_3.mdx
    253.4 KB · Views: 33
Last edited:
Nice, thanks about the addition :)

For your first issue, I just learned things about C++ even before having started to use it :
"
How to avoid Memory Leak?
  • Instead of managing memory manually, try to use smart pointers where applicable.
  • use std::string instead of char *. The std::string class handles all memory management internally, and it’s fast and well-optimized.
  • Never use a raw pointer unless it’s to interface with an older lib.
  • The best way to avoid memory leaks in C++ is to have as few new/delete calls at the program level as possible – ideally NONE. Anything that requires dynamic memory should be buried inside an RAII object that releases the memory when it goes out of scope. RAAI allocate memory in constructor and release it in destructor, so that memory is garanteed to be deallocated when the variable leave the current scope.
  • Allocate memory by new keyword and deallocate memory by delete keyword and write all code between them."
I suppose you already know all that and that you'll easily find out. Fun enough feels like good old wc3 scripting ^^

As for the process not ending, found this interesting thread that taught me it could be related to your previously mentioned memory leak(s) :
How to end C++ code

I believe I will soon need to learn a lot again when getting to know C++ !
As far as I can tell I'm doing everything right. I didn't have any virtual destructors for base classes though, I added them but to no avail :(
I guess it's not a big deal in most cases, but it does add up if you optimize a lot of models.
Process ending is related to threading, processing happens in a separate thread and I need to interrupt its event loop. Currently I just tell it to quit but then it waits until the event loop ends.

EDIT : back to sanity options.

There are issues that persist with the Ember Forge and Multishot tower models.
I didn't notice for Ember Forge because it does not show on stand animation, but it affects all other animations except spell one :

View attachment 357975

My Multishot tower model looked perfect in Retera's MSHRH, but its "stand victory" animation looks weird ingame :

View attachment 357976

Attached both models used before their optimization + sanitization.
The Ember Forge I used is an edit from @Mythic himself that fixed a blinking terrain bug in top down view.
Ah, will try to fix it asap. Unfortunately in the next few weeks I'll only have time in the weekends, so updates will slow down.
 
Level 12
Joined
Jan 30, 2020
Messages
875
UPDATE :

OK I went through my Flying Balls and Rolling Ball models as I plan to do some changes on them.
I hadn't tested them with the latest version of MOP, so I thought it would be a good occasion to test them with it.

At first i put all the options to convert from MDX to MDL, format 800, and the resulting models had some issues:

- Both models had their first bone Pivot Point set to { 0, 0, 0 } instead of the initial { 0, 0, 120 } and { 0, 0, 60 }, messing up the corresponding geoset animations
- Deleted consecutive identical keyframes resulted in messed up visibility for the Flying Balls : all wings seemed to show at the same time
- The first geoset of the Flying Balls is a plane that drive the first wings type and their flapping is managed by the 2 first Bones. For this to work, all wings planes have these two bones using the same geoset, with a different Bone rotation animation, but the same Geoset Animation because that one manages the visibility.

For some reason, the first wings plane had its 2 bones messed up (all the others were properly handled even with their identical structure) :
The both had their Geoset Id and Geoset Anim Id reset in spite of the proper matrices in the Geoset :

Bone "WingsLeft" {
ObjectId 0,
GeosetId Multiple,
GeosetAnimId None,
.....
Bone "WingsRight" {
ObjectId 1,
GeosetId Multiple,
GeosetAnimId None,
.....

And I had to change them back to make the wings flap properly again :

Bone "WingsLeft" {
ObjectId 0,
GeosetId 0,
GeosetAnimId 0,
.....
Bone "WingsRight" {

ObjectId 1,
GeosetId 0,
GeosetAnimId 0,
.....

Once these values changed (having disabled the option to Delete Same-ish keyframes, the model worked perfectly again)
Note that the Rolling Ball model worked fine by just fixing the first bone Pivot point.


With the same options, I then tried to convert a special Jaina model from the tutorial explaining how to change textures ingame using material animations, but the converted MDL crashed Retera's straight away.

I have attached all 3 source MDX models, including both textures for the texture animation of the special Jaina model.

I hope you'll be able to fix these issues, when you have more time.
Take care !!!

EDIT : I hope you still have the Ball and the 3 Wings textures, if not let me know.

EDIT 2 :
@Retera s MSRH doesn't seem to be able to handle the Jaina model animated textures, and removes the first one.
I had to use Magos Model Editor to be able to save it to MDL and replicate the material structure to try to apply that to the geosphere geoset of my Flying and Rolling Balls models.

The idea is replacing the Billboarded planes for the victory animation (roasting balls) because they have transparency issues (can't render a plane with transparent parts to not be transparent in all angles), and also because if they are vertical planes, they won't show properly if the camera is in Top-down view.

The main reason I want to use texture change with material animations is to avoid having to add a new Geosphere geoset to the model, at it is quite large compared to the rest of the model.

EDIT 3 : Currently finishing my adaptation of Flying Balls.

It made me realize that @Retera's MSRH was not responsible for the Jaina texture issue :
The maker of the model did only include the second texture in his texture change, thus there were no reference of the first texture.
 

Attachments

  • FlyingBalls.mdx
    244.5 KB · Views: 29
  • ForsakenJaina.blp
    74.2 KB · Views: 21
  • HolyMage.blp
    86.8 KB · Views: 24
  • JainaWithAlternate.mdx
    276.4 KB · Views: 22
  • RollingBall.mdx
    230.3 KB · Views: 25
Last edited:
Hmm, I'll try fix this next weekend.
I think I may have made it so a frame iis deleted when it's the same as the previous OR the next one, while it should be both, I think.

- Both models had their first bone Pivot Point set to { 0, 0, 0 } instead of the initial { 0, 0, 0 } and { 0, 0, 0 }, messing up the corresponding geoset animations
Don't really understand this one?
 
Level 12
Joined
Jan 30, 2020
Messages
875
Yes sorry about pivot points, I edited my post, wrong copy and paste ^^

Just in case you'd want to double check, I just attached my 3 last models, the Balls are now simplified thanks to the texture animations.
They use a new texture at path "Custom Textures\Star.blp".

I had to remove the other Roasting Ball texture called "sun.blp" as it was made for a billboarded plane, the Star one is made for geosphere with proper polar projections.
 

Attachments

  • BurningFireTower.mdx
    88 KB · Views: 27
  • FlyingBalls.mdx
    84.9 KB · Views: 24
  • RollingBall.mdx
    78.7 KB · Views: 24
  • Star.blp
    59.9 KB · Views: 26
Great tool for compressing models.
Even if i'm not a software professional nor a experienced modeler, i can tell this can have some more polishing (like any devices that's not surprising).
I would suggest a feature to optimize a map mpq archive directly, and for each models find the best options to make it squishy. Sometimes the optimized model is far heavier so making everything auto would be a fine addition to our collection. For example it would convert a model into 10-20 common options variants then picks the one which is the smallest. A bit long but of course you do would this only once per map.
And why not couple it with the BLP lab to make a very strong map ressource optimizer. Even if map size limit is 256Mb, lighter it is, faster it would be downloaded with potato wifi.
 
Top