WORK IN PROGRESS
Other modelling programs
More on Animation
Models for Morrowind use the NIF format v 3.3.1 to 184.108.40.206. To export a new NIF model, your choices are 3ds Max or Blender.
NifSkope isn't meant to be a full modelling program, but is used to edit nif files in ways other programs and exporters can't.
The game's models usually have to be extracted from its BSA files (utility). For original textures, better quality files may exist from the CD (see Texturing). For an overview of available models and textures, see Guide to the Models of Morrowind ; Guide to the Textures of Morrowind ; Visual Index (vanilla), Visual Index WIP (Tamriel_Data) ; heads catalog ; clothing catalog.
Fixed or optimised versions of vanilla meshes may be found in the Optimisation Patch or Project Atlas.
The nif format was originally designed to replicate the data structure of MAX, and full capabilities for exporting nif files for Morrowind are for 3ds Max versions 3 to 5. Those versions of Max are outdated and no longer available. Max is no longer well documented for Morrowind in the english-speaking community, so don't choose this option if you aren't comfortable with figuring things out yourself.
If you do have access to Max 3 to 5, you can use the public version of Bethesda's own exporter for 3 or 4. The same official exporter works for Max 5 for models that "do not require morph". An unofficial importer was available: NifPlugin v0.11 is the beta version from 2004, origin of later versions of MaxNifPlugin. Niftools' MaxNifPlugin for newer versions of 3ds Max is incomplete and abandoned. Several other plugins and forks exist. Newer plugins meant for Skyrim may work to import Morrowind meshes.
- Beginners guide by Thanatos (PDF)
- Notes for modders from Symphony team (in Russian, auto-translate works well) contains many notes on Max and modelling in general.
- Archived page for more information and tutorials from 2004 as well as some original max files from Bethesda.
- RX31 Animations Toolbox for Morrowind and Oblivion: user script tools for max 5
Like with Blender, there are things that can't be done by the exporters but can be done in NifSkope after exporting the model, for example copying particle animations into the XNIF file of an animated creature or activator.
2.78 - for non-animated
A new nif exporter that works with Blender 2.78: current version is in development by @Greatness7 on the Discord server. (installation: file->user prefs->addons->install from file->that zip file, then navigate to "data files" path below and save preference) As of Nov 2018, besides simple meshes, it supports rigged meshes if there isn't more than one root bone*, and can export simple object animations like geometry morph.
*Multiple root bones isn't something you'll see as multiple armature roots in the structure when opening the file in nifskope, it can be seen in the "Skeleton Root" property of NiSkinInstance: roots are multiple if some of the skinning nodes give a root other than the Bip01 root. Examples of multiple root nodes are the vanilla skins that contain both bodies and hands.
To work with meshes that originally contain particles, use NifSkope to remove them before importing and paste them back after exporting.
2.49 - for animation
The last stable nif exporter that supports actor animations is for Blender 2.49b, an old version from 2009.
Full download and installation instructions for Blender 2.49b and nif plugin
Importing: default import settings.
Exporting: export settings, select Morrowind in the list.
Limitations: Blender/Niftools isn't able to import and export everything properly even with the old version.
Things that don't work:
- importing skinned meshes from Bethesda's files creates issues with the skeleton (includes the original NPC animation files base_anim). Solution: use the new 2.78 plugin to import and export the skinned mesh without animations (like the xnif for creatures).
- particle effects. Solution: copy-paste from another mesh and edit them with NifSkope, or create with 3dsmax.
- special flag strings like NC or NCO for "no collision". Solution: fix them in NifSkope after exporting.
- node type of the collision mesh: an imported and re-exported vanilla mesh will change the collision node type to "NiNode" and give it the name "collision". Solution: use NifSkope to change the node type to "RootCollisionNode" after exporting.
- animation: quaternions aren't fully supported. The conversion to rotation matrix when importing can create bugs around angle singularities (-180/180) that you'll need to fix manually, and with quaternions edited in IPO curves the rotations can sometimes look different after exporting.
- animation: importing KF doesn't work for Morrowind files. Solutions: you can manually copy each part of the KF file into its bones in a nif with NifSkope.
- animation: vanilla skeleton poses can't be flipped/mirrored because rotations are correctly swapped between left and right but the wrong values are inverted.
Other modelling programs
Because of preference or because the old version of Blender isn't user-friendly, you may want to work in another program first before transfering your model to Blender to export in the NIF format
- Wings3D (free): Wings 3D tutorial with RubberMan
- Maya had a old nif plugin but many features are unsupported
Download link version 1.1.3
Basic use tutorial
Nifskope alchemy for Morrowind
For more advanced uses, Notes for modders from Symphony team (in Russian, auto-translate works well) contains many notes on the nif format and modelling and much knowledge that can be applied in NifSkope.
Use NifSkope 1.1.3 for Morrowind. Later versions of NifSkope abandon the Morrowind renderer in favour of newer games like Fallout, which means graphic options like materials will not look the same in NifSkope as in the game; the default settings of later versions also export nif files that don't work with Morrowind. If you still want to use a later version of NifSkope, go to Options->Settings->NIF, set Version to 220.127.116.11, User Version to 11 and User Version 2 to 11.
When changing or giving textures, NifSkope will by default give absolute paths, which won't work if users have Morrowind installed in a different folder. You should shorten to relative paths. For example if the full texture path is "C:\Program Files\Bethesda Softworks\Morrowind\Data Files\Textures\A_Bear_Boot2.dds", the relative path is "Textures\A_Bear_Boot2.dds". NifSkope will shorten new paths automatically for you if you go to Render->Settings...->Rendering->Add Folder and set the path of your Data Files folder.
Common uses of NifSkope: (see Nifskope alchemy for Morrowind for more)
- give "no collision" property: right click, Block->Insert->NiStringExtraData (not to confuse with NiStringsExtraData), give it the name NC and look at its node number, click the top-level node 0, find "Extra Data" and double-click on its Value field, give it the node number of the NC you just created.
- fix broken/visible collision after export: after exporting with old Blender, find the "NiNode" called "collision", change "NiNode" to "RootCollisionNode", names are not needed. You can optionally first click Flags and tick hidden (before changing the node, or add 1 to the Flags value anytime) for NifSkope to hide it when not viewing hidden objects.
- fix wrong ingame position, rotation or scale (when changes were made in blender or nifskope that do not appear in the game): right click the node, Transform->Apply
Some properties are stored in a "Flags" value, which can be the sum of several values. For instance collision nodes have the value 3, which is 1 (hidden) + 2 (triangle collision). The values have different meanings depending on the node type and NifSkope gives an interface for some of them when clicking the flag icon, but not for NiBSAnimationNode which you have to edit directly (see "NiBSAnimationNode flags" in animation basics below).
Linked to the root node 0, stores the following properties. You probably won't need several of these 4 properties at the same time, but you can chain more than one by linking in the "Next Extra Data" value of the NiStringExtraData.
"NC" (no collision, "NCO" is the same as "NC"),
"MRK" (make the mesh invisible in the game but visible in the editor; the name of the NiTriShape must start with "Tri EditorMarker"; example in EditorMarker.nif),
"RCN" (for more reliable collision of moving objects, example in in_dagoth_bridge00.nif),
"sgoKeep" (do not cull empty hierarchies, only useful for skeleton nodes, nif "bones", needed on particle effects and their emitters).
You can't use "attach kf" in NifSkope Spells for Morrowind kf files. A slow manual workaround is to copy each NiKeyframeController (with only NiKeyframeData under it) into its bones in the NIF file.
- DDS is the standard format for Morrowind. Use DXT1 compression if the texture has no alpha channels (has no transparency), use DXT5 if it has alpha channels. See this forum link about texture formats and optimisation.
GIMP plugin to export to DDS: download link, how to install. Don't load mipmaps when importing, use mipmaps when exporting. Mimapping, also called "pyramidal filtering" or "trilinear interpolation", stores copies of the texture in levels a quarter the size of the prior level, will improve texture aliasing and should be used in almost all cases; it increases VRAM use by a factor of 1.3.
- TGA is supported (32 or 24 bits, not 16) but is several times larger. Usually not preferred, might be used for more precise alpha channels (where smooth alpha transitions are needed, like halo effects for magic spells) or greater image quality (images in books).
- BMP is supported but has no advantages and shouldn't be used.
Resolution must be by powers of 2, square or rectangle (2x2, 4x4, 8x8, ..., 256x256, 512x512... or any rectangle combination, like 1024x256). Textures that have the same dimensions are more quickly interchanged by VRAM, having a lot of textures with widely varying sizes defeats this; aspect ratios over 8:1 can fragment VRAM and are not recommended, unless required for atlasing (see next).
Keep your uncompressed source textures so you can export higher resolutions later. If you're using vanilla textures as a base, you can sometimes find an uncompressed BMP in the construction set CD, or in the loose data files of the GOG version; if you don't have them you may find some or all of these files in uncompressed dds here (nexus link) or here (mediafire)
Meshes should use a single shape with a single texture for better performance. See Project Atlas: a texture atlas (also called a sprite sheet) is an image containing a collection of smaller images, usually packed together to reduce the atlas size. Vanilla Morrowind has objects split into different shapes each using its own unique texture. This is bad for performance and is one of the game's primary FPS bottlenecks. More comments on atlasing. For compatibility with atlasing, individual trishape UVs should not tile in both horizontal and vertical directions.
Texture names aren't generally subjected to the same limit (32 character including extension and folders) as meshes, but sometimes texture names that are too similar to each other will create texture hash map collision in a bsa. Not currently predictable and the only solution when it happens is to change the names? See BSA format document on its hash algorithms.
Glow maps: Glow map tutorial - Another glow map tutorial
Transparency: NiAlphaProperty flags, usual values are 237 or 4845. Alpha blending parameters use a similar format to Oblivion and Skyrim, some of the same tips apply. See What is color blending?
Possible sources for textures: Archive textures, Spiral graphics (seamless),
Double-sided UV: use NiStencilProperty
- Rigging Character Assets For Morrowind tutorial for Blender 2.78+
Rigging, skinning or physiquing is making objects animate with bones. Used for creatures and equipment. Vanilla Morrowind notably uses skinned meshes for objects that get deformed when the player moves: chests, robes, skirts, gloves... In the CS body parts and equipment can also associate separate meshes to body slots without skinning (example: pants segmented in Groin, Ankle, Leg and Knee). Equipment body parts with left and right sides only need a "right side" bodypart, the game mirrors the mesh to the left.
To be visible when worn in the vanilla engine, equipment needs:
- to be a visible object type (not an amulet, ring or belt)
- to take at least one visible equipment slot, which normally means making a body part invisible (example: open helms replace the "hair" slot, closed helms replace the "head" slot). More on slots:
All equipment slots make their corresponding body part invisible when equipped except both pauldron slots (which is why old mods often use pauldrons as a hack to display objects like quivers on NPCs; standard equipment in the game however uses both a "pauldron" slot and an "upper arm" slot for pauldrons, and sometimes "forearm" as well). A couple slots overwrite and hide other slots (the "skirt" slot overwrites the "groin" and "upper leg" slots, the "head" slot overwrites the "hair" slot). Other body parts can also be hidden by the same object by replacing their slots with nothing (for example to avoid clipping; robes replace the "chest" part, and hide the "ankle" parts). Thanks to skinning, it's possible to use one visible slot and have part of the mesh be rigged to follow another body part entirely, the same way robes follow the whole body (example: replacing the "neck" with a scarf that also includes a mask on the face is practically the only way to create a headwear "helm" that doesn't hide hair in the vanilla engine).
When making skinned meshes for other body parts, the body slot used by the "Body Part" object in the CS matters. Example: to make skinned equipment based on the Neck slot, the main node under Bip01 must be named "Tri Neck", and each NiTriShape in it named "Tri Neck 0", "Tri Neck 1"..., numbered starting from 0 and without skipping any numbers. When a mesh is skinned to Bip01, no shapes will be rendered outside of those that are parented to Bip01 and that follow the above name convention.
In Blender skinning is applied with the Weight Painting mode. Both the new and old plugins for Blender (2.49b and 2.78/2.79) can export skinned meshes.
Morrowind uses two main types of animation: keyframes and controllers.
- Keyframe animation is either started by scripts (for ACTIvator, LIGHT and DOOR type objects only; example: "OutsideBanner") or called in a hardcoded manner by the engine (NPCs and creatures, with fixed animation names like "idle2", and the head body part for blinking and speaking). Keyframe animation uses three files: NIF, xNIF and xKF (example: "Furn_banner_tavern_01.nif", "xFurn_banner_tavern_01.nif" and "xFurn_banner_tavern_01.kf"). The NIF file can contain both geometry and animation and is used exclusively by the Construction Set (as far as the game is concerned it can technically be reduced to a skeleton with no animations), while the xNIF and xKF files contain only geometry and only keyframe animations respectively and are used by the game. Exceptions: head body parts have text keys but only use the NIF file, and xNIF files can also contain additional animations (examples: NiVisController XDremora.nif, NiBSParticleNode in XKwama Forager.nif).
- Other controller animations run on their own based on time and only need the NIF file. Examples include animated particles (Ex_waterfall_mist_01.nif), UV as in animated texture (Ex_Vivec_waterfall_01.nif), geometry (NiMorpherController), alpha (magic_hit_Levitate.nif - note: such magic effects used by the engine work in NiNode, but for objects they need NiBSAnimationNode with certain flag values or 32, see "NiBSAnimationNode flags" below)...
NPCs: Animation files can be attached to individual NPCs and overwrite only existing animation types (described here), and animation types that aren't overwritten are kept from base_anim (example: "breton dancer girl").
Animations are sampled at 15 FPS, the smallest time between two keys is 0.0667s. In Blender, the default frame number is the time key multiplied by 30, plus 1.
Blender animation tutorials
- NPC Animation tutorial and resource for Blender 2.49b
- Head animation tutorial
- Creature animation tutorial
- Bow animation tutorial
- see animation sections below for more Blender tips
3ds Max animation tutorials
- Animated textures and particle effects (in same guide by Thanatos) PDF link
- Morrowind Animation Tutorial by DarkIllusion PDF link
- Animating faces (Rhedd archived)
- Archived thread on MWMM
- Archived page from ThanosTower, including blank animation resources from Bethesda
Liztail's Animation Kit (MMH link, nexus link) is a utility for both players and modders centered around modifying the NPC animation files.
Besides modding tail bones, the main functions for modders are:
- split_kf: Split full animation KF files into smaller single animation ones. Limitations with Split:
- multiple text keys: at worst split can stop as soon as it finds a key with several lines that have different anim names and no longer exports any of the animations that come later in the file, without any error message. At best split divides animations that share the same keys into several kf animations, including frames on which one animation stops and another starts, so an animation file that is split then re-merged by animkit can become much heavier with no added benefit.
- files exported by the blender 2.49 plugin can't be split by animkit.
- merge_kf: Merge small single animation KF files into big multi-animation ones. Limitations with Merge:
- doesn't support several animations with different names starting on same frame; if there are more than one, you'll have to add them back to the text key in nifskope.
- doesn't support scale keys and only supports linear controllers for translation and rotation.
- merge accepts only base_anim animation names for text keys, and they are case sensitive: "Knockdown" will be correctly found and merged, "KnockDown" will not.
- since base_anim names only are used, merge only supports NPC animations. If you want to merge animations from creatures that have the same skeleton as NPCs you'll first have to adapt for case sensitive keys like "KnockDown", and for anims that have names that don't exist for NPCs, like "Attack", you'll have to at least temporarily rename the files to other NPC animation names; you may also need to check and rename the text keys inside the corresponding kf file, and take into account that not all animations are "Start" and "Stop", some have loops, NPC attacks have different keys...
- merge reorders the timeline and will probably change the order in which the bone keys are chained in the kf. The different times may break compatibility with animated equipment.
- preview_kf: Preview animations by applying each to a nif file with a skeleton. Limitations with Preview:
- the rigged nif can't be directly imported by the blender 2.49b plugin
- creates one nif for each animation in the kf, even if you merge all animations into the same kf first. It's only meant to be used to easily preview what each animation key looks like. To trick animkit into creating a single nif instead of one nif for each animation: open the merged kf in NifSkope, click NiTextKeyExtraData, take the time from the last textkey, and edit the second text key to have the time of the last textkey. To fix that nif in NifSkope: remove its NiTextKeyExtraData, open the unmodified merged kf, expand NiTextKeyExtraData, remove the NiStringExtraData branch under it, copy the NiTextKeyExtraData, paste it into the previewed nif and look at its number, click the root node (0 NiNode) and give that number in Extra Data.
More on Animation
Combining separate animations:
Morrowind animations are all in a single file and that's very inconvenient to work with. To separate and combine KF files only, see AnimKit.
For Blender 2.49, to separate and combine animations from different files, use File>Append or Link>(click .blend file)>Action>(DefaultAction or name of the action containing animations), then use the Action Editor to browse for the new appended action. To copy or paste from one action to another, first select the bones in pose mode or channels in the editor: picture.
Applying animations from a KF file to a skeleton:
Neither NifSkope nor the Blender 2.49 plugin can import Morrowind KF animations into a NIF file. With NifSkope, a slow manual workaround is to copy each NiKeyframeController (with only NiKeyframeData under it) into its bones in the NIF file.
Importing Bethesda's animated creatures into Blender 2.49b:
Currently the easiest way is to combine the old plugin's ability to work with animations with the new plugin's ability to import a rigged mesh, and using NifSkope to work between the two. Example:
1. Import the creature's original XNIF file in Blender 2.78+ with the new plugin, then export it again. Now you have a rigged mesh and skeleton you can import into Blender 2.49b.
2. Combining the animation:
- Append method: For some creatures this won't work perfectly or the root node's action could be lost and need to be restored later with NifSkope. Import the creature's original NIF file in Blender 2.49b. The armature and rigging will be wrong, but nevermind that. Save it as a blender file. Import the XNIF that you exported before from the new Blender, into Blender 2.49b. Use the File>Append method described earlier to take the animation from the blender file you've saved.
- Rig replacement method: using NifSkope, delete the rigged meshes from the creature's original NIF file, and in their place copy paste the rigged meshes from the XNIF file exported with Blender 2.78. Import the new file into Blender 2.49b.
For some creatures if neither of these methods work, pure skeleton method: delete the rigged meshes from the creature's original NIF file using NifSkope, import the skeleton only into Blender 2.49b to work on the animation (you still need to have at least one mesh parented to the skeleton for the plugin to import the nodes as bones), then when you're done with animation work, export the animated skeleton and paste the rigged mesh you want into the file with NifSkope. An alternative is to delete only the skinning data nodes from the meshes before importing into Blender, and either re-rigging the creature for good or just as a temporary rig to work with.
Editing keyframe strings in Nifskope:
When editing text values, pressing Enter applies the change and closes the text box which doesn't let you jump a line. To create line returns, you can press Shift+Enter.
Animation properties are stored in the flags value, often 42 as commented by NifSkope. Value 32 or 42 is often needed for objects to animate, with exceptions for creatures or animated equipment worn by the player. Expand to see more flags:
1 = hidden (not rendered by default, may still be unhidden by a visibility controller)
2 = triangle collision detection, 4=bounding box collision detection (usefulness is unknown)
8 = ignore skin influence
16 = unknown, not used
32 = ignore parent animation (without this the animation will use keyframes from its parent node)
64 = no randomness (several NiBSAnimationNode nodes will start at different times without this)
128* = attach particles to parent (if the object's coordinates change, particles will move with it)
256 = unknown, only used on the particles emitter of "smoke_green.nif"
42 = 32+8+2
96 = 64+32
106 = 64+32+8+2
* Note for creatures and flag 128:
In the vanilla engine, particles that don't ignore parent animation (not 32) aren't displayed for creatures if the particles node doesn't have the flag 128,
When a creature is created ingame by a script (as opposed to a creature or lev.list placed in the CS), particles that do ignore parent animation (32) and don't have flag 128 aren't displayed until the game is saved and loaded or, in interiors, until the player looks towards coordinates 0,0,0 where the particles are placed.
Controllers can be used in weapons and equipment with time keys that link them to NPC/player animations, but attack animations will be overridden by walk or run animations if the bearer is moving. As equipment animated like this relies on key times in base_anim, it will only be compatible with animation replacers that do respect the same time values as vanilla base_anim.
Particles on body equipment:
For NPC equipment, particles can be used on non-skinned files only, like weapons or any "body parts" that do not get deformed with the base_anim body (note that equiment can use a body slot with a skinned mesh and another body slot with a non-skinned mesh that has particles). Particle emitters on skinned NPC body, clothing or armor are not possible with the particle system of Morrowind because skinned meshes only render the trishape nodes that follow the body slot's name pattern, so there is no possible bone to serve as emitter for particles. No workaround exists before the Oblivion particle system.
For static corpse or mannequin animations in the vanilla engine the NPC animation file can technically be NIF only, but if xNIF and xKF files are missing animation types not included in the NIF will be ignored and not taken from base_anim.
When imitating vanilla meshes, keep in mind that the names of nodes matter. The root node must be called by a specific name for movement to work in the game ("Root Bone" or "Bip01" work). To move the root node in blender (for walking, running) select the armature in object mode.
Particles that are supposed to keep playing between different animations must usually be independent of parent animation (must have flag 32, see NiBSAnimationNode flags). For particles that depend on parent animation, when a new animation starts, particle lifetime can skip ahead in the vanilla engine, so there will be a noticeable gap in the emission of particles between animation types: when running direction changes, before each attack...
Rotation Type and Translations Interpolation key types (in NiKeyframeController/NiKeyframeData):
Rotations should be linear (“LINEAR_KEY”). “When rotating objects or systems, please use a Linear Rotation Controller for the best and most accurate results. TCB & Smooth Rotation are supported but not suggested and may provide wacky results in some cases. Ever have trouble in 3dMax or MaxImmerse getting something to simply rotate 360* without stuttering at the end of its rotation? Use a Linear Rotation Controller.”
WORK IN PROGRESS