• 🏆 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!

[3D Art] Tutorial: How to fix errors by HIVE's Sanity Checker / Make your model Pass the sanity check

Some people don't know how to fix some errors displayed by the Sanity Checker
A model that passes the sanity check will always function in-game, but you also have to make sure that it has the correct shape, wrapping, textures, default scaling, rotation, shading and animation.

Here I will give guides how to fix all of them. I hope it helps you debug your model.

For this tutorial I will be using War3ModelEditor
also I will be mentioning MDLvis
The optimizer I recommend is MOP

Remark

Why?: this remark appears for:
  • textures that are not used by any material
  • materials not used by any geoset
  • global sequences not used by any transformations.
  • texture animations not used by any layer or not animated

Problems caused: unnecessary filisize


Solutions:
1. manually go through all and remove them
module>texture manager>right-click>remove
module>material manager>right-click>remove
module>global sequences>right-click>remove
module>texture animations>right-click>remove
2. OR make use of them
3. use optimizer

Remark

Why?: This remark appears when in a transformation instruction (alpha/color/translation/rotation/scaling) one of the instructions instructs for a frame that is not used by any sequence

Problems caused: unnecessary filisize

Solutions:
1. Manually got through all one by one, and remove them.
2. Use optimizer



Remark

Why?: Unnecessary repetition of same or near-same instructions, that are next to each other

problems: unnecessary filesize increase

Solution:
1. compare and remove manually one by one
2. use optimizer

Warning

Why?: repeating tracks
same-png.459850


problems: potential conflict in animation instructions

Solution:
1. compare and remove manually one by one
2. use optimizer

Warning

Why?: origin is the most used attachment point by units.

Problems: if you try to attach something to the unit, nothing will happen

Solution:
name an attachment point Origin Ref
ezgif-1-af44e3af6b-gif.437973


Warning

Why?: This sequence does not havev a standard name that is used by Warcraft 3 objects

Problems: The only way to play it is with triggers.

Solutions:
Rename it to something that will fit the naming scheme of what is intented for and what warcraft 3 uses as names. more info here

Warning

Why?: Without sequences you can't expect your model to work properly in-game. Additionally, it can even cause bugs for models around it!

Problems: You may expect to see problems like these:

ezgif-2-91c9f2650b-gif.438011


solutions:
1. At least create Stand and Death Sequence

Warning

Why?: as a result of no sequences
Problems: potential visual glitches in-game
Solutions: Create sequences with frame range that fits the instructions that already exist

Warning

Why?: Without textures your model will be pitch black (if the geoset is using a material) or invisible (if the geoset is not using a material)

Problems: Without textures your model will be pitch black (if the geoset is using a material) or invisible (if the geoset is not using a material)
solutions:
1. Let your model use textures and materials using those textures, and geosets using those materials.

Warning



Why?: the Pivot point is the position of the node and if it's not present it will probably be 0,0,0.



solutions
: edit>calculate extents. When yo udo that, all pivot points that do not exist will be set to 0,0,0.


Warning

Why?: a material without layer

Problems: I don't know how a geoset reacts to a material that is uses that has no layers. Probably pitch black?
solutions:
1. create at lest one layer in that material


Warning


Why?:
1. editing the model with notepad may cause this problem, if you delete the wrong lines. Probably vertex groups were interrupted.
2. if with MDLvis you copy vertices that do not form a face / free vertices.

Problems: In any 3D model, the one that is visible is the faces. Without faces, there won't be a visible modelv. MDLvis may prompt error messages.

solutions: use optimizer to remove free vertices


Warning

Why?: every geoset has sequence extents equal to the number of sequences. Thsi is because a geoset's sequence exent decides the extent of the geoset for that particlar sequence. Without it existing, the geoset will probably take the geoset's extents.
Read down below why exents are important!

Problems
: Read down below why exents are important!

Solutions
:
1. Easier - click edit>calculate extents
2. not reliable> manually write the positive and negative extents of the the sequence/s and/or geoset/s (minimum must be less than positive extents)

