WarCraft 3: Подробнее о MDL - Формат файла моделей

» Раздел: Моделлинг

// сам комментарий

//============©ScorpioT1000//
// Общие параметры
//=======================//
Version { //версия моделей
    FormatVersion 800, //остается 800
}

Model "Name" { // название модели
    NumGeosets 1, // количество мешей
    NumGeosetAnims 2, // количество анимаций видимости
    NumLights 1, // количество источников света
    NumHelpers 1, // количество помощников
    NumBones 5, // количество костей 
    NumAttachments 3, // количество прикреплений 
    NumParticleEmitters 1, // количество старых источников частиц
    NumParticleEmitters2 1, // количество источников частиц 2
    NumRibbonEmitters 1, // количество источников следа
    NumEvents 2, // количество событий 
    BlendTime 150, // время смешения 
    MinimumExtent { -27.125, -23.125, 0.225586 }, // минимальные границы модели 
    MaximumExtent { 22, 24.25, 98.5 }, // максимальные границы модели 
    BoundsRadius 34.4232, // радиус, при котором модель все еще видна, когда центр уходит за границы экрана
}
Sequences 2 { //последовательности
    Anim "Stand" { // название анимации 
        Interval { 0, 3333 },  // временной интервал 
        Rarity 1.5, // частота воспроизведения
        MoveSpeed 80, // скорость перемещения
        NonLooping, // не повторять сначала
        MinimumExtent { -27.125, -23.125, 0.225586 }, //минимальные
        MaximumExtent { 22, 24.25, 98.5 }, //и максимальные границы для анимации
        BoundsRadius 34.4232, //радиус видимости на экране для анимации
    }
    Anim "Walk" {
    //...
    }
}

GlobalSequences 2 { //глобальные анимации(у них нет названий)
    Duration 967, // длительность анимации 0
    Duration 467, // длительность анимации 1
    //итд
}

//==============©ScorpioT1000//
// 2D изображения
//=======================//
Textures 1 { //текстуры
    Bitmap { // является изображением
        Image "Textures\Goldmine.blp", //путь в архиве или в папке с моделью
        WrapWidth, //сохранять ширину
        WrapHeight, //сохранять высоту
        //текстура замощена на таблице, и если стоят эти флаги,
        //то можно перейти на соседние копии текстуры. Иначе там будет черная область
        ReplaceableId 1, // заменяемая текстура (значение от 1 до 32)
    }
}

Materials 2 { //материалы
    Material { //первый материал
        ConstantColor, // постоянный цвет
        SortPrimsFarZ, //сортировка по Z
        FullResolution, //полное разрешение
        PriorityPlane 2, //приоритет выравнивания
        
        Layer { //первый слой
            FilterMode None, //режим фильтрации слоя(см. ниже)
            Unshaded, //нет тени
            Unfogged, //видно в тумане
            static TextureID 0, //ID текстуры
            TwoSided, //двусторонний
            SphereEnvMap, //карта окружения сферы
            NoDepthTest,
            NoDepthSet,
            Alpha 2 { // анимация прозрачности(динамическая)
                Linear, // тип анимации
                0: 0, // номер кадра и использование альфы в долях (от 1 до 0)
                1000: 1,
            }
            //может быть просто
            //static Alpha 0.7,
        }
        
        Layer { //второй слой
            TextureID 2 { //текстура может быть анимирована по id
                DontInterp, // тип анимации
                0: 0,
                1000: 1,
            }
        }
        
    }
    
    Material { //второй материал
    }
}

TextureAnims 1 { //анимации текстур
    TVertexAnim { //анимация текстурных вершин
        Translation 2 { //перемещение
            DontInterp, //тип
            0: { 0, 0, 0 },
            1: { 1, 1, 1 },
        }
        //и прочие преобразования (см ниже)
    }
}

