Plugin Comparison - Ezekial711/MonsterHunterWorldModding GitHub Wiki
The aim of this section is to provide a thorough comparison between the CrazyT's Plugin and Asterisk's Plugin.
Overview
TheCrazyT's Plugin
TheCrazyT's plugin was the first importer-exporter plugin available, it's a mostly direct port of PredatorCZ's 3dsMAX plugin. This has been the only plugin for mod3 editing mod3 models for MHW for a long time and was what sparked almost the entirety of modelling research and documentation. However, as it was written before the format was fully understood and there were numerous significant voids in the knowledge base it wasn't possible to create a true importer-exporter.
The plugin operates by keeping a link to the original file being imported, and at export time performing careful surgery over the data of the original file. Structures that haven't changed are left untouched and counts and offsets are recalculated on a need-to-work basis. The main advantage is that unknown structures are preserved untouched so the chances of functional results were on paper much higher than defaulting unknowns to 0.
Asterisk's Plugin
AsteriskAmpersand's plugin was developed after more research had been performed on the peculiarities of MHW's model format. Most explicit design decisions were made from the experiences with the CrazyT's plugin and informal modder survey's regarding wanted features. Special care was put on error reporting functionalities for understandable actionable errors. It was written after a significant corpus of documentation had been amassed and as a result it has a number of improvements in terms of editing capabilities compared to CrazyT's plugin.
The plugin is a true importer-exporter, it keeps no links to the original files, it's entirely self contained. The import process deserializes a mod3 file into a full object structure which it then maps entirely to blender classes and properties. The export process performs this in reverse, it serializes blender data and creates an entirely new file. Unknown fields are tied to blender custom properties (in particular ID properties which blender saves to intermediate formats such as fbx and blend) and can be edited from blender itself, or copied between objects without having to resort to a hex editor.
Feature Comparison
Feature | TheCrazyT's Plugin | Asterisk's Plugin |
---|---|---|
Mesh Editing | Limited to Number of Meshes of the Original | Unlimited meshes, does not need originals. Requires setting properties |
Skeleton Editing | Not possible | Fully supported as a tree of empties, including extension and major editing |
Pose Editing | Only saves mesh changes and not skeleton positions | Possible through an intermediate unsupported script |
Weight Editing | Loads weights as they are, silently drops 4th and 8th weights | Full weight editing and custom notation for explicit negatives |
Custom Property Editing | Supported for LOD and Blocktype | Supported for all properties including Materials |
Normal Editing | Supported on Write through Export Normals | Supported on Read and Write through Export Split Normals |
Tangent Editing | Impossible due to Blender Lacking the capabilities | Impossible due to Blender Lacking the capabilities |
Blend Compatibility | .blend files are local only and must keep a live link to the original | .blend files can be freely exchanged as they are self contained and do not rely on the original mod3 at all |
Error Handling | Errors reported by Python. Solved through community folklore. | Errors and Warnings log on the console describes all of the suspicious cases and user errors and suggests fixes when concise. All of them are documented on the wiki as well. |
Misc | Bone and Mesh names have to match originals | Bone and Mesh names are arbitrary and can be freely changed |
Mesh Editing
CrazyT Plugin
- Meshes are tied by name to the original meshes. The exporter writes back by identifying scene meshes with file meshes.
- Properties are copied from the file mesh (more properly they are never modified in the process).
- Name encodes blocktype.
- It's possible to create new meshes through a "cloning syntax" based on blocktype and name.
- Meshes not in the scene are not overwritten (even if they are the highest blocktype).
- Base model meshes can't ever really be deleted (only left bereft of vertices) and their properties aren't updated.
- Files can become corrupt because of the above. This forces them to only be loaded at highest LOD or the importer will crash.
Asterisk's Plugin
- Meshes are serialized on write as a result all of the mesh data is already on blender.
- Mesh names can be freely chosen and meshes can be reordered.
- Mesh Properties can be edited at Data Properties > Custom Properties.
- No limit on number of meshes.
- Blocktype can be removed so the exporter automatically determines the correct one.
- The exporter serializes the structure. Anything not on blender no longer exists. Meaning no parasitic lower LOD meshes.
Skeleton and Pose Editing
CrazyT's Plugin
- Skeleton editing only modifies LMatrices not Skeleton or AMatrices. This means it's never recommended as AMatrices are the ones used by the game for determining positions.
- Produces an armature which allows animating which is useful when not exporting back.
- Armature bone names must not be edited as they are used when writing back.
Asterisk's Plugin
- Skeleton editing calculates the LMatrices, AMatrices and saves changes to bones.
- Bone properties are decomposed into Custom Properties (Function and Unkn2), Position (x,y,z, length) and Modifier (SymmetricPair called Child).
- Bones can be fully edited. They can be transplanted between models, moved around or deleted.
- Produces a tree of empties which sadly does not allow posing. There's a script that overcomes this limitation but it's intended only for temporal posing. It's necessary to revert to rest pose before exporting as the skeleton written to file is the tree of empties.
- Bones can be freely renamed.
Weight Editing
CrazyT's Plugin
- Allows weighting freely. However if more than the blocktype's capacity are present it will silently drop the weights.
- Weight groups must be named after the bones. Since bones can't be renamed weight groups also can't be renamed. Weight groups without a bone crash the exporter.
Asterisk's Plugin
- Plugin will warn when a vertex has 4 weights if the user doesn't explicitly set a weight of the 4 to be a negative group when the blocktype is fixed to 4 weights. Ditto for 8 weight blocktypes.
- Plugin can deduce blocktype based on mesh properties including weights (inference is enabled when blocktype is removed from mesh custom properties or sets blocktype to only being a warning).
- Weight groups must be named after the empty tree nodes. Weight groups without a node will follow the error level set for this abnormality (can be ignored, can raise a warning, can be made to stop the process).
Custom Property Editing
CrazyT's Plugin
- Only possible for Blocktype and LOD.
Asterisk's Plugin
- Possible for every custom property, either directly or when possible as part of blender tools.
- Material list is automatically expanded if a mesh has materials not on the mesh header.
- Blocktype can be calculated by the exporter if not present in the mesh (removing the blocklabel property tells the exporter to recalculate it).
Blend Compatibility
CrazyT's Plugin
- Because the plugin requires the original file when exporting it only works on the computer that created it, and as long as the original file isn't moved.
Asterisk's Plugin
- All information is stored on blender, blend files can be freely shared.
Error Handling
CrazyT's Plugin
- There are specific cases where the exporter might print a possible reason.
- Most errors are handled by reading the stack trace and community folklore.
- Some errors occur because of the original file and not anything within the blender objects.
Asterisk's Plugin
- Error level is customizable depending on the user objects abnormalities present.
- Error and warning fixes are suggested on the warning or error itself.
- Error's identify in what part of the scene they ocurred and how many times they are present in an object.
- The wiki contains a complete listing of user caused errors and suggested fixes.
- It also includes explanations of the error level customization and the rationale behind the defaults.