1.
ezgif-1-6aa783b887-gif.437974


2.
extents-png.437975



Warning

Why?: The minimum extents must be less than the maximum extents

Problems: Read down below why exents are important!

Solutions
:
1. edit > calculate extents
2. Manually swap the positives and the negatives, or make the minimum extents be lesser than the maximum extents

1.
ezgif-1-6aa783b887-gif.437974

2.
ass-png.437976


Warning

Why?: 2 or more geoset animations use the same geoset.

Problems: This may cause problems with conflicting visibility instructions if the model is in your map, or crash it.
Solutions:
1. manually compare one by one the geosets and geoset animations and change their used geoset/s
2. delete the repeating geoset animations
3. use optimizer

Warning

Why?: this error is for light node/s.

problems: unknown

solution:
change the value to fit the requirement in the said light node


Warning

Why?: One or more of the sequences does not have any length, OR a global sequence has no length. Both cases become useless.

Problems: unknown unexpected behavaiour/errors

solutions:
1. Change the length of the sequence by increasing the value of "To"
2.Remove if useless

Warning

Why?: TRANSFORMATIONS FOR VISIBILITY CAN BE ONLY TRUE OR FALSE (1 OR 0). Interpolation is about gradually changing the values inbetween two instructions. There is nothing inbetween true or false to be changed.
Problems: unknown
Solution: set it to none
screenshot-2024-01-15-220705-png.458954


Warning

Why?: To one of the bones is not attached any geoset . Bones have to have geoset/s attached to them. I say geosets because vertices belogn to geosets and contain the indexes of the bones to which its vertices attach.

Problems:
1. unnecessary filesize increase
2. If the bone, that has no attached geosets to it, has animation instructions, it may cause visual glitches in-game
3. MDLvis will spam errors and will refuse to manipulate vertices

Solutions:
1.Attach a geoset to the bone
2. If you don't want/need any geoset attached to the bone convert it to helper and copy-paste any transformation instructions, if present
3. Delete the bone if completely useless

1.
ezgif-1-9474e17ea2-gif.437985


2.
111-png.437987


Warning

Why?: event object without tracks

problems: map crash

solutions:
delete if useless


Warning

var-png.459956

Why?: probably variation is not supposed to be animated?

problems:unknown

solutions: set to static


Severe

untitled-png.459957




Severe


error-png.460339



Severe

Why?: Stand and Death animations the minimum are standard animations required by any model to function properly.

Problems: may not work in-game. If missing death animation may have delay when disappearing or not disappear at all.

solutions:
1. add stand and death animation to your model. Module>Sequences>Create New
1.
add-png.437991


IMPORTANT:
Some people make props without death sequence. The least you could do it create Death sequence, and in the geoset animation for each geoset, set the alpha to 0 for that sequence. This way the model willl be invisible in death sequence, but the fact is that you will have it.




Severe

err-png.439585

Why?:
when you create a geoset animation and attach a geoset to it, do not leave the alpha instruction to a single value because when saving the editor will change it to 0 or near 0,resulting in your model not visible in-game and you will be pulling your hair wondering where is the problem.

Solution : use alpha transformation instructions instead.

2222-png.438007






Severe

Why?: The transformation instructions must be in sequential order.

Problems: This is critical error that will cause your transformation instructions to not work after the frame that is said as higher. All instructions after that will be ignored. This will affect all types of transformations - visibility, rotation, scaling, translation, etc., resulting in a broken model

solutions:
1. manually go and re-arrange them one by one

3-png.438140



Severe

Why?: Every sequnce's transformation/s must start from the first track. If you want it to start from a later track, then you can:
(alpha example)
opening track: 0
where does non-animated state end?: 0
animation start: 1
(if using linear interpolation)

problems: the animation may be buggy, not smooth or not working

Solution:
1. Manually add the missing track instructions in the said transformation

1.
11-png.438056





Severe



Why?: A vertex is attached to a bone, not the whole geoset attached to a bone. Vertices use a vertex group and it uses matrix groups. matrix groups contain bone IDs.
If a vertex is referencing non-existing matrix group, or the matrix group contain ID/s of non-bone nodes, or not referencing any matrix group, then it's a free vertex.