//=============©ScorpioT1000//
// Меши, вершины и группы
//=======================//
Geoset { //первый меш (номер 0)
    Vertices 4 { //вершины меша
        { -22.75, 12.9375, 42.25 },
        { -13.4375, 12.9375, 43 },
        { -22.75, 18.75, 41 },
        { -13.375, 18.75, 41.75 },
    }
    Normals 4 { //нормали вершин
        { -0.172104, -0.93708, -0.303745 },
        { 0.625556, -0.752452, -0.206145 },
        { -0.807936, 0.334689, -0.484998 },
        { 0.459442, 0.748768, -0.477765 },
    }
    TVertices 4 { //текстурные вершины
        { 0, 0 },
        { 0, 0.85 },
        { 1, 0 },
        { 1, 1 },
    }
    VertexGroup { //группы вершин(меша)
        0, //здесь все 4 вершины меша
        0, //находятся в группе 0
        0,
        0,
    }
    Faces 1 6 { //поверхность: трианглы включают в себя 6 вершин
        Triangles {
            { 0, 1, 2, 3, 2, 1 },
        }
    }
    Groups 1 1 { // группировка по костям: 1 матрица и 1 группа
        Matrices { 0 }, //означает что группа 0 привязана к кости "Chest"(id 0)
        //Matrices { 0, 1 }, //означает что группа 1 привязана к "Chest"(id 0) и "Origin"(id 1)
        // было бы, если есть вторая группа вершин.
        // тогда вверху надо написать "Groups 2 3"
    }
    
    MinimumExtent { -24.875, 12.9375, 41 }, //мин. границы этого меша
    MaximumExtent { -13.375, 24.25, 98.5 }, //макс. границы этого меша
    BoundsRadius 29.1094, //и радиус видимости этого меша
    Anim { //для анимок
        MinimumExtent { -24.875, 12.9375, 41 },
        MaximumExtent { -13.375, 24.25, 98.5 },
        BoundsRadius 29.1094,
    }
    Anim {
        //...
    }
    //вобще, считаю, вся эта дрянь совсем не нужна,
    //хватает и общих настроек всей модели(вверху)
    MaterialID 0, //ID материала меша
    SelectionGroup 0, //группа выделения
}


Geoset { //второй меш (номер 1)
    //...
}

//=============©ScorpioT1000//
// Кости и анимации
//=======================//
//типы анимаций: (простые)DontInterp,Linear, (c InTan/OutTan)Hermite,Bezier
//типы фильтраций: None,Transparent,Blend,Additive,AddAlpha,Modulate

//ПАРАМЕТРЫ ЛЮБОГО ОБЬЕКТА:
    ObjectId 0, // id объекта
    Parent 0, // id родителя
    Billboarded, //всегда повернут к экрану
    BillboardedLockX, //тоже, но по осям..
    BillboardedLockY,
    BillboardedLockZ,
    CameraAnchored, //закрепленная камера
    GeosetId 0, // номер используемого меша
    DontInherit { Translation, Rotation, Scaling }, //не наследовать указанные преобразования
    //работает от родителя
    //можно указать только нужные: DontInherit { Translation },
    
    Translation 2 { //перемещение
        Hermite, //тип
        0: { 0, 0, -17.0679 }, //кадры и значения X,Y,Z
            InTan { 0, 0, -17.0679 }, //тангенс входа
            OutTan { 0, 0, -3.75045 }, //и выхода
        1000: { 0, 0, -20.8183 },
            InTan { 0, 0, -3.75045 },
            OutTan { 0, 0, 3.75045 },
    }
    Rotation 2 { //вращение
        Linear, //тип
        0: { 0, 0, 0, 1 }, //кадры и значения
        //Представление: Кватернион вращения
        //Подробнее здесь: http://xgm.ru/forum/showthread.php?t=7963
        1000: { -1.7, 0.601815, 0, 0.798635 },
    }
    Scaling 3 { // масштабирование
        DontInterp, //тип
        0: { 1, 1, 1 }, //кадры и значения X,Y,Z
    }
//КОНЕЦ ПАРАМЕТРОВ


