using MshLib; namespace NResUI.Rendering.Inspection; /// /// Parsed MSH component data retained so state/LOD changes can rebuild GPU meshes without reparsing the file. /// public sealed class MshModelGeometry { /// Таблица узлов 0x01: именно она связывает каждый piece с geometry slot для пары state/LOD. public required Msh0x01.Msh0x01Component Nodes { get; init; } /// Слоты геометрии 0x02. Один piece выбирает один слот через 0x01.ResolveSlotIndex. public required Msh0x02.Msh0x02Component GeometrySlots { get; init; } /// Позиции вершин из 0x03. public required IReadOnlyList Positions { get; init; } /// Нормали из 0x04. Компонент опционален, поэтому фабрика мешей обязана иметь fallback. public required IReadOnlyList Normals { get; init; } /// UV из 0x05. Компонент опционален для части ресурсов. public required IReadOnlyList Uvs { get; init; } /// Индексный буфер 0x06 для обычных моделей. public required IReadOnlyList Indices { get; init; } /// Render batches 0x0D: диапазоны индексов, material id и render flags. public required IReadOnlyList Batches { get; init; } /// Piece transform keyframes from MSH 0x08. public required IReadOnlyList TransformKeyframes { get; init; } /// Animation frame to 0x08 keyframe map from MSH 0x13. Optional in some files. public required IReadOnlyList AnimationMap { get; init; } /// Animation frame count/window from MSH 0x13 NRes metadata. public required int MaxAnimationTime { get; init; } }