The Hierarchy of NetImmerse Classes⚓︎
This page puts into relation various classes that compromise Morrowind's scene graph. Some of these classes are abstract, meaning they aren't directly found in the scene graph but are used by other classes to inherit common variables and methods. The game's scene graph can be inspected by entering ssg (show scene graph) command in the console. Morrowind's engine is Gamebryo, which was before known as NetImmerse. That's why these classes have the prefix ni in their name. These classes in MWSE follow the naming as in the vanilla engine. But, some classes contain information about the scene graph in MWSE and have tes3 prefixes such as tes3vector3
.
The primary building blocks of the scene graph are called nodes. Each node has one parent and zero or more child nodes. For example, the base node of Morrowind's world scene graph, named worldRoot
, and all the game world objects are represented by nodes that are children of the worldRoot
node.
Note that the relations described here don't reflect how these types are organized in the scene graph. For instance, the worldRoot
node mentioned earlier is of type niNode
, but is the root node of the world's scene graph, while the base class of most types described here is niObject
.
The types are arranged into functional groupings. Within each grouping, indentation implies inheritance from the class of the previous indentation level. The color of the text carries the following meanings:
- Turquoise - Classes read by MWSE but not yet exposed to Lua scripts
- Green - Classes present in Morrowind but not yet read by MWSE
- All the other classes in standard text color in this list are available in Lua scripts
niMain⚓︎
Basic Foundation Types⚓︎
- niColor
- niColorA
- niPackedColor
- niRTTI
Basic Math and Geometry Classes⚓︎
- niBound
- tes3boundingBox
- tes3matrix33
- tes3vector2
- tes3vector3
- niQuaternion
- tes3transform
Templated Container Classes⚓︎
- niTArray - not exposed as a type but can be iterated as a standard Lua array.
- niLinkedList
- niDynamicEffectLinkedList
- niNodeLinkedList
- niPropertyLinkedList
Animation Classes⚓︎
- niObject
- niTimeController
- niObjectNET
- niAVObject
- niNode
- niBSAnimationManager
- niBSAnimationNode
- niBSParticleNode
- niNode
- niSequenceStreamHelper
- niAVObject
Texturing Classes⚓︎
- niObject
- niBltSource
- niObjectNET
- niTexture
- niRenderedTexture
- niRenderedCubeMap
- niSourceTexture
- niRenderedTexture
- niTexture
- niPalette
- niPixelData
- niPixelFormat
Object Depth Sorting Classes⚓︎
- niObject
- niAccumulator
- niClusterAccumulator
- niAlphaAccumulator
- niClusterAccumulator
- niAccumulator
Geometry Data Classes⚓︎
- niObject
- niGeometryData
- niLinesData
- niTriBasedGeomData
- niParticlesData
- niAutoNormalsParticlesData
- niRotatingParticlesData
- niTriShapeData
- niTriShapeDynamicData
- niTriStripsData
- niParticlesData
- niGeometryData
Geometry Rendering Classes⚓︎
- niObject
- niObjectNET
- niAVObject
- niGeometry
- niLines
- niTriBasedGeometry
- niTriShape
- niTriStrips
- niParticles
- niAutoNormalParticles
- niRotatingParticles
- niGeometry
- niAVObject
- niScreenPolygon
- niSkinData
- niSkinDataBoneData
- niSkinDataBoneDataVertexWeight
- niSkinInstance
- niSkinPartition
- niSkinPartitionPartition
- niObjectNET
Scene Graph Organization Classes⚓︎
- niObject
- niExtraData
- BrickNiExtraData
- niStringExtraData
- niTES3ExtraData
- niTextKeyExtraData
- niVertWeightsExtraData
- niObjectNET
- niAVObject
- niNode
- AvoidNode
- niBillboardNode
- niBSPNode
- niSortAdjustNode
- niSwitchNode
- niFltAnimationNode
- niLODNode
- niNode
- niAVObject
- niExtraData
Lightning and Effects Classes⚓︎
- niObject
- niObjectNET
- niAVObject
- niDynamicEffect
- niLight
- niAmbientLight
- niDirectionalLight
- niPointLight
- niSpotLight
- niTextureEffect
- niLight
- niDynamicEffect
- niAVObject
- niObjectNET
Rendering and Property Classes⚓︎
- niObject
- niObjectNET
- niAVObject
- niCamera
- niProperty
- niAlphaProperty
- niDitherProperty
- niFogProperty
- niMaterialProperty
- niRendererSpecificProperty
- niShadeProperty
- niSpecularProperty
- niStencilProperty
- niTexturingProperty
- niVertexColorProperty
- niWireframeProperty
- niZBufferProperty
- niAVObject
- niRenderer
- niDX8Renderer
- niObjectNET
niParticle⚓︎
Particle System Classes⚓︎
- niObject
- niEmitterModifier
- niParticleModifier
- niGravity
- niParticleBomb
- niParticleCollider
- niPlanarCollider
- niSphericalCollider
- niParticleColorModifier
- niParticleGrowFade
- niParticleRotation
- niTimeController - Not only related to particles
- niParticleSystemController
- niPerParticleData
niCollision⚓︎
Collision Classes⚓︎
- niCollisionGroup
- niCollisionGroupRecord
- niObject
- niObjectNET
- niAVObject
- niNode
- RootCollisionNode
- niCollisionSwitch
- niNode
- niAVObject
- niObjectNET
- niPick
- niPickRecord
niAnimation⚓︎
Animation Classes⚓︎
- niObject
- niColorData
- niExtraData - this type is not related to animation by itself.
- niTextKeyExtraData
- niFloatData
- niKeyframeData
- niMorphData
- niPosData
- niSequence
- niTimeController
- niFlipController
- niFloatController
- niAlphaController
- niRollController
- niKeyframeController
- niKeyframeManager
- niLightColorController
- niLookAtController
- niMaterialColorController
- niMorpherController
- niGeomMorpherController
- niParticleSystemController
- niBSPArrayController
- niPathController
- niUVController
- niVisController
- niUVData
- niVisData
- niAnimationKey
- niColorKey
- niFloatKey
- niBezFloatKey
- niTCBFloatKey
- niPosKey
- niBezPosKey
- niTCBPosKey
- niRotKey
- niBezRotKey
- niTCBRotKey
- niEulerRotKey
- niTextKey
Diagrammatic representation⚓︎
%%{
init: {
'er': {
'diagramPadding': 5,
'entityPadding': 5
},
'flowchart': {
'diagramPadding': 2,
'curve': 'monotoneX'
}
}
}%%
graph LR
A(niObject) --> B(niAccumulator);
B --> BA(niClusterAccumulator);
BA --> BAA(niAlphaAccumulator);
A --> C(niExtraData);
C --> CA(BrickNiExtraData);
C --> CB(TES3ObjectExtraData);
C --> CC(niStringExtraData);
C --> CD(niTextKeyExtraData);
C --> CE(niVertWeightsExtraData);
A --> D(niGeometryData);
D --> DA(niLinesData);
D --> DB(niParticlesData);
DB --> DBA(niAutoNormalParticlesData);
DB --> DBB(niRotatingParticlesData);
subgraph Scroll down for more info
D --> DC(niTriBasedGeomData);
end
A --> E(niObjectNET);
subgraph Scroll down for more info
E --> EA(niAVObject);
E --> ED(niTexture);
end
E --> EC(niSequenceStreamHelper);
E --> EB(niProperty);
EB --> EBA(niAlphaProperty);
EB --> EBB(niDitherProperty);
EB --> EBC(niFogProperty);
EB --> EBD(niMaterialProperty);
EB --> EBE(niRendererSpecificProperty);
EB --> EBF(niShadeProperty);
EB --> EBG(niSpecularProperty);
EB --> EBH(niStencilProperty);
EB --> EBI(niTexturingProperty);
EB --> EBJ(niVertexColorProperty);
EB --> EBK(niWireframeProperty);
EB --> EBL(niZBufferProperty);
A --> F(niParticleModifier);
F --> FA(niGravity);
F --> FB(niParticleBomb);
F --> FC(niParticleCollider);
FC --> FCA(niPlanarCollider);
FC --> FCB(niSphericalCollider);
F --> FD(niParticleColorModifier);
F --> FE(niParticleGrowFade);
F --> FF(niParticleRotation);
A --> G(niRenderer);
G --> GA(niDX8Renderer);
A --> H(niTimeController);
H --> HA(niFlipController);
H --> HB(niFloatController);
HB --> HBA(niAlphaController);
HB --> HBB(niRollController);
H --> HC(niKeyframeController);
H --> HD(niKeyframeManager);
H --> HE(niLightColorController);
H --> HF(niLookAtController);
H --> HG(niMaterialColorController);
H --> HH(niMorpherController);
HH --> HHA(niGeomMorpherController);
H --> HI(niParticleSystemController);
HI --> HIA(niBSPArrayController);
H --> HJ(niPathController);
H --> HK(niUVController);
H --> HL(niVisController);
A --> I(niBltSource);
A --> J(niColorData);
A --> K(niEmitterModifier);
A --> L(niFloatData);
A --> M(niKeyframeData);
A --> N(niMorphData);
A --> O(niPalette);
A --> P(niPixelData);
A --> Q(niPosData);
A --> R(niScreenPolygon);
A --> S(niSequence);
A --> T(niSkinData);
A --> U(niSkinInstance);
A --> V(niSkinPartition);
A --> W(niUVData);
A --> X(niVisData);
%% Default style
classDef default color: #fafafa, fill:#434659, stroke:#e6e6e6, stroke-width:2px;
%% Turquoise
classDef notExposed color:#000, fill: #40E0D0, stroke: #333, stroke-width: 2px;
class B,HA,HK,L,Q,R,W notExposed;
%% YellowGreen
classDef notResearched color:#000, fill: #ADFF2F, stroke: #333, stroke-width: 2px;
class BA,BAA,CA,CE,EBB,EBE,EBF,EBG,EBK,EC,GA,HB,HBA,HBB,HE,HG,HH,HHA,HIA,HL,I,K,N,O,X notResearched;
%%{
init: {
'er': {
'diagramPadding': 5,
'entityPadding': 5
},
'flowchart': {
'diagramPadding': 2,
'curve': 'monotoneX'
}
}
}%%
graph LR
ED(niTexture);
ED --> EDA(niRenderedTexture);
EDA --> EDAA(niRenderedCubeMap);
ED --> EDB(niSourceTexture);
%% Default style
classDef default color: #fafafa, fill:#434659, stroke:#e6e6e6, stroke-width:2px;
%% YellowGreen
classDef notResearched color:#000, fill: #ADFF2F, stroke: #333, stroke-width: 2px;
class EDAA notResearched;
%%{
init: {
'er': {
'diagramPadding': 5,
'entityPadding': 5
},
'flowchart': {
'diagramPadding': 2,
'curve': 'monotoneX'
}
}
}%%
graph LR
DC(niTriBasedGeomData);
DC --> DCA(niTriShapeData);
DCA --> DCAA(niTriShapeDynamicData);
DC --> DCB(niTriStripsData);
%% Default style
classDef default color: #fafafa, fill:#434659, stroke:#e6e6e6, stroke-width:2px;
%% YellowGreen
classDef notResearched color:#000, fill: #ADFF2F, stroke: #333, stroke-width: 2px;
class DCAA,DCB notResearched;
%%{
init: {
'er': {
'diagramPadding': 5,
'entityPadding': 5
},
'flowchart': {
'diagramPadding': 2,
'curve': 'monotoneX'
}
}
}%%
graph LR
EA(niAVObject);
EA --> EAA(niCamera);
EA --> EAB(niDynamicEffect);
EAB --> EABA(niTextureEffect);
EAB --> EABB(niLight);
EABB --> EABBA(niAmbientLight);
EABB --> EABBB(niDirectionalLight);
EABB --> EABBC(niPointLight);
EABBC --> EABBCA(niSpotLight);
EA --> EAC(niGeometry);
EAC --> EACA(niLines);
EAC --> EACB(niParticles);
EACB --> EACBA(niAutoNormalParticles);
EACB --> EACBB(niRotatingParticles);
EAC --> EACC(niTriBasedGeometry);
EACC --> EACCA(niTriShape);
EACC --> EACCB(niTriStrips);
EA --> EAD(niNode);
EAD --> EADA(AvoidNode);
EAD --> EADB(RootCollisionNode);
EAD --> EADC(niBillboardNode);
EAD --> EADD(niBSAnimationManager);
EAD --> EADE(niBSPNode);
EAD --> EADF(niCollisionSwitch);
EAD --> EADG(niSortAdjustNode);
EAD --> EADH(niBSAnimationNode);
EADH --> EADHA(niBSParticleNode);
EAD --> EADI(niSwitchNode);
EADI --> EADIA(niFltAnimationNode);
EADI --> EADIB(niLODNode);
%% Default style
classDef default color: #fafafa, fill:#434659, stroke:#e6e6e6, stroke-width:2px;
%% Turquoise
classDef notExposed color:#000, fill: #40E0D0, stroke: #333, stroke-width: 2px;
class EAC,EACC notExposed;
%% YellowGreen
classDef notResearched color:#000, fill: #ADFF2F, stroke: #333, stroke-width: 2px;
class EACCB,EADA,EADB,EADD,EADE,EADIA,EADIB notResearched;