diff --git a/nif.xml b/nif.xml index de112a2..c3d1f22 100644 --- a/nif.xml +++ b/nif.xml @@ -1,6 +1,6 @@ - + - + A boolean; 32-bit from 4.0.0.2, and 8-bit from 4.1.0.1 on. - + An unsigned 8-bit integer. - + An unsigned 32-bit integer. - + A litte-endian unsigned 32-bit integer. - + An unsigned 16-bit integer. - + A signed 32-bit integer. - + A signed 16-bit integer. - + A 16-bit (signed?) integer, which is used in the header to refer to a particular object type in a object type string array. The upper bit appears to be a flag used for PhysX block types. - + An 8-bit character. - + A 32-bit integer that stores the version in hexadecimal format with each byte representing a number in the version string. Some widely-used versions and their hex representation: @@ -99,42 +100,42 @@ 20.0.0.5: 0x14000005 - + A 16-bit integer, used for bit flags. Function varies by object type. - + A standard 32-bit floating point number. - + A 16-bit floating point number. - + A variable length string that ends with a newline character (0x0A). The string starts as follows depending on the version: - Version <= 10.0.1.0: 'NetImmerse File Format' - Version >= 10.1.0.0: 'Gamebryo File Format' + Version <= 10.0.1.0: 'NetImmerse File Format' + Version >= 10.1.0.0: 'Gamebryo File Format' - + A variable length string that ends with a newline character (0x0A). - + A signed 32-bit integer, referring to a object before this one in the hierarchy. Examples: Bones, gravity objects. - + A signed 32-bit integer, used to refer to another object; -1 means no reference. These should always point down the hierarchy. Other types are used for indexes that point to objects higher up. - + A 32-bit unsigned integer, used to refer to strings in a NiStringPalette. - + A 32-bit unsigned integer, used to refer to strings in the header. @@ -142,16 +143,22 @@ These are like C enums and consist of a list of options. They can appear as parts of compounds or niobjects.--> - - An unsigned 32-bit integer, describing how transparency is handled in a texture. - - - - - + + Describes the options for the accum root on NiControllerSequence. + + + + + + + + + + + - An unsigned 32-bit integer, describing the apply mode of a texture. + Describes how the vertex colors are blended with the filtered texture color. @@ -168,7 +175,7 @@ - + @@ -184,14 +191,8 @@ - - An unsigned 32-bit integer, describing how vertex colors influence lighting. - - - - - A material, used by havok shape objects in Oblivion. + Bethesda Havok. Material descriptor for a Havok shape in Oblivion. @@ -227,10 +228,7 @@ - A material, used by havok shape objects in Fallout 3. - Bit 5: flag for PLATFORM (for values 32-63 substract 32 to know material number) - Bit 6: flag for STAIRS (for values 64-95 substract 64 to know material number) - Bit 5+6: flag for STAIRS+PLATFORM (for values 96-127 substract 96 to know material number) + Bethesda Havok. Material descriptor for a Havok shape in Fallout 3 and Fallout NV. @@ -362,7 +360,7 @@ - A material, used by havok shape objects in Skyrim. + Bethesda Havok. Material descriptor for a Havok shape in Skyrim. @@ -427,7 +425,7 @@ - Sets mesh color in Oblivion Construction Set. Anything higher than 57 is also null. + Bethesda Havok. Describes the collision layer a body belongs to in Oblivion. @@ -489,7 +487,7 @@ - Sets mesh color in Fallout 3 GECK. Anything higher than 72 is also null. + Bethesda Havok. Describes the collision layer a body belongs to in Fallout 3 and Fallout NV. @@ -537,7 +535,7 @@ - Physical purpose of collision object? The setting affects object's havok behavior in game. Anything higher than 47 is also null. + Bethesda Havok. Describes the collision layer a body belongs to in Skyrim. @@ -589,42 +587,136 @@ + Bethesda Havok. A byte describing if MOPP Data is organized into chunks (PS3) or not (PC) + + Target platform for NiPersistentSrcTextureRendererData (later than 30.1). + + + + Target renderer for NiPersistentSrcTextureRendererData (until 30.1). + + + + Describes the pixel format used by the NiPixelData object to store a texture. + + + + + + + + + + + + + + + + + + + + Describes whether pixels have been tiled from their standard row-major format to a format optimized for a particular platform. + + + + Describes the pixel format used by the NiPixelData object to store a texture. + + + + Describes how each pixel should be accessed on NiPixelFormat. + + + + Describes the color depth in an NiTexture. + + + + + + + + + - An unsigned 32-bit integer, describing how mipmaps are handled in a texture. + Describes how mipmaps are handled in an NiTexture. - - Specifies the pixel format used by the NiPixelData object to store a texture. - - - - - - - - - - An unsigned 32-bit integer, describing the color depth of a texture. - - - - - - - + + Describes how transparency is handled in an NiTexture. + + + + - Specifies the availiable texture clamp modes. That is, the behavior of pixels outside the range of the texture. + Describes the availiable texture clamp modes, i.e. the behavior of UV mapping outside the [0,1] range. @@ -632,20 +724,27 @@ - Specifies the availiable texture filter modes. That is, the way pixels within a texture are blended together when textures are displayed on the screen at a size other than their original dimentions. - - - - - - + Describes the availiable texture filter modes, i.e. the way the pixels in a texture are displayed on screen. + + + + + + + - An unsigned 32-bit integer, which describes how to apply vertex colors. - - - + Describes how to apply vertex colors for NiVertexColorProperty. + + + + + + + Describes which lighting equation components influence the final vertex color for NiVertexColorProperty. + + @@ -656,7 +755,7 @@ - The force field's type. + The force field type. @@ -664,66 +763,66 @@ Determines the way the billboard will react to the camera. Billboard mode is stored in lowest 3 bits although Oblivion vanilla nifs uses values higher than 7. - - - - - + + + + + + - This enum contains the options for doing stencil buffer tests. - - - - - - - - - - - - This enum contains the options for doing z buffer tests. - - - - - - - - + Describes stencil buffer test modes for NiStencilProperty. + + + + + + + + - This enum defines the various actions used in conjunction with the stencil buffer. - For a detailed description of the individual options please refer to the OpenGL docs. - + + + + + - - This enum lists the different face culling options. - - - - + + Describes the face culling options for NiStencilProperty. + + + + - - The motion system. 4 (Box) is used for everything movable. 7 (Keyframed) is used on statics and animated stuff. + + Describes Z-buffer test modes for NiZBufferProperty. + "Less than" = closer to camera, "Greater than" = further from camera. + + + + + + + + + + + Bethesda Havok, based on hkpMotion::MotionType. Motion type of a rigid body determines what happens when it is simulated. - - - + + + @@ -731,66 +830,74 @@ - + + Bethesda Havok, based on hkpRigidBodyDeactivator::DeactivatorType. + Deactivator Type determines which mechanism Havok will use to classify the body as deactivated. - - A list of possible solver deactivation settings. This value defines how the - solver deactivates objects. The solver works on a per object basis. - Note: Solver deactivation does not save CPU, but reduces creeping of - movable objects in a pile quite dramatically. + + Bethesda Havok, based on hkpRigidBodyCinfo::SolverDeactivation. + A list of possible solver deactivation settings. This value defines how aggressively the solver deactivates objects. + Note: Solver deactivation does not save CPU, but reduces creeping of movable objects in a pile quite dramatically. - + - - - + + + - - The motion type. Determines quality of motion? + + Bethesda Havok, based on hkpCollidableQualityType. Describes the priority and quality of collisions for a body, + e.g. you may expect critical game play objects to have solid high-priority collisions so that they never sink into ground, + or may allow penetrations for visual debris objects. + Notes: + - Fixed and keyframed objects cannot interact with each other. + - Debris can interpenetrate but still responds to Bullet hits. + - Critical objects are forced to not interpenetrate. + - Moving objects can interpenetrate slightly with other Moving or Debris objects but nothing else. - - - - - - + + + + + + - + - The type of force? May be more valid values. + Describes the type of gravitational force. - - Determines how a NiTextureTransformController animates the UV coordinates. - - - - - + + Describes which aspect of the NiTextureTransform the NiTextureTransformController will modify. + + + + + - Determines decay function. Used by NiPSysBombModifier. + Describes the decay function of bomb forces. - Determines symetry type used by NiPSysBombModifier. + Describes the symmetry type of bomb forces. @@ -812,21 +919,21 @@ - - The type of information that's store in a texture used by a NiTextureEffect. - - - - + + The type of information that is stored in a texture used by an NiTextureEffect. + + + + Determines the way that UV texture coordinates are generated. - + - - + + @@ -834,38 +941,48 @@ - - Used by NiPoint3InterpControllers to select which type of color in the controlled object that will be animated. + + Used by NiMaterialColorControllers to select which type of color in the controlled object that will be animated. + + Used by NiLightColorControllers to select which type of color in the controlled object that will be animated. + + + + - Used by NiGeometryData to control the volatility of the mesh. While they appear to be flags they behave as an enum. + Used by NiGeometryData to control the volatility of the mesh. + Consistency Type is masked to only the upper 4 bits (0xF000). Dirty mask is the lower 12 (0x0FFF) but only used at runtime. - - + Describes the way that NiSortAdjustNode modifies the sorting behavior for the subtree below it. + + - - - - + The propagation mode controls scene graph traversal during collision detection operations for NiCollisionData. + + + + + The collision mode controls the type of collision operation that is to take place for NiCollisionData. - + @@ -879,6 +996,7 @@ + Bethesda Havok. @@ -988,28 +1106,29 @@ - + Values for configuring the shader type in a BSLightingShaderProperty - + - - + + - - - - + + - - + - + - - - + @@ -1052,7 +1171,7 @@ - The type of constraint. + Bethesda Havok. Describes the type of bhkConstraint. @@ -1067,13 +1186,13 @@ These are like C structures and are used as sub-parts of more complex classes when there are multiple pieces of data repeated in an array.--> - + A string of given length. The string length. The string itself. - + A string type. The normal string. The string index. @@ -1092,21 +1211,21 @@ The bytes which make up the array - + A color without alpha (red, green, blue). Red color component. Green color component. Blue color component. - + A color without alpha (red, green, blue). Red color component. Green color component. Blue color component. - + A color with alpha (red, green, blue, alpha). Red component. Green component. @@ -1114,7 +1233,7 @@ Alpha. - + A color with alpha (red, green, blue, alpha). Red color component. Green color component. @@ -1122,7 +1241,7 @@ Alpha color component. - + A string that contains the path to a file. The normal string. The string index. @@ -1161,14 +1280,14 @@ Third coordinate. - + A vector in 3D space (x,y,z). First coordinate. Second coordinate. Third coordinate. - + A 4-dimensional vector. First coordinate. Second coordinate. @@ -1176,7 +1295,7 @@ Fourth coordinate. - + A quaternion. The w-coordinate. The x-coordinate. @@ -1184,7 +1303,7 @@ The z-coordinate. - + A quaternion as it appears in the havok objects. The x-coordinate. The y-coordinate. @@ -1192,7 +1311,7 @@ The w-coordinate. - + A 2x2 matrix of float values. Stored in OpenGL column-major format. Member 1,1 (top left) Member 2,1 (bottom left) @@ -1200,7 +1319,7 @@ Member 2,2 (bottom right) - + A 3x3 rotation matrix; M^T M=identity, det(M)=1. Stored in OpenGL column-major format. Member 1,1 (top left) Member 2,1 @@ -1213,7 +1332,23 @@ Member 3,3 (bottom left) - + + A 3x4 transformation matrix. + The (1,1) element. + The (2,1) element. + The (3,1) element. + The (1,2) element. + The (2,2) element. + The (3,2) element. + The (1,3) element. + The (2,3) element. + The (3,3) element. + The (1,4) element. + The (2,4) element. + The (3,4) element. + + + A 4x4 transformation matrix. The (1,1) element. The (2,1) element. @@ -1233,7 +1368,7 @@ The (4,4) element. - + A 3x3 Havok matrix stored in 4x3 due to memory alignment. @@ -1250,41 +1385,38 @@ - Description of a MipMap within a NiPixelData object. + Description of a mipmap within an NiPixelData object. Width of the mipmap image. Height of the mipmap image. Offset into the pixel data array where this mipmap starts. - - A group of NiNodes references. + + A set of NiNode references. Number of node references that follow. The list of NiNode references. - + Another string format, for short strings. Specific to Bethesda-specific header tags. The string length. The string itself, null terminated (the null terminator is taken into account in the length byte). - - Reference to shape and skin instance. - The shape. - Skinning instance for the shape? + + NiBoneLODController::SkinInfo. Reference to shape and skin instance. + + - - Unknown. - Counts unknown. - - First link is a NiTriShape object. - Second link is a NiSkinInstance object. - + + A set of NiBoneLODController::SkinInfo. + + - - A weighted vertex. + + NiSkinData::BoneVertData. A vertex and its weight. The vertex index, in the mesh. The vertex weight - between 0.0 and 1.0 @@ -1295,63 +1427,72 @@ Object reference. - + In a .kf file, this links to a controllable object, via its name (or for version 10.2.0.0 and up, a link and offset to a NiStringPalette that contains the name), and a sequence of interpolators that apply to this controllable object, via links. - Name of a controllable object in another NIF file. - Link to a controller. - Link to an interpolator. - Unknown link. Usually -1. - Unknown. - Unknown. - Idle animations tend to have low values for this, and NIF objects that have high values tend to correspond with the important parts of the animation. - Refers to the NiStringPalette which contains the name of the controlled NIF object. - The name of the animated node. - The name of the animated node. - Offset in the string palette where the name of the controlled node (NiNode, NiTriShape, ...) starts. - Name of the property (NiMaterialProperty, ...), if this controller controls a property. - Name of the property (NiMaterialProperty, ...), if this controller controls a property. - Offset in the string palette where the property (NiMaterialProperty, ...) starts, if this controller controls a property. Otherwise, -1. - Probably the object type name of the controller in the NIF file that is child of the controlled object. - Probably the object type name of the controller in the NIF file that is child of the controlled object. - Apparently the offset in the string palette of some type of controller related to Interpolator (for example, a 'NiTransformInterpolator' will have here a 'NiTransformController', etc.). Sometimes the type of controller that links to the interpolator. Probably it refers to the controller in the NIF file that is child of the controlled object, via its type name. - Some variable string (such as 'SELF_ILLUM', '0-0-TT_TRANSLATE_U', 'tongue_out', etc.). - Some variable string (such as 'SELF_ILLUM', '0-0-TT_TRANSLATE_U', 'tongue_out', etc.). - Offset in the string palette where some variable string starts (such as 'SELF_ILLUM', '0-0-TT_TRANSLATE_U', 'tongue_out', etc.). Usually, -1. - Another variable string, apparently used for particle system controllers. - Another variable string, apparently used for particle system controllers. - Offset in the string palette where some variable string starts (so far only 'EmitterActive' and 'BirthRate' have been observed in official files, used for particle system controllers). Usually, -1. + For Controller ID, NiInterpController::GetCtlrID() virtual function returns a string formatted specifically for the derived type. + For Interpolator ID, NiInterpController::GetInterpolatorID() virtual function returns a string formatted specifically for the derived type. + The string formats are documented on the relevant niobject blocks. + Name of a controllable object in another NIF file. + + + + + + + Idle animations tend to have low values for this, and high values tend to correspond with the important parts of the animations. + + + The name of the animated NiAVObject. + The RTTI type of the NiProperty the controller is attached to, if applicable. + The RTTI type of the NiTimeController. + An ID that can uniquely identify the controller among others of the same type on the same NiObjectNET. + An ID that can uniquely identify the interpolator among others of the same type on the same NiObjectNET. + + Refers to the NiStringPalette which contains the name of the controlled NIF object. + Offset in NiStringPalette to the name of the animated NiAVObject. + Offset in NiStringPalette to the RTTI type of the NiProperty the controller is attached to, if applicable. + Offset in NiStringPalette to the RTTI type of the NiTimeController. + Offset in NiStringPalette to an ID that can uniquely identify the controller among others of the same type on the same NiObjectNET. + Offset in NiStringPalette to an ID that can uniquely identify the interpolator among others of the same type on the same NiObjectNET. + + The name of the animated NiAVObject. + The RTTI type of the NiProperty the controller is attached to, if applicable. + The RTTI type of the NiTimeController. + An ID that can uniquely identify the controller among others of the same type on the same NiObjectNET. + An ID that can uniquely identify the interpolator among others of the same type on the same NiObjectNET. - + Information about how the file was exported - Probably the number of strings that follow. - Could be the name of the creator of the NIF file? - Unknown. Can be something like 'TriStrip Process Script'. - Unknown. Possibly the selected option of the export script. Can be something like 'Default Export Script'. + + + The NIF file header. - 'NetImmerse File Format x.x.x.x' (versions <= 10.0.1.2) or 'Gamebryo File Format x.x.x.x' (versions >= 10.1.0.0), with x.x.x.x the version written out. Ends with a newline character (0x0A). - - The NIF version, in hexadecimal notation: 0x04000002, 0x0401000C, 0x04020002, 0x04020100, 0x04020200, 0x0A000100, 0x0A010000, 0x0A020000, 0x14000004, ... - Determines the endianness of the data in the file. - An extra version number, for companies that decide to modify the file format. - Number of file objects. - This also appears to be the extra user version number and must be set in some circumstances. Probably used by Bethesda to denote the Havok version. - Unknown. Possibly User Version 2? - - - - Number of object types in this NIF file. - List of all object types used in this NIF file. - Maps file objects on their corresponding type: first file object is of type object_types[object_type_index[0]], the second of object_types[object_type_index[1]], etc. - Array of block sizes? - Number of strings. - Maximum string length. - Strings. - Unknown. + 'NetImmerse File Format x.x.x.x' (versions <= 10.0.1.2) or 'Gamebryo File Format x.x.x.x' (versions >= 10.1.0.0), with x.x.x.x the version written out. Ends with a newline character (0x0A). + + The NIF version, in hexadecimal notation: 0x04000002, 0x0401000C, 0x04020002, 0x04020100, 0x04020200, 0x0A000100, 0x0A010000, 0x0A020000, 0x14000004, ... + Determines the endianness of the data in the file. + An extra version number, for companies that decide to modify the file format. + Number of file objects. + + + + + + + Number of object types in this NIF file. + List of all object types used in this NIF file. + Maps file objects on their corresponding type: first file object is of type object_types[object_type_index[0]], the second of object_types[object_type_index[1]], etc. + Array of block sizes? + Number of strings. + Maximum string length. + Strings. + + @@ -1367,13 +1508,13 @@ Continuity. - + A generic key with support for interpolation. Type 1 is normal linear interpolation, type 2 has forward and backward tangents, and type 3 has tension, bias and continuity arguments. Note that color4 and byte always seem to be of type 1. Time of the key. The key value. Key forward tangent. The key backward tangent. - The key's TBC. + The TBC of the key. @@ -1383,7 +1524,7 @@ The keys. - + A special version of the key type used for quaternions. Never has tangents. Time the key applies. Time the key applies. @@ -1391,16 +1532,7 @@ The TBC of the key. - - - + Texture coordinates (u,v). As in OpenGL; image origin is in the lower left corner. First coordinate. Second coordinate. @@ -1411,74 +1543,67 @@ First coordinate. Second coordinate. + + + Describes the order of scaling and rotation matrices. Translate, Scale, Rotation, Center are from TexDesc. + Back = inverse of Center. FromMaya = inverse of the V axis with a positive translation along V of 1 unit. + + + + - Texture description. - NiSourceTexture object index. + NiTexturingProperty::Map. Texture description. + Link to the texture image. + NiSourceTexture object index. 0=clamp S clamp T, 1=clamp S wrap T, 2=wrap S clamp T, 3=wrap S wrap T 0=nearest, 1=bilinear, 2=trilinear, 3=..., 4=..., 5=... Texture mode flags; clamp and filter mode stored in upper byte with 0xYZ00 = clamp mode Y, filter mode Z. - Unknown, seems to always be 1 + The texture coordinate set in NiGeometryData that this texture slot will use. - PS2 only; from the Freedom Force docs, "L values can range from 0 to 3 and are used to specify how fast a texture gets blurry". - PS2 only; from the Freedom Force docs, "The K value is used as an offset into the mipmap levels and can range from -2047 to 2047. Positive values push the mipmap towards being blurry and negative values make the mipmap sharper." -75 for most v4.0.0.2 meshes. + L can range from 0 to 3 and are used to specify how fast a texture gets blurry. + K is used as an offset into the mipmap levels and can range from -2047 to 2047. Positive values push the mipmap towards being blurry and negative values make the mipmap sharper. Unknown, 0 or 0x0101? - Determines whether or not the texture's coordinates are transformed. - The amount to translate the texture coordinates in each direction? - The number of times the texture is tiled in each direction? - 2D Rotation of texture image around third W axis after U and V. - The texture transform type? Doesn't seem to do anything. - The offset from the origin? - - - - An extended texture description for shader textures. - Is it used? - The texture data. - Map Index + + Whether or not the texture coordinates are transformed. + The UV translation. + The UV scale. + The W axis rotation in texture space. + Depending on the source, scaling can occur before or after rotation. + The origin around which the texture rotates. - - A texture source. - Is the texture external? - - The external texture file name. - - Note: all original morrowind nifs use name.ext only for addressing the textures, but most mods use something like textures/[subdir/]name.ext. This is due to a feature in Morrowind resource manager: it loads name.ext, textures/name.ext and textures/subdir/name.ext but NOT subdir/name.ext. - - Unknown. - Unknown. - The original source filename of the image embedded by the referred NiPixelData object. - Pixel data object index. + + NiTexturingProperty::ShaderMap. Shader texture description. + + + Unique identifier for the Gamebryo shader system. - + List of three vertex indices. First vertex index. Second vertex index. Third vertex index. - - - A node used to switch between branches, such as for LOD levels? + Represents groups of multiple scenegraph subtrees, only one of which (the "active child") is drawn at any given time. Level of detail selector. Links to different levels of detail of the same model, used to switch a geometry at a specified distance. - - Point to calculate distance from for switching? - Number of levels of detail. - The ranges of distance that each level of detail applies in. - - Refers to LOD level information, either distance or screen size based. + + + + - A color palette. - Unknown, Usually = 0. - The number of palette entries. Always = 256. - The color palette. + NiPalette objects represent mappings from 8-bit indices to 24-bit RGB or 32-bit RGBA colors. + + The number of palette entries. Always 256 but can also be 16. + The color palette. + The color palette. - A particle modifier. - Unknown. - Unknown. - Unknown. - Unknown. - Unknown. - Unknown. - The position of the mass point relative to the particle system? - The direction of the applied acceleration? + LEGACY (pre-10.1) particle modifier. + + + + + + + The position of the mass point relative to the particle system? + The direction of the applied acceleration? - Unknown. - Color data index. + LEGACY (pre-10.1) particle modifier. + - This particle system modifier controls the particle size. If it is present the particles start with size 0.0 . Then they grow to their original size and stay there until they fade to zero size again at the end of their lifetime cycle. + LEGACY (pre-10.1) particle modifier. The time from the beginning of the particle lifetime during which the particle grows. The time from the end of the particle lifetime during which the particle fades. - Unknown. - The number of particle mesh references that follow. - Links to nodes of particle meshes? + LEGACY (pre-10.1) particle modifier. + + - Unknown. - Unknown. - Unknown. - Unknown. + LEGACY (pre-10.1) particle modifier. + + + Generic particle system node. + - Unknown. + LEGACY (pre-10.1). NiParticles which do not house normals and generate them at runtime. - Mesh particle node? + LEGACY (pre-10.1). Particle meshes. - Particle meshes data. + LEGACY (pre-10.1). Particle meshes data. Refers to the mesh that makes up a particle? A particle system. - Unknown - Unknown - Unknown - Unknown - Unknown - Unknown - If true, Particles are birthed into world space. If false, Particles are birthed into object space. + + + + + + + + If true, Particles are birthed into world space. If false, Particles are birthed into object space. The number of modifier references. The list of particle modifiers. @@ -3735,9 +3857,9 @@ 1.6 : horizontal 3.1416 : down - emitter's vertical opening angle [radians] + emitter's vertical opening angle [radians] horizontal emit direction - emitter's horizontal opening angle + emitter's horizontal opening angle Unknown. Unknown. Particle size @@ -3759,7 +3881,7 @@ Particle velocity Unknown - The particle's age. + The particle's age. Timestamp of the last update. Unknown short @@ -3782,87 +3904,79 @@ + DEPRECATED (10.2), REMOVED (20.5). Replaced by NiTransformController and NiPathInterpolator. Time controller for a path. - Unknown. - Unknown, always 1? - Unknown, often 0? - Unknown, often 0? - Unknown, always 0? - Path controller data index (position data). ? - Path controller data index (float data). ? - - - - - - - - - - - - - - - - - - + + -1 = Negative, 1 = Positive + Max angle in radians. + + 0, 1, or 2 representing X, Y, or Z. + + + - - Channel data - Channel Type - Data Storage Convention - Bits per channel - Unknown + + Component Type + Data Storage Convention + Bits per component + - + + The format of the pixels in this internally stored image. - 0x000000ff (for 24bpp and 32bpp) or 0x00000000 (for 8bpp) - 0x0000ff00 (for 24bpp and 32bpp) or 0x00000000 (for 8bpp) - 0x00ff0000 (for 24bpp and 32bpp) or 0x00000000 (for 8bpp) - 0xff000000 (for 32bpp) or 0x00000000 (for 24bpp and 8bpp) - Bits per pixel, 0 (?), 8, 24 or 32. - Zero? - + 0x000000ff (for 24bpp and 32bpp) or 0x00000000 (for 8bpp) + 0x0000ff00 (for 24bpp and 32bpp) or 0x00000000 (for 8bpp) + 0x00ff0000 (for 24bpp and 32bpp) or 0x00000000 (for 8bpp) + 0xff000000 (for 32bpp) or 0x00000000 (for 24bpp and 8bpp) + Bits per pixel, 0 (Compressed), 8, 24 or 32. + [96,8,130,0,0,65,0,0] if 24 bits per pixel [129,8,130,32,0,65,12,0] if 32 bits per pixel [34,0,0,0,0,0,0,0] if 8 bits per pixel - [4,0,0,0,0,0,0,0] if 0 (?) bits per pixel + [X,0,0,0,0,0,0,0] if 0 (Compressed) bits per pixel where X = PixelFormat - Seems to always be zero. - Bits per pixel, 0 (?), 8, 24 or 32. - Unknown. Could be reference pointer. - Seems to always be zero. - Flags - Unkown. Often zero. - Unknown. - Channel Data - Link to NiPalette, for 8-bit textures. - Number of mipmaps in the texture. - Bytes per pixel (Bits Per Pixel / 8). - Mipmap descriptions (width, height, offset). - - - - Unknown - Unknown, same as the number of pixels? / number of blocks? - Unknown - Unknown - Raw pixel data holding the mipmaps. Mipmap zero is the full-size texture and they get smaller by half as the number increases. - - - + Seems to always be zero. + Bits per pixel, 0 (Compressed), 8, 24 or 32. + + + + + + Channel Data + + + + + + + + + + + + + + + + A texture. - Total number of pixels - Unknown - Raw pixel data holding the mipmaps. Mipmap zero is the full-size texture and they get smaller by half as the number increases. - Raw pixel data holding the mipmaps. Mipmap zero is the full-size texture and they get smaller by half as the number increases. + + + + + + + + - Unknown. + LEGACY (pre-10.1) particle modifier. Usually 0? Unknown. Unknown. @@ -3885,111 +3999,118 @@ A point light. - Constant Attenuation - Linear Attenuation - Quadratic Attenuation (see glLight) + + + - Position data. - The position keys. + Wrapper for position animation keys. + + + + + Wrapper for rotation animation keys. + + + + - Unknown particle modifier. - Unknown. - Link to NiPSysSpawnModifier object? + Particle modifier that controls and updates the age of particles in the system. + Should the particles spawn on death? + The spawner to use on death. - Particle modifier that uses a NiNode to use as a "Bomb Object" to alter the path of particles. - Link to a NiNode for bomb to function. - Orientation of bomb object. - Falloff rate of the bomb object. - DeltaV / Strength? - Decay type - Shape/symmetry of the bomb object. + Particle modifier that applies an explosive force to particles. + The object whose position and orientation are the basis of the force. + The local direction of the force. + How the bomb force will decrease with distance. + The acceleration the bomb will apply to particles. + + - Unknown particle system modifier. - Unknown. + Particle modifier that creates and updates bound volumes. + Optimize by only computing the bound of (1 / Update Skip) of the total particles each frame. - Particle emitter that uses points within a defined Box shape to emit from.. - Defines the Width of the box area. - Defines the Height of the box area. - Defines the Depth of the box area. + Particle emitter that uses points within a defined Box shape to emit from. + + + Particle modifier that adds a defined shape to act as a collision object for particles to interact with. - Link to a NiPSysPlanarCollider or NiPSysSphericalCollider. + Particle modifier that adds keyframe data to modify color/alpha values of particles over time. - Refers to NiColorData object. + Particle emitter that uses points within a defined Cylinder shape to emit from. - Radius of the cylinder shape. - Height of the cylinders shape. + + - Unknown. - Parent reference. - The drag axis. - Drag percentage. - The range. - The range falloff. + Particle modifier that applies a linear drag force to particles. + The object whose position and orientation are the basis of the force. + The local direction of the force. + The amount of drag to apply to particles. + The distance up to which particles are fully affected. + The distance at which particles cease to be affected. - Particle system emitter controller data. - Unknown. - Number of keys. - Unknown. + DEPRECATED (10.2). Particle system emitter controller data. + + + - Adds gravity to a particle system, when linked to a NiNode to use as a Gravity Object. - Refers to a NiNode for gravity location. - Orientation of gravity. - Falloff range. - The strength of gravity. - Planar or Spherical type + Particle modifier that applies a gravitational force to particles. + The object whose position and orientation are the basis of the force. + The local direction of the force. + How the force diminishes by distance. + The acceleration of the force. + The type of gravitational force. Adds a degree of randomness. - Range for turbulence. - + Scale for turbulence. + - Particle modifier that controls the time it takes to grow a particle from Size=0 to the specified Size in the emitter, and then back to 0. This modifer has no control over alpha settings. - Time in seconds to fade in. - Unknown. - Time in seconds to fade out. - Unknown. - Unknown + Particle modifier that controls the time it takes to grow and shrink a particle. + The time taken to grow from 0 to their specified size. + Specifies the particle generation to which the grow effect should be applied. This is usually generation 0, so that newly created particles will grow. + The time taken to shrink from their specified size to 0. + Specifies the particle generation to which the shrink effect should be applied. This is usually the highest supported generation for the particle system. + A multiplier on the base particle scale. Particle emitter that uses points on a specified mesh to emit from. - The number of references to emitter meshes that follow. - - Links to meshes used for emitting. - The way the particles get their initial direction and speed. - The parts of the mesh that the particles emit from. - The emission axis. + + The meshes which are emitted from. + The method by which the initial particle velocity will be computed. + The manner in which particles are emitted from the Emitter Meshes. + The emission axis if VELOCITY_USE_DIRECTION. - Unknown. - The number of object references that follow. - Group of target NiNodes or NiTriShapes? + Particle modifier that updates mesh particles using the age of each particle. + + @@ -4000,9 +4121,9 @@ - Unknown - Group of target NiNodes? - Unknown + + + @@ -4012,110 +4133,110 @@ - Similar to a Flip Controller, this handles particle texture animation on a single texture atlas + Similar to a Flip Controller, this handles particle texture animation on a single texture atlas Starting frame/position on atlas Random chance to start on a different frame? Ending frame/position on atlas Frame to start looping - - Unknown - Unknown + + + Particle Collider object which particles will interact with. - Defines the width of the plane. - Defines the height of the plane. - Defines Orientation. - Defines Orientation. + Width of the plane along the X Axis. + Height of the plane along the Y Axis. + Axis defining a plane, relative to Collider Object. + Axis defining a plane, relative to Collider Object. Particle Collider object which particles will interact with. - Defines the radius of the sphere object. + - Unknown particle system modifier. + Particle modifier that updates the particle positions based on velocity and last update time. - Unknown. + Particle modifier that calls reset on a target upon looping. Particle modifier that adds rotations to particles. - The initial speed of rotation. - Adds a ranged randomness to rotation speed. - Sets the intial angle for particles to be birthed in. - Adds a random range to Initial angle. - Unknown - Unknown. - Unknown. + Initial Rotation Speed in radians per second. + Distributes rotation speed over the range [Speed - Variation, Speed + Variation]. + Initial Rotation Angle in radians. + Distributes rotation angle over the range [Angle - Variation, Angle + Variation]. + Randomly negate the initial rotation speed? + Assign a random axis to new particles? + Initial rotation axis. - Unknown particle modifier. - Unknown. - Unknown. - Unknown. - Unknown. - Unknown. - Unknown. - Unknown. - Unknown. - Unknown + Particle modifier that spawns additional copies of a particle. + Number of allowed generations for spawning. Particles whose generations are >= will not be spawned. + The likelihood of a particular particle being spawned. Must be between 0.0 and 1.0. + The minimum particles to spawn for any given original particle. + The maximum particles to spawn for any given original particle. + WorldShift + How much the spawned particle speed can vary. + How much the spawned particle direction can vary. + Lifespan assigned to spawned particles. + The amount the lifespan can vary. Particle emitter that uses points within a sphere shape to emit from. - The radius of the sphere shape + - Particle system controller, used for ???. + Particle system controller, tells the system to update its simulation. Base for all force field particle modifiers. - Force Field Object - Magnitude of the force - Controls how quick the field diminishes - Use maximum distance - Maximum distance + The object whose position and orientation are the basis of the field. + Magnitude of the force. + How the magnitude diminishes with distance from the Field Object. + Whether or not to use a distance from the Field Object after which there is no effect. + Maximum distance after which there is no effect. - Particle system modifier, used for controlling the particle velocity in force field. - Direction of the particle velocity + Particle system modifier, implements a vortex field force for particles. + Direction of the vortex field in Field Object's space. - Particle system modifier, used for controlling the particle velocity in gravity field. - Direction of the particle velocity + Particle system modifier, implements a gravity field force for particles. + Direction of the gravity field in Field Object's space. - Particle system modifier, used for controlling the particle velocity in drag space warp. - Whether to use the direction field? - Direction of the particle velocity + Particle system modifier, implements a drag field force for particles. + Whether or not the drag force applies only in the direction specified. + Direction in which the force applies if Use Direction is true. - Particle system modifier, used for controlling the particle velocity in drag space warp. - Frequency of the update. + Particle system modifier, implements a turbulence field force for particles. + How many turbulence updates per second. - - - - + + + + - - Unknown + + @@ -4168,14 +4289,14 @@ - Particle system modifier, used for controlling the particle velocity in a field like wind. - Direction of the particle velocity - Unknown - Unknown - Unknown - Unknown - Unknown - Unknown + Particle system modifier, updates the particle velocity to simulate the effects of air movements like wind, fans, or wake. + Direction of the particle velocity + How quickly particles will accelerate to the magnitude of the air field. + How much of the air field velocity will be added to the particle velocity. + + + + The angle of the air field cone if Enable Spread is true. @@ -4198,30 +4319,27 @@ - Particle system modifier, used for controlling the particle - velocity in force field. - Unknown Enums? + Particle system modifier, updates the particle velocity to simulate the effects of point gravity. + If zero, no attenuation. - + Abstract class used for different types of LOD selections. - Describes levels of detail based on distance of object from camera. - ? - Number of levels of detail. - The ranges of distance that each level of detail applies in. + NiRangeLODData controls switching LOD levels based on Z depth from the camera to the NiLODNode. + + + - Describes levels of detail based on size of object on screen? - The center of the bounding sphere? - The radius of the bounding sphere? - The center of the bounding sphere in world space? - The radius of the bounding sphere in world space? - The number of screen size based LOD levels. - The LOD levels based on proportion of screen size? + NiScreenLODData controls switching LOD levels based on proportion of the screen that a bound would include. + + + + @@ -4229,25 +4347,24 @@ + DEPRECATED (pre-10.1), REMOVED (20.3). Keyframe animation root node, in .kf files. Determines whether flat shading or smooth shading is used on a shape. - - 1's Bit: Enable smooth phong shading on this shape. - - If 1's bit is not set, hard-edged flat shading will be used on this shape. + + Bit 0: Enable smooth phong shading on this shape. Otherwise, hard-edged flat shading will be used on this shape. Skinning data. - Offset of the skin from this bone in bind position. + Offset of the skin from this bone in bind position. Number of bones. This optionally links a NiSkinPartition for hardware-acceleration information. Enables Vertex Weights for this NiSkinData. - Contains offset data for each node that this skin is influenced by. + Contains offset data for each node that this skin is influenced by. @@ -4273,18 +4390,12 @@ Skinning data, optimized for hardware skinning. The mesh is partitioned in submeshes such that each vertex of a submesh is influenced only by a limited and fixed number of bones. - Unknown. + Skin partition objects. - - - - - - - - + + @@ -4292,6 +4403,13 @@ A texture. + + NiTexture::FormatPrefs. These preferences are a request to the renderer to use a format the most closely matches the settings and may be ignored. + Requests the way the image will be stored. + Requests if mipmaps are used or not. + Requests no alpha, 1-bit alpha, or + + Describes texture source and properties. Is the texture external? @@ -4299,22 +4417,20 @@ Unknown. Unknown. Seems to be set if Pixel Data is present? The original source filename of the image embedded by the referred NiPixelData object. - Pixel data object index. NiPixelData or NiPersistentSrcTextureRendererData - Specifies the way the image will be stored. - Specifies whether mip maps are used. - Note: the NiTriShape linked to this object must have a NiAlphaProperty in its list of properties to enable material and/or texture transparency. - Is Static? - Load direct to renderer - Render data is persistant + NiPixelData or NiPersistentSrcTextureRendererData + A set of preferences for the texture format. They are a request only and the renderer may ignore them. + If set, then the application cannot assume that any dynamic changes to the pixel data will show in the rendered image. + A hint to the renderer that the texture can be loaded directly from a texture file into a renderer-specific resource, bypassing the NiPixelData object. + Pixel Data is NiPersistentSrcTextureRendererData instead of NiPixelData. Gives specularity to a shape. Flags 0x0001. - 1's Bit = Enable specular lighting on this shape. + Bit 0 = Enable specular lighting on this shape. - Unknown. + LEGACY (pre-10.1) particle modifier. Unknown. Unknown. Unknown. @@ -4326,9 +4442,9 @@ A spot. - The opening angle of the spot. - Unknown - Describes the distribution of light. (see: glLight) + + + Describes the distribution of light. (see: glLight) @@ -4336,12 +4452,12 @@ Property flags. Enables or disables the stencil test. Selects the compare mode function (see: glStencilFunc). - Unknown. Default is 0. + A bit mask. The default is 0xffffffff. - Used to enabled double sided faces. Default is 3 (DRAW_BOTH). + Used to enabled double sided faces. Default is 3 (DRAW_BOTH). Property flags: Bit 0: Stencil Enable @@ -4351,7 +4467,7 @@ Bits 10-11: Draw Mode Bits 12-14: Stencil Function - Unknown. Default is 0. + A bit mask. The default is 0xffffffff. @@ -4381,26 +4497,25 @@ - Enables environment mapping. Should be in both the children list and effects list of the NiTriShape object. For Morrowind: the bump map can be used to bump the environment map (note that the bump map is ignored if no NiTextureEffect object is present). + Represents an effect that uses projected textures such as projected lights (gobos), environment maps, and fog maps. Model projection matrix. Always identity? Model projection transform. Always (0,0,0)? Texture Filtering mode. + Texture Clamp mode. - - The type of effect that the texture is used for. + The type of effect that the texture is used for. The method that will be used to generate UV coordinates for the texture effect. Image index. Source texture index. - Determines whether a clipping plane is used. 0 means that a plane is not used. - Unknown: (1,0,0)? - Unknown. 0? - 0? - -75? + Determines whether a clipping plane is used. + + + Unknown: 0. - Unknown + LEGACY (pre-10.1) Unknown. Either 210 or 194. 0? @@ -4408,6 +4523,7 @@ + LEGACY (pre-10.1) 0 if the texture is internal to the NIF file. The filepath to the texture. Link to the internally stored image data. @@ -4416,25 +4532,19 @@ + LEGACY (pre-10.1) Property flags. Property flags. Link to the texture image. Unknown. 0? - - (note: not quite complete yet... but already reads most of the DAoC ones) - Property flags. - Unknown. Always 5 for DAoC files, and always 6 for Bridge Commander. Seems to have nothing to do with the number of Texture Element slots that follow. - Describes the various textures used by this mutli-texture property. Each slot probably has special meaning like thoes in NiTexturingProperty. - - - Describes an object's textures. + Describes how a fragment shader should be configured for a given piece of geometry. Property flags. - Property flags. - Determines how the texture will be applied. Seems to have special functions in Oblivion. - Number of textures. Always 7 in versions < 20.0.0.4. Can also be 8 in >= 20.0.0.4. + Property flags. + Determines how the texture will be applied. Seems to have special functions in Oblivion. + Number of textures. Do we have a base texture? The base texture. Do we have a dark texture? @@ -4445,33 +4555,36 @@ The gloss texture. Do we have a glow texture? The glowing texture. - Do we have a bump map texture? + Do we have a bump map texture? The bump map texture. - Unknown. - Unknown. - Unknown. - Do we have a normal texture? (Noraml guess based on file suffix in sample files) - Normal texture. - Do we have a unknown texture 2? - Unknown texture 2. - Unknown. - Do we have a decal 0 texture? + + + + Do we have a normal texture? + Normal texture. + + + + Do we have a decal 0 texture? + Do we have a decal 0 texture? The decal texture. - Do we have a decal 1 texture? - Do we have a decal 1 texture? + Do we have a decal 1 texture? + Do we have a decal 1 texture? Another decal texture. - Do we have a decal 2 texture? - Do we have a decal 2 texture? + Do we have a decal 2 texture? + Do we have a decal 2 texture? Another decal texture. - Do we have a decal 3 texture? - Do we have a decal 3 texture? + Do we have a decal 3 texture? + Do we have a decal 3 texture? Another decal texture. Who knows the limit. Number of Shader textures that follow. Shader textures. + + - Mesh animation keyframe data. + Wrapper for transformation animation keys. @@ -4511,21 +4624,12 @@ unknown - Holds mesh data using a list of singular triangles. + LEGACY (pre-10.1) Sub data of NiBezierMesh unknown unknown @@ -4539,6 +4643,7 @@ + LEGACY (pre-10.1) Unknown references. unknown @@ -4565,7 +4670,6 @@ Pesumably a progressive mesh with triangles specified by edge splits. Seems to be specific to Freedom Force. The structure of this is uncertain and highly experimental at this point. - No file with this data can currently be read properly. @@ -4578,12 +4682,14 @@ + DEPRECATED (pre-10.1), REMOVED (20.3). Time controller for texture coordinates. Always 0? Texture coordinate controller data index. + DEPRECATED (pre-10.1), REMOVED (20.3) Texture coordinate data. Four UV data groups. Appear to be U translation, V translation, U scaling/tiling, V scaling/tiling. @@ -4591,29 +4697,24 @@ - Extra vector data. - The vector data. - Not sure whether this comes before or after the vector data. + DEPRECATED (20.5). + Extra data in the form of a vector (as x, y, z, w components). + The vector data. Property of vertex colors. This object is referred to by the root object of the NIF file whenever some NiTriShapeData object has vertex colors with non-default settings; if not present, vertex colors have vertex_mode=2 and lighting_mode=1. - Property flags. Appears to be unused until 20.1.0.3. - Bits 0-2: Unknown - Bit 3: Lighting Mode? - Bits 4-5: Vertex Mode? + Bit 3: Lighting Mode + Bits 4-5: Vertex Mode - - Determines how vertex and material colors are mixed. - related gl function: glColorMaterial - In Flags from version 20.1.0.3 onwards. - - The light mode. In Flags from 20.1.0.3 on. + In Flags from 20.1.0.3 on. + In Flags from 20.1.0.3 on. + DEPRECATED (10.x), REMOVED (?) Not used in skinning. Unsure of use - perhaps for morphing animation or gravity. Number of bytes in this data object. @@ -4622,13 +4723,14 @@ + DEPRECATED (10.2), REMOVED (?), Replaced by NiBoolData. Visibility data for a controller. - The number of visibility keys that follow. - The visibility keys. + + - Unknown. + Allows applications to switch between drawing solid geometry or wireframe outlines. Property flags. 0 - Wireframe Mode Disabled @@ -4637,7 +4739,7 @@ - This Property controls the Z buffer (OpenGL: depth buffer). + Allows applications to set the test and write modes of the renderer's Z-buffer and to set the comparison function used for the Z-buffer test. Bit 0 enables the z test Bit 1 controls wether the Z buffer is read only (0) or read/write (1) @@ -4652,6 +4754,7 @@ + LEGACY (pre-10.1) Raw image data. Image width Image height @@ -4659,176 +4762,340 @@ Image pixel data. Image pixel data. + + - Unknown node. Found in Loki. + Used to turn sorting off for individual subtrees in a scene. Useful if objects must be drawn in a fixed order. Sorting - Unknown. + - Unknown node. Found in Emerge Demo. + Represents cube maps that are created from either a set of six image files, six blocks of pixel data, or a single pixel data with six faces. - Unknown PhysX node. - Unknown - Unknown - Unknown - Number of NiPhysXTransformDest references - Unknown - Unknown - Unknown - PhysX Property Description. - - - - Unknown - Unknown - PhysX Material Description + A PhysX prop which holds information about PhysX actors in a Gamebryo scene + + + + + + + + + + + + + + + + + + + + - Unknown PhysX node. - Number of NiPhysXActorDesc references - Unknown - Unknown - PhysX Joint Descriptions - Unknown - Unknown - PhysX Material Descriptions - Unknown - Unknown - Unknown - Unknown - Unknown + For serialization of PhysX objects and to attach them to the scene. + + + + + + + + + + + + - Unknown PhysX node. - Unknown - Unknown - Unknown - Unknown - Unknown - Unknown - Unknown - Unknown - Unknown - Unknown - Unknown - PhysX Shape Description - Unknown - Unknown - Unknown - + For serializing NxActor objects. + + + + + + + + + + + + + + + + + + + + + + + - Unknown PhysX node. - Unknown - + For serializing NxBodyDesc objects. + + + + + + + + + + + + + + + + + + + + + - - Unknown PhysX node. - Unknown - + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + A PhysX Joint abstract base class. + + + + + + + + + + + + + + + A 6DOF (6 degrees of freedom) joint. + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + - Unknown PhysX node. - Unknown - Unknown - Unknown - Unknown - Unknown - Unknown - Unknown - Unknown - Unknown - Unknown - Unknown - Unknown - Unknown - Unknown - Unknown - - PhysX Mesh Description - + For serializing NxShapeDesc objects + + + + + + + + + + + + + + + + - Unknown PhysX node. - Unknown - Unknown - Unknown - NXS - Unknown - MESH - Unknown - Unknown - Unknown - Unknown - Number of mesh vertices - Unknown - Vertices - Unknown - Unknown - Unknown - Unknown - + Holds mesh data for streaming. + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + - Unknown node. - Unknown - Unknown - Unknown + For serializing NxMaterialDesc objects. + + + - - Unknown PhysX node. - Unknown + + A destination is a link between a PhysX actor and a Gamebryo object being driven by the physics. + + - - Unknown PhysX node. - Unknown. =1? - Unknown. =0 - Affected node? - + + Base for destinations that set a rigid body state. - - Unknown node. - - + + Connects PhysX rigid body actors to a scene node. + - - Unknown node. - - - Contains a string like "Gamebryo_1_1" or "4.1.0.12" - - + + A source is a link between a Gamebryo object and a PhysX actor. + + - - Unknown node. - - - - - + + Sets state of a rigid body PhysX actor. + - - Unknown node. - + + Sets state of kinematic PhysX actor. - - Unknown node. - - + + Sends Gamebryo scene state to a PhysX dynamic actor. @@ -4842,55 +5109,58 @@ Two dimensional screen elements. - Number of vertices in this polygon - Vertex Offset - Number of faces in this polygon - Triangle offset in shape + + Offset in vertex array. + + Offset in indices array. + DEPRECATED (20.5), functionality included in NiMeshScreenElements. Two dimensional screen elements. - Maximum number of polygons? - Polygons - Polygon Indices - Unknown - Number of Polygons actually in use - Number of in-use vertices - Unknown - Number of in-use triangles - Maximum number of faces + + + + + + + + + + DEPRECATED (20.5), replaced by NiMeshScreenElements. Two dimensional screen elements. - Grouping node for nodes in a Portal - Outer Shell Geometry Node? - Number of rooms in this group - Rooms associated with this group. + NiRoomGroup represents a set of connected rooms i.e. a game level. + Object that represents the room group as seen from the outside. + + - Grouping node for nodes in a Portal - Number of walls in a room? - Face normal and unknown value. - Number of doors into room - Number of portals into room - Number of doors out of room - Number of portals out of room - Number of unknowns - All geometry associated with room. + NiRoom objects represent cells in a cell-portal culling system. + + + + The portals which see into the room. + + The portals which see out of the room. + + All geometry associated with the room. - A Portal - Unknown flags. - Unknown - Number of vertices in this polygon - Vertices - Target portal or room + NiPortal objects are grouping nodes that support aggressive visibility culling. + They represent flat polygonal regions through which a part of a scene graph can be viewed. + + Unused in 20.x, possibly also 10.x. + + + Root of the scenegraph which is to be seen through this portal. + Glow color and alpha - This controller is used to animate float variables in BSEffectShaderProperty. + This controller is used to animate float variables in BSEffectShaderProperty. Which float variable in BSEffectShaderProperty to animate: - - This controller is used to animate colors in BSEffectShaderProperty. + + This controller is used to animate colors in BSEffectShaderProperty. Which color in BSEffectShaderProperty to animate: - This controller is used to animate float variables in BSLightingShaderProperty. + This controller is used to animate float variables in BSLightingShaderProperty. Which float variable in BSLightingShaderProperty to animate: - - This controller is used to animate colors in BSLightingShaderProperty. + + This controller is used to animate colors in BSLightingShaderProperty. Which color in BSLightingShaderProperty to animate: - - Unkown - + Skyrim, Paired with dummy TriShapes, this controller generates lightning shapes for special effects. @@ -5084,23 +5349,23 @@ References length variation interpolator. References width interpolator. References interpolator for amplitude control. 0=straight, 50=wide - Unknown - Unknown - Unknown + + + How far lightning will stretch to. How far lightning variation will stretch to. How wide the bolt will be. Influences forking behavior with a multiplier. - Unknown - Unknown - Unknown - Unknown - Reference to a shader property. + + + + + Reference to a shader property. Bethesda-specific Texture Set. - Number of Textures + Textures. 0: Diffuse 1: Normal/Gloss @@ -5114,7 +5379,7 @@ - Bethesda-specific node? Found in Fallout3 + Bethesda-specific property. Found in Fallout3 @@ -5127,220 +5392,221 @@ - Bethesda-specific node? Found in Fallout3 + Bethesda-specific property. Found in Fallout3 The texture. Sky Object Type - Bethesda-specific node. + Bethesda-specific property. Texture file name - Bethesda-specific node. + Bethesda-specific property. - Bethesda-specific node. + Bethesda-specific property. - Bethesda-specific node. + Bethesda-specific property. Texture file name - Bethesda-specific node. + Bethesda-specific property. - Bethesda-specific node. + Bethesda-specific property. - Bethesda-specific node. + Bethesda-specific property. - + Skyrim Shader Property Flags 1 - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + - + Skyrim Shader Property Flags 2 - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + - + Fallout 4 Shader Property Flags 1 - - + Fallout 4 Shader Property Flags 2 - - + Bethesda shader property for Skyrim and later. Skyrim Shader Flags for setting render/shader options. Skyrim Shader Flags for setting render/shader options. Fallout 4 Shader Flags. Mostly overridden if "Name" is a path to a BGSM/BGEM file. - Fallout 4 Shader Flags. Mostly overridden if "Name" is a path to a BGSM/BGEM file. + Fallout 4 Shader Flags. Mostly overridden if "Name" is a path to a BGSM/BGEM file. Offset UVs Offset UV Scale to repeat tiling textures, see above. Texture Set, can have override in an esm/esp - Glow color and alpha + Glow color and alpha Multiplied emissive colors - - How to handle texture borders. - The material's opacity (1=non-transparent). + + How to handle texture borders. + The material opacity (1=non-transparent). The amount of distortion. **Not based on physically accurate refractive index** (0=none) (0-1) - The material's specular power, or glossiness (0-999). + The material specular power, or glossiness (0-999). + The base roughness (0.0-1.0), multiplied by the smoothness map. Adds a colored highlight. Brightness of specular highlight. (0=not visible) (0-999) - Controls strength for envmap/backlight/rim/softlight lighting effect? - Controls strength for envmap/backlight/rim/softlight lighting effect? - - - - - - - - - - - - Scales the intensity of the environment/cube map. (0-1) - + Controls strength for envmap/backlight/rim/softlight lighting effect? + Controls strength for envmap/backlight/rim/softlight lighting effect? + + + + + + + + + + + + Scales the intensity of the environment/cube map. (0-1) + Tints the base texture. Overridden by game settings. - + Tints the base texture. Overridden by game settings. Max Passes Scale @@ -5348,18 +5614,18 @@ Depth of inner parallax layer effect. Scales the inner parallax layer texture. How strong the environment/cube map is. (0-??) - Unknown/unused? CK lists "snow material" when used. + CK lists "snow material" when used. Eye cubemap scale Offset to set center for left eye cubemap Offset to set center for right eye cubemap - + Bethesda effect shader property for Skyrim and later. - - - - + + + + Offset UVs Offset UV Scale to repeat tiling textures points to an external texture. @@ -5375,10 +5641,10 @@ Multiplier for Emissive Color (RGB part) Points to an external texture, used as palette for SLSF1_Greyscale_To_PaletteColor/SLSF1_Greyscale_To_PaletteAlpha. - - - - + + + + @@ -5393,7 +5659,7 @@ - + Skyrim water shader property, different from "WaterShaderProperty" seen in Fallout. @@ -5404,51 +5670,50 @@ Unknown, flag? - + Skyrim Sky shader block. Offset UVs. Seems to be unused, but it fits with the other Skyrim shader properties. Offset UV Scale to repeat tiling textures, see above. points to an external texture. - Sky Object Type + - Bethesda-specific node. - Unknown - - Unknown + Bethesda-specific skin instance. + + - Bethesda-specific node. (for dynamic decal projection?) - Number of groups - Number of Blocks + Bethesda-specific extra data. Lists locations and normals on a mesh that are appropriate for decal placement. + + - Bethesda-Specific Particle node. - Unknown - Unknown - Unknown - Unknown - Unknown - Unknown - Colors + Bethesda-specific particle modifier. + + + + + + + Flags for BSValueNode. - - + - Bethesda-Specific node. Found on fxFire effects - Value - Value node flags. + Bethesda-specific node. Found on fxFire effects + + @@ -5468,51 +5733,49 @@ Bethesda-Specific (mesh?) Particle System Modifier. - Unknown + - Bethesda-Specific node. + Bethesda-Specific time controller. - Bethesda-Specific node. - Unknown - Unknown - Unknown + Bethesda-Specific particle system. + + + - + Particle system (multi?) emitter controller. - This controller's data - Links to a bool interpolator. Controls emitter's visibility status? - Bethesda-Specific node. + Bethesda-Specific time controller. Bethesda-Specific node. - Unknown - Unknown + + Bethesda-Specific node. - Min - Max - Current + + + @@ -5525,9 +5788,8 @@ - Bethesda-specific node. - - Link to Interpolator. + Bethesda-specific time controller. + @@ -5539,7 +5801,7 @@ Also, shapes collected in a bhkListShape may not have the correct walking noise, so only use it for non-walkable objects. - The number of sub shapes referenced. + List of shapes. The material of the shape. @@ -5550,26 +5812,18 @@ - - Bethesda-specific node. - - Translation. - Rotation. - Scale (usually float_min). - - - Bethesda-specific node. - Name of affected node? - Transform data. - Transform data. + Bethesda-specific compound. + + + - Bethesda-specific node. - Unknown. - Unknown. - Unknown float data. + Bethesda-specific interpolator. + + + @@ -5580,7 +5834,7 @@ - Bethesda-specific node. + Bethesda-specific object. Type of this note. Location in time. Unknown. @@ -5589,16 +5843,16 @@ - Bethesda-specific node. + Bethesda-specific object. Number of BSAnimNote objects. BSAnimNote objects. - Bethesda-specific node. + Bethesda-specific Havok serializable. - Unknown Flag - Unknown Flag + Unknown + Unknown @@ -5621,7 +5875,7 @@ - Bethesda-specific node. + Bethesda-specific object. @@ -5637,19 +5891,39 @@ - Bethesda-specific node. - Center - Radius + Bethesda-specific object. + + + + This is only defined because of recursion issues. + + + + + + + + Bethesda-specific. Describes groups of triangles either segmented in a grid (for LOD) or by body part for skinned FO4 meshes. + + Index = previous Index + previous Num Tris in Segment * 3 + The number of triangles belonging to this segment + + + + + + + - Bethesda-specific node. + Bethesda-specific AV object. Number of segments in the square grid Configuration of each segment - Bethesda-specific node. + Bethesda-specific object. Position of the AABB's center Extent of the AABB in all directions @@ -5668,12 +5942,12 @@ Has data Size of Block - Unknown - Unknown + + - Unknown - Unknown - Unknown + + + @@ -5685,7 +5959,7 @@ Number of atoms? The sum of all of these equal num total bytes per element, so this probably describes how each data element breaks down into smaller chunks (i.e. atoms). - Unknown + Unsure, but this seems to correspond again to the number of total bytes per element. @@ -5708,21 +5982,20 @@ - Bethesda-specific node. - Unknown - Unknown + Bethesda-specific extra data. + + - Bethesda-specific node. + Bethesda-specific Havok serializable. - - Bethesda-specific node. - Frustrum field of view animation interpolater and data. + + Bethesda-specific time controller. @@ -5737,8 +6010,8 @@ - Bethesda-Specific node. - + Bethesda-Specific Havok serializable. + @@ -5753,16 +6026,16 @@ Found in Fallout 3 .psa files, extra ragdoll info for NPCs/creatures. (usually idleanims\deathposes.psa) Defines different kill poses. The game selects the pose randomly and applies it to a skeleton immediately upon ragdolling. Poses can be previewed in GECK Object Window-Actor Data-Ragdoll and selecting Pose Matching tab. - Number of target bones. - Array of bone names. - Number of poses. - Array of poses. + + + + Found in Fallout 3, more ragdoll info? (meshes\ragdollconstraint\*.rdt) - Number of target bones - Bones in index + + @@ -5772,7 +6045,7 @@ - + @@ -5886,7 +6159,6 @@ The regions in the mesh. Regions can be used to mark off submeshes which are independent draw calls. Number of components of the data (matches corresponding field in MeshData). The format of each component in this data stream. - @@ -5904,7 +6176,7 @@ - + Reference to a data stream object which holds the data used by this reference. @@ -5921,51 +6193,43 @@ A lookup table that maps submeshes to regions. - + Describes the semantic of each component. - - Data stored per-material by NiRenderObject - The name of the material. - Extra data associated with the material? - - - + An object that can be rendered. - The number of materials affecting this renderable object. - Per-material data. - The index of the currently active material. - The initial value for the flag that determines if the internal cached shader is valid. + Per-material data. Describes the type of primitives stored in a mesh object. - - - + + + + - Specifies the time when an application must syncronize for some reason. - + A sync point corresponds to a particular stage in per-frame processing. + - + - + Base class for mesh modifiers. - The number of submit points used by this mesh modifier. - The submit points used by this mesh modifier - The number of complete points used by this mesh modifier. - The complete points used by this mesh modifier + + The sync points supported by this mesh modifier for SubmitTasks. + + The sync points supported by this mesh modifier for CompleteTasks. @@ -5998,10 +6262,10 @@ The number of submeshes contained in this mesh. Sets whether hardware instancing is being used. The combined bounding volume of all submeshes. - - + + - + Unknown. @@ -6023,11 +6287,12 @@ - - - - The number of morph targets. - Name of each morph target. + Manipulates a mesh with the semantic MORPHWEIGHTS using an NiMorphMeshModifier. + + + + + @@ -6056,78 +6321,133 @@ USE_SOFTWARE_SKINNING = 0x0001 RECOMPUTE_BOUNDS = 0x0002 - The root bone of the skeleton. - The transform that takes the root bone parent coordinate system into the skin coordinate system. + The root bone of the skeleton. + The transform that takes the root bone parent coordinate system into the skin coordinate system. The number of bones referenced by this mesh modifier. Pointers to the bone nodes that affect this skin. - The transforms that go from bind-pose space to bone space. + The transforms that go from bind-pose space to bone space. The bounds of the bones. Only stored if the RECOMPUTE_BOUNDS bit is set. + + An instance of a hardware-instanced mesh in a scene graph. + The instanced mesh this object represents. + + + - + Mesh modifier that provides per-frame instancing capabilities in Gamebryo. + + + + + + + + + + + + + - - - - - - 0? - - -1? - 0? - - 256? - 0? - 0? - 0? - 0? - 0? - Counter? - Simulator? - Generator? - Simulator? - Updater? - 1? - Emitter? - 0? - Spawner? - Unknown - Unknown - - - - - - - - - - -1? - + Defines the levels of detail for a given character and dictates the character's current LOD. + + + + + + + - - - Unknown - may or may not be emitted mesh? - - - - - + + + + + + - - - + + Describes the various methods that may be used to specify the orientation of the particles. + + + + Represents a particle system. + + + + + + + + + + + + + + + + + + + + + + + Represents a particle system that uses mesh particles instead of sprite-based particles. + + + + + + + + + + A mesh modifier that uses particle system data to generate camera-facing quads. + + + + A mesh modifier that uses particle system data to generate aligned quads for each particle. + + + + + + + + + + + + + + + + + + + + + + The mesh modifier that performs all particle system simulation. - The number of simulation steps in this modifier. - Links to the simulation steps. + + @@ -6144,42 +6464,36 @@ Encapsulates a floodgate kernel that updates particle size, colors, and rotations. - - The number of size animation keys. - The particle size keys. - The loop behavior for the size keys. - - - - - - The number of color animation keys. - The particle color keys. - The loop behavior for the color keys. - The number of rotatoin animation keys. - The particle rotation keys. - The loop behavior for the rotation keys. - The the amount of time over which a particle's size is ramped from 0.0 to 1.0 in seconds - The the amount of time over which a particle's size is ramped from 1.0 to 0.0 in seconds - Specifies the particle generation to which the grow effect should be applied. This is usually generation 0, so that newly created particles will grow. - Specifies the particle generation to which the shrink effect should be applied. This is usually the highest supported generation for the particle system, so that particles will shrink immediately before getting killed. + + The particle size keys. + The loop behavior for the size keys. + + The particle color keys. + The loop behavior for the color keys. + + The particle rotation keys. + The loop behavior for the rotation keys. + The the amount of time over which a particle's size is ramped from 0.0 to 1.0 in seconds + The the amount of time over which a particle's size is ramped from 1.0 to 0.0 in seconds + Specifies the particle generation to which the grow effect should be applied. This is usually generation 0, so that newly created particles will grow. + Specifies the particle generation to which the shrink effect should be applied. This is usually the highest supported generation for the particle system, so that particles will shrink immediately before getting killed. Encapsulates a floodgate kernel that simulates particle forces. - The number of forces affecting the particle system. - The forces affecting the particle system. + + The forces affecting the particle system. Encapsulates a floodgate kernel that simulates particle colliders. - The number of colliders affecting the particle system. - The colliders affecting the particle system. + + The colliders affecting the particle system. Encapsulates a floodgate kernel that updates mesh particle alignment and transforms. - The number of rotation keys. + The particle rotation keys. The loop behavior for the rotation keys. @@ -6188,308 +6502,427 @@ Encapsulates a floodgate kernel that updates particle positions and ages. As indicated by its name, this step should be attached last in the NiPSSimulator mesh modifier. - - - - - - - - - - - - - - + + Updates the bounding volume for an NiPSParticleSystem object. + Number of particle bounds to skip updating every frame. Higher = more updates each frame. + + + + + + This is used by the Floodgate kernel to determine which NiPSForceHelpers functions to call. + - - - + + Abstract base class for all particle forces. - - - - - - - - - - - + + - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - Gravity node? - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - + + Applies a linear drag force to particles. + + + + + + + + + Applies a gravitational force to particles. + + + + + + + + + + + Applies an explosive force to particles. + + + + + + + + + + + + Abstract base class for all particle emitters. - - - - - - + + + + + + + + + + + + + + + + + + + + - - - + + Abstract base class for particle emitters that emit particles from a volume. + - - - - + + A particle emitter that emits particles from a rectangular volume. + + + - - + + A particle emitter that emits particles from a spherical volume. + - - - - - - - - - - - - - - - - - - - - - - Target node? - + + A particle emitter that emits particles from a cylindrical volume. + + - - - + + + Emits particles from one or more NiMesh objects. A random mesh emitter is selected for each particle emission. + + + + + + - - + + + + + Abstract base class for all particle emitter time controllers. + - - + + + Abstract base class for controllers that animate a floating point value on an NiPSEmitter object. - - + + + Animates particle emission and birth rate. + - - + + + Abstract base class for all particle force time controllers. + - - + + + Abstract base class for controllers that animate a Boolean value on an NiPSForce object. - - + + + Abstract base class for controllers that animate a floating point value on an NiPSForce object. - - + + + Animates whether or not an NiPSForce object is active. + + + + Animates the strength value of an NiPSGravityForce object. + + + + Animates the speed value on an NiPSEmitter object. + + + + Animates the size value on an NiPSEmitter object. + + + + Animates the declination value on an NiPSEmitter object. + + + + Animates the declination variation value on an NiPSEmitter object. + + + + Animates the planar angle value on an NiPSEmitter object. - + + Animates the planar angle variation value on an NiPSEmitter object. - + + Animates the rotation angle value on an NiPSEmitter object. - - - - - - - - - - - - + + Animates the rotation angle variation value on an NiPSEmitter object. - - - - - - - - + + Animates the rotation speed value on an NiPSEmitter object. + + + + Animates the rotation speed variation value on an NiPSEmitter object. + + + + Animates the lifespan value on an NiPSEmitter object. + + + + Calls ResetParticleSystem on an NiPSParticleSystem target upon looping. + + + + + + This is used by the Floodgate kernel to determine which NiPSColliderHelpers functions to call. + + + + Abstract base class for all particle colliders. + + + + + + + + + + A planar collider for particles. + + + + + + + + + A spherical collider for particles. + + - + Creates a new particle whose initial parameters are based on an existing particle. + + + + + + + + + + + + + + The name of the animated NiAVObject. + The RTTI type of the NiProperty the controller is attached to, if applicable. + The RTTI type of the NiTimeController. + An ID that can uniquely identify the controller among others of the same type on the same NiObjectNET. + An ID that can uniquely identify the interpolator among others of the same type on the same NiObjectNET. + + Channel Indices are BASE/POS = 0, ROT = 1, SCALE = 2, FLAG = 3 + Channel Types are: + INVALID = 0, COLOR, BOOL, FLOAT, POINT3, ROT = 5 + Any channel may be | 0x40 which means POSED + The FLAG (3) channel flags affects the whole evaluator: + REFERENCED = 0x1, TRANSFORM = 0x2, ALWAYSUPDATE = 0x4, SHUTDOWN = 0x8 + - - + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + Handle into the data. (USHRT_MAX for invalid handle.) + + + + + + + + + Handle into the data. (USHRT_MAX for invalid handle.) + + + + + + + + + Handle into the data. (USHRT_MAX for invalid handle.) + + + + + + + + + + Handle into the translation data. (USHRT_MAX for invalid handle.) + Handle into the rotation data. (USHRT_MAX for invalid handle.) + Handle into the scale data. (USHRT_MAX for invalid handle.) - - + + + + + + + - - + + + + + + + - - + + + -1 = Negative, 1 = Positive + Max angle in radians. + + 0, 1, or 2 representing X, Y, or Z. + + + + + + Root node in Gamebryo .kf files (20.5.0.1 and up). + For 20.5.0.0, "NiSequenceData" is an alias for "NiControllerSequence" and this is not handled in nifxml. + This was not found in any 20.5.0.0 KFs available and they instead use NiControllerSequence directly. + + + + + + + + + + + + + The name of the NiAVObject serving as the accumulation root. This is where all accumulated translations, scales, and rotations are applied. + + + + + An NiShadowGenerator object is attached to an NiDynamicEffect object to inform the shadowing system that the effect produces shadows. + + + + + + + + + + + + @@ -6539,15 +6972,15 @@ Does not appear to be used. Number of chunk materials Table (array) with sets of materials. Chunks refers to this table by index. - Unknown + Number of chunk transformations Table (array) with sets of transformations. Chunks refers to this table by index. - Unknown + Compressed Vertices? - Unknown - Unknown - Unknown - + + + + Does not appear to be used. Needs array. @@ -6586,25 +7019,25 @@ - A variation on NiTriShape, for visibility control over vertex groups. - Unknown - Unknown - Unknown + A variation on NiTriShape, for visibility control over vertex groups. + + + - Furniture Marker for actors + Furniture Marker for actors - Unknown, related to trees. + Unknown, related to trees. - Node for handling Trees, Switches branch configurations for variation? - Unknown + Node for handling Trees, Switches branch configurations for variation? + Unknown - Unknown + Unknown @@ -6615,20 +7048,15 @@ Fallout 4 Tri Shape - - - - - - - - - - + + + + + - - + + @@ -6642,33 +7070,18 @@ - - - - - - - - - - - - - + + If Bone ID is 0xffffffff, this value refers to the Segment at the listed index. Otherwise this is the "Biped Object", which is like the body part types in Skyrim and earlier. + A hash of the bone name string. + Maximum of 8. + - - If Unknown Int 2 is 0xffffffff, this value refers to the Segment at the listed index. - - - - - - + - - + + @@ -6679,10 +7092,10 @@ - - + + - + @@ -6735,7 +7148,7 @@ - + @@ -6753,11 +7166,11 @@ - + - + @@ -6781,51 +7194,51 @@ - - - + - - - - - - + - + + + + + + - - + + + - - + This appears to be a 64-bit hash but nif.xml does not have a 64-bit type. + + - - - Fallout 4 Packed Combined Geometry Data - - - - - - - - + + + Fallout 4 Packed Combined Geometry Data. + Geometry is baked into the file and given a list of transforms to position each copy. + - + - + + + Fallout 4 Packed Combined Shared Geometry Data. + Geometry is NOT baked into the file. It is instead a reference to the shape via a Shape ID (currently undecoded) + which loads the geometry via the STAT form for the NIF. + +