Problems: Free vertices/geosets will cause the model to not be visible in-game and/or crash your map. Also MDLvis will not open it.

Solutions:
1.Attach the free geoset/s to a bone. In war3 Model editor happens by exporting it and importing it
2. Can use optimizer to remove free vertices
3. Can attach them manually by editing raw in Notepad.

Severe

Why?: this geoset is not using any material

problems: pitch black geoset

solutions: apply material to the geoset

Severe

Why?: that's how the value works probably
time-middle-png.459851

Solutions:
Yeah.
sol-png.459852




Severe

Why?: All sequences must in ascending order of their interval (from-to). This error means that they are either not in the right order, or that some sequences' frames are overlapping.

Problems: Your model will not be visible and working in-game as it appears invalid.

Solutions:
- Save the model as MDL, open it with Notepad and manually Cut-Paste the sequences before/after another sequence depending on what the sanity test error tells you. Change the positions of the sequences, not the frames. When all is done, save it back as MDX.
aaa-png.442063


Error

Why?:
-1 means no texture
any other value means pointing to a texture that does not exist at that position


Problems:
this model will crash your map


Solutions:
Either delete the particle emitter if useless, OR set him to use a texture


Severe

Why?: the sequences' frames are overlapping
Problems: animation glitches, conflicts, possible map crash.

Solutions:
Manually edit the frames of the sequences so they don't overlap


Error


Why?: This node is referencing as parent a non-existing node.
problems: unknown.

Solutions:
1. MDLvis' can auto-fix tha by opening the model with it and saving again
2. Edit with notepad the MDL file


Error

sme-obj-png.459853

Why?: self-referencing node - node that references itself as parent.
problems: unknown.

Solutions:
An optimizer can fix that for you, or you can edit with notepad the MDL file


Error

invalid-path-png.459849


not a valid path within the MPQ I guess.

Even though it's labeled as error, it does not crash the map.

Path property is found it attachment point and particle emitter1

Problems: Unknown.
Solutions: You can just delete it.


Error

Why?: The geoset animation doesnt use a valid geoset. -1 is usually assigned to "None". But can also be a deleted geoset's ID.

Problems: This model will crash your map.

Solutions:
1. remov ethe geoset animation
2. apply geoset to it
3. use optimizer if they are too many


ezgif-1-8a245662e5-gif.437977






in transformation instructions the format:
frame : value

Translation - frame: {x,y,z}
Scaling - frame: {x,y,z} (0-based percentage)
Alpha - frame: 0-based percentage (1 for 100%, 0 for 0%, any other is 1/percentage. ex. 50% = 0.5, 30% = 0.333)
Visibility - frame: 0 or 1 (0=false, 1=true)
Rotation - (quaternion) frame: {x,y,z,w} - again 0-based - from -1 to 1 - (1/360) each value for x,y,or z is how much to rorate around that axis . The fourth value W is how much is the maximum amount of rotation (again 0-based).
Color: - frame: {B,G,R} (yes,it's reversed - instead of RGB) (The value is 0-based. 0 for 0, 1 for 255, and any other is (1 / value)
any other (integer or floating point number) is just - frame: value
Skin weight (reforged) - percentage is represented as 0-255 (like a colorcode??)



In games, the extents of a 3D model refer to the minimum and maximum coordinates along each axis (X, Y, and Z) that enclose the model's geometry. Due to different transformations inside each sequence, the extents of the model will be different for each sequence, when the model is animated.

  • decides how the model can be selected and dragged in the editor. Or if it can be selected at all. (For unit must have a collision shape)
  • Affects the collision of units, in combination with the unit property "collision size"
  • Affects the visibility of the model in the view of the game camera/s. If the extents are wrong and the model is half inside the view of the camera, might not be rendered.
  • Affects the health bar position and size.
  • Affects the pathfinding of the game engine





If I missed anything, got something wrong, or you can contribute with additional information - write here.
 
Last edited:
Top