GeosetAnim { //анимация поверхности 1
    Alpha 4 { //прозрачность(анимирована)
        DontInterp, // тип перехода
        0: 0, //кадры
        1000: 1,
    }
    Color 2 { //цвет(анимирован)
        Hermite,
        0: { 1, 1, 1 },
            InTan { 0, 0, 0 },
            OutTan { 0, 0, 0 },
        1: { 0.5, 0.5, 0.5 },
            InTan { 0, 0, 0 },
            OutTan { 0, 0, 0 },
    }
    DropShadow, //бросать тени
    GeosetId 0, //используемый меш
}

GeosetAnim { //анимация поверхности 2
    static Alpha 0.8, //прозрачность(не анимирована) 
    static Color { 0, 1, 0 }, //цвет(не анимирован)
}

Bone "Chest" { // кость
    //ИМЕЕТ ПАРАМЕТРЫ ОБЪЕКТА
    GeosetId Multiple, //применимо ко всем мешам
    GeosetAnimId None,
}

Helper "Dummy01" { //Помощник
    //отличается от кости отсутствием дополнительных параметров
    //ИМЕЕТ ПАРАМЕТРЫ ОБЪЕКТА
}

CollisionShape "cube1" { //Форма геометрического пересечения 1
    //ИМЕЕТ ПАРАМЕТРЫ ОБЪЕКТА
    Box, //куб
    Vertices 2 { //вершины куба
        { 57, 56, 55 },
        { 1, 2, 3 },
    }
}

CollisionShape "sphere1" { //Форма геометрического пересечения 2
    //ИМЕЕТ ПАРАМЕТРЫ ОБЪЕКТА
    Sphere, //сфера
    Vertices 1 { //центр сферы
        { 12, 13, 4 },
    }
    BoundsRadius 666, //радиус сферы
}


Light "Omni01" { // источник света
    //ИМЕЕТ ПАРАМЕТРЫ ОБЪЕКТА
    Omnidirectional, // тип
    static AttenuationStart 80, // начальноая граница затухания
    static AttenuationEnd 200, // конечная граница затухания
    static Intensity 17, // интенсивность
    static Color { 0.87451, 0.984314, 1 }, // цвет
    static AmbIntensity 0, // интенсивность внешней освещённости
    static AmbColor { 1, 1, 1 }, // цвет внешней освещённости
    Visibility 2 { //анимация прозрачности
        DontInterp,
        0: 0, //кадры
        1000: 1,
    }
}

Attachment "Weapon Ref" { //крепление
    //ИМЕЕТ ПАРАМЕТРЫ ОБЪЕКТА
    AttachmentID 0, //имеет локальный id
    Path "blablabla", //путь к объекту
    Visibility 3 { //анимация прозрачности
        DontInterp,
        0: 0, //кадры
        1000: 1,
    }
}

PivotPoints 5 { // координаты объектов, в mdl/mdx они указываются отдельно
    { 0, 0, 39.4571 }, //это для объекта с id 0
    { 14.1266, 15.1009, 4.38412 }, //это с id 1
    { 15.0433, -18.3303, 6.96043 }, //итд
    { -21.5055, -18.0625, 6.96044 },
    { -20.6731, 15.062, 3.06344 },
    //должно быть для всех
}

ParticleEmitter "one" { //Старый источник
    //ИМЕЕТ ПАРАМЕТРЫ ОБЪЕКТА
    EmitterUsesMDL, //использует MDL модель
    EmitterUsesTGA, //использует текстуру TGA
    //здесь приведу анимированные параметры(во второй - нет)
    EmissionRate 2 { //частота создания
        DontInterp,
        0: 0,
        1: 1,
    }
    Gravity 2 { //гравитация
        DontInterp,
        0: 0,
        1: 1,
    }
    Longitude 2 { //долгота
        DontInterp,
        0: 0,
        1: 1,
    }
    Latitude 2 { // разброс
        DontInterp,
        0: 0,
        1: 1,
    }
    Visibility 2 { //анимация прозрачности
        DontInterp,
        0: 1,
        1: 1,
    }
    Particle { //частица
        LifeSpan 2 { //время жизни
            DontInterp,
            0: 0,
            1: 1,
        }
        InitVelocity 2 { //начальная скорость
            DontInterp,
            0: 0,
            1: 1,
        }
        Path "blabla", //путь к модели MDL
    }
}

ParticleEmitter2 "SmallBlastDebris" { //источник частиц 2
    //ИМЕЕТ ПАРАМЕТРЫ ОБЪЕКТА
    SortPrimsFarZ, //сортировать по Z
    Unshaded, //нет тени
    Unfogged, //видно в тумане
    static Speed 440, // скорость движения частиц
    static Variation 0, // кучность
    static Latitude 55, // разброс
    static Gravity 3, // гравитация
    // если не static, то динамические
    Squirt, // распылять
    LifeSpan 0.71, // время жизни
    EmissionRate 4 { //частота создания (динамическая)
        DontInterp,
        65033: 0,
        65333: 22,
        65433: 0,
        122167: 0,
    }
    static Width 24, // ширина разброса
    static Length 24, // длинна разброса
    // если не static, то динамические
    Blend, // смешение
    Rows 1, // количество строчек
    Columns 1, // количество столбцов
    //это если текстура состоит из кадров, например 4на4
    Head, //есть голова
    TailLength 0.1, //длинна хвоста
    Time 0.7, //время
    XYQuad, //плоские по XY
    
    SegmentColor { //цвет сегментов(R,G,B) - всегда три
        Color { 0, 0.682353, 1 },
        Color { 0, 0.309804, 0.658824 },
        Color { 0, 0, 0 },
    },
    Alpha {255, 255, 0}, //прозрачность сегментов
    ParticleScaling {5, 5, 5}, // масштаб сегментов, абсолютно (1 = 100%)
    
    LifeSpanUVAnim {0, 0, 1}, //время жизни анимации текстуры
    DecayUVAnim {0, 0, 1}, //анимация разложения текстуры
    TailUVAnim {0, 0, 1}, //карта хвоста
    TailDecayUVAnim {0, 0, 1}, //анимация разложения текстуры хвоста
    TextureID 0, // ID используемой текстуры
}

RibbonEmitter "BlizRibbon01" { //следы и пятна
    //ИМЕЕТ ПАРАМЕТРЫ ОБЪЕКТА
    static HeightAbove 48.312,
    static HeightBelow 48.372,
    static Alpha 0.35, //прозрачность
    static Color { 0, 0.635294, 1 }, //цвет
    static TextureSlot 0, //слот у текстуры
    Visibility 2 { //анимация прозрачности
        DontInterp, //тип
        0: 0, //кадры
        1000: 1,
    }
    EmissionRate 35,
    LifeSpan 0.35, //время жизни
    Gravity 2, //гравитация
    Rows 1, //строчек у текстуры
    Columns 1, //столбцов у текстуры
    MaterialID 1, //id используемого материала
}

Camera "Camera01" { //камера
    Position { 403.317, -10.8177, 202.115 }, //позиция глаза камеры
    FieldOfView 0.538016, // угол линзы
    FarClip 1000, // дальность рендеринга
    NearClip 8, // ближняя вырезка
    Target { //цель камеры
        Position { -86.5748, -22.7399, 0.860381 }, // координаты цели
    }
}

//источники звука
EventObject "SNDxDOLS" { //звук1, название - строковое id, которое можно найти в архиве в файле slk звуков
    //ИМЕЕТ ПАРАМЕТРЫ ОБЪЕКТА
    //НЕ ИМЕЕТ ObjectId и parent !
    EventTrack 1 { //кадры воспроизведения
        25,
        500,
    }
}

//©ScorpioT1000

Просмотров: 4 650

dave_wwid #1 - 8 лет назад 5
Весьма полезно. Было бы еще классно дать дополнительно список звуков, эмиттеров частиц и следов (ribbons) с кратким их описанием. Хотя это уже скорее отдельная тема.