Additive - это уже относится к текстуре, то есть при наложении слоёв происходит их сложение, а выдаётся результат, также возможно существование схожих с альфой режимов. Особенность слоя - существует множество различных особенностей.
Unshaded - не затеняется, при этом теряется реалистичность.
TwoSided - слой накладывается на обе стороны меша - лицевую и оборотную, если же этот параметр не указан, то текстура наносится только на лицевую сторону, если же посмотреть с обратной стороны, то будет видно сквозь меш.
Unfogged - убирает дымчатость, что конкретно это означает, пока не знаю, но устанавливается этот параметр весьма редко, только если материал используется для создания спецэффекта, например объектах, летящих при событии. Регулировка прозрачности - определяет какую долю альфы брать в орпеделённый промежуток времени. При этом установленное число будет действовать до следующей установки другого числа или ближайшего ключевого кадра анимации, которыми являются кадры начала и окончания анимации, указанные в описании последовательностей анимации. Значение любого параметра в ключевых кадрах считается равным максимальному (в данном случае единице). Это очень важный момент, так как ключевые кадры, как я уже сказал, оказывают влияние на все параметры, а значит в них происходит обнуление внесённых изменений. Тип регулеровки прозрачности - влияет на то как прозрачность будет меняться от одного кадра до другого.
DontInterp - мгновенный переход из одного значения в другое.
Linear - постепенный переход.
----------------------
Продолжение следует... mildarf добавил 26.09.2005 в 05:07
Продолжение.
---------------------
МЕШИ (Meshes).
Код:
----------------------
Geoset {
Vertices 4 { // Вершины меша //
{ -138.925, -309.508, 296.323 },
{ -138.925, -309.508, -222.794 },
{ -219.2, 261.674, 296.323 },
{ -219.2, 261.674, -222.794 },
}
Normals 4 { // Нормали вершин //
{ 0.990268, 0.139173, -1.90921e-008 },
{ 0.990268, 0.139173, -1.90921e-008 },
{ 0.990268, 0.139173, -1.90921e-008 },
{ 0.990268, 0.139173, -1.90921e-008 },
}
TVertices 4 { // Текстурные вершины //
{ 0, 0 },
{ 0, 1 },
{ 1, 0 },
{ 1, 1 },
}
VertexGroup { // Группы вершин(меша) //
0,
0,
1,
1,
}
Faces 1 6 { // Поверхность //
Triangles {
{ 0, 1, 2, 3, 2, 1 },
}
}
Groups 2 2 { // Группировка по костям //
Matrices { 0 },
Matrices { 1 },
}
MinimumExtent { -219.2, -309.508, -222.794 }, // См. описание последовательностей анимации //
MaximumExtent { -138.925, 261.674, 296.323 },
Anim {
MinimumExtent { 3.40282e+038, 3.40282e+038, 3.40282e+038 },
MaximumExtent { -3.40282e+038, -3.40282e+038, -3.40282e+038 },
}
Anim {
MinimumExtent { -219.2, -309.508, -222.794 },
MaximumExtent { -138.925, 261.674, 296.323 },
BoundsRadius 388,
}
MaterialID 0, // ID материала меша //
SelectionGroup 0, // Группа выделения //
}
----------------------
Это меш номер 0. Далее идут все остальные меши, организованные таким же образом. В этой части файла и задаётся статическая геометрия (форма) модели. вершины меша - координаты вершин, ID. нормали вершин - координаты нормалей вершин, указывающие, где у точки лицевая сторона, а где оборотная. Звучит странно, но тем не менее. Текстурные вершины - координаты вершин меша на текстуре, благодаря им определяется как накладывается текстура на модель. Группы вершин меша - объединение вершин для технических целей. В данном примере первые две вершины объединены в группу 0, другие две - в группу 1. Поверхность - здесь из вершин составляется поверхность. Вершины объединяются в треугольники, из которых уже состоит поверхность. Группировка по костям - немаловажная часть моделирования, определяет какие вершины управляются какими костями. ID номер Matrices (матрицы) соответсвует ID номеру группы вершин, а число в фигурных скобках соответствует объектному ID номеру кости. Подробнее об объектном ID номере будет сказано немного позднее. В данном примере, вершины, относящиеся к группе вершин номер 0, будут управляться костью с объектным номером 0. ID материала меша указывает, какой материал будет применён к этому мешу. Группа выделения - пока не знаю, что это, но во всех моделях равен 0 для всех мешей.
Затем идёт анимация видимости.
Код:
----------------------
GeosetAnim {
Alpha 4 {
DontInterp, // Тип перехода //
0: 0,
967: 1,
1333: 0,
5800: 0,
}
GeosetId 0, // Используемый меш //
}
GeosetAnim {
Alpha 4 {
DontInterp,
0: 0,
967: 1,
733: 0,
4800: 0,
}
GeosetId 1,
}
----------------------
Здесь также каждой анимации соответствует свой ID номер. Тип перехода - та же функция, что и у типа регулеровки прозрачности в разделе материала, даже те же названия используются. Устанавливается номер кадра и значение, при этом 1 - объект виден, 0 - невидим.
ВСПОМОГАТЕЛЬНЫЕ ОБЪЕКТЫ РАЗНЫХ ТИПОВ.
Далее идут вспомогательные объекты разных типов. При этом все они нумеруются независимо от типа.
Код:
----------------------
Bone "Plane01" { // Тип и название объекта //
ObjectId 0, // Номер объекта //
Billboarded, // Особенность объекта //
GeosetId 0, // Номер используемого меша //
GeosetAnimId 0, // Номер используемой анимации видимости //
Scaling 3 { // Тип преобразования //
Linear, // Способ перехода //
GlobalSeqId 0, // Номер глобальной анимации //
0: { 1, 1, 1 },
67: { 1.54938, 1.54938, 1.54938 },
966: { 1, 1, 1 },
}
}
Bone "Box01" {
ObjectId 1,
Parent 3, // Родитель объекта //
GeosetId Multiple,
GeosetAnimId None,
Rotation 2 {
Hermite,
667: { 0, 0, 0, 1 },
InTan { 0.110167, 0.0903195, 0.0587129, 0.988058 },
OutTan { 0.110167, 0.0903195, 0.0587129, 0.988058 },
733: { -0.238667, -0.195669, -0.127196, 0.942641 },
InTan { -0.357136, -0.210093, -0.174873, 0.89316 },
OutTan { -0.357136, -0.210093, -0.174873, 0.89316 },
}
Translation 2 {
Hermite,
333: { 0, 0, -17.0679 },
InTan { 0, 0, -17.0679 },
OutTan { 0, 0, -3.75045 },
967: { 0, 0, -20.8183 },
InTan { 0, 0, -3.75045 },
OutTan { 0, 0, 3.75045 },
}
}
----------------------
Слово bone значит, что объект - кость. Номер объекта - тот самый номер, который указывался в матрицах при группировке верши по костям. Запись "Matrices { 0 }" означает, что вершинами управляет кость с номером 0, в данном примере это кость "Plane01". Номер используемого меша нужен для ускорения работы компьютера. Если кость управляет сразу несколькими матрицами из разных мешей, то пишется GeosetId Multiple. Номер используемой анимации видимости указывает какая анимация отвечает за видимость кости. Если для этой кости не испоьзуется анимация видимости, то пишется GeosetAnimId None. Надо заметить, что поскольку к кости привязаны матрицы, то им передаются все изменения происходящие с костью, включая видимость. Ведь действительно, зачем управлять видимостью кости, если её всё равно не видно? Это нужно для передачи воздействия на матрицы. Но, как у матриц есть управляющий, так и костей он может быть. Обычно это помощник, хотя может быть и другая кость, при этом указывается Parent ID (номер родителя). В этом прмере родителем кости 1 является помощник 2. Тип преобразования - какое преобразование будет происходить с костью:
Scaling - изменение масштаба. Задаётся в долях по каждой оси координат отдельно.
Rotation - вращение. Первые две координаты задают точку на плоскости XY, через которую и начало координат проводится плоскость, параллельная оси Z. На этой плоскости оставшимися двумя координатами задаётся окончательная точка поворота. Translation - вроде премещение.
Visibility - видимость. Способ перехода - то же, что и тип регулеровки в анимации видимости.
Bezier - безье тип, то есть кривая прехода с регулируемой гладкостью.
InTan - входящая в вершину гладкость, OutTan - выходящая.
Глобальная анимация задаётся либо в костях либо в помощнике. Для этого достаточно после способа перехода написать GlobalSeqId и ID-номер. Все последующие после этого координаты преобразования будут причисляться к глобальной анимации. У одной кости или помощника может быть несколько преобразований разного типа, в данном примере у кости "Box01" два преобразования: вращение и премещение.
ИСТОЧНИКИ СВЕТА.
После костей идут источники света.
Код:
----------------------
Light "Omni01" { // Название //
ObjectId 2,
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 6 {
DontInterp,
67: 0,
600: 0,
65033: 0,
65300: 1,
65467: 0,
240000: 0,
}
}
----------------------
По типу, источники света делятся на точечные (omni) и направленные (direct). Omnidirectional - точечный. Свет затухает от начальной до конечной границы. До начальной его интенсивность не меняется и равна 100 процентам, а после конечной не изменяется и равна 0. Цвет задаётся в долях трёх основных цветов: красного, зелёного, синего.
----------------------
Продолжение следует...
mildarf добавил 26.09.2005 в 05:08
Продолжение.
---------------------
ПОМОЩНИКИ (Helpers).
Код:
----------------------
Helper "Dummy01" {
ObjectId 3,
Translation 2 {
Linear,
5000: { 0, 0, 0 },
5333: { 3.43655, -4.24382, -13.444 },
}
}
----------------------
Структура строения помощников весьма схожа со структурой костей. Главное отличие состоит в том, что у помощника указывается только его ID-номер и задаётся преобразование.
ПРИКРЕПЛЕНИЯ (Attachment Points).
Код:
----------------------
Attachment "Origin Ref " {
ObjectId 4,
}
Attachment "Overhead Ref" {
ObjectId 5,
}
Attachment "Weapon Ref" {
ObjectId 6,
Parent 3,
Visibility 3 {
DontInterp,
133: 0,
567: 0,
667: 1,
}
}
----------------------
Origin и Overhead - не правда ли знакомые названия? Именно эти прикрепления и определяют положение внешних эффектов, прикрепляемых к юниту. Но прикрепления могут быть не только статическими, им также как и костям с помощниками можно задавать преобразование и родителей. Обратите внимание, что нумерация прикреплений начинается не с нуля, а является продолжением общей нумерации объектов.
ГЕОМЕТРИЧЕСКИЕ ЦЕНТРЫ (Pivot Points).
Код:
----------------------
PivotPoints 11 {
{ -5.57062, 0.220597, 20.2984 },
{ 3.28472, -4.53012, 30.8989 },
{ -4.28088, 17.2638, 32.6912 },
{ -8.02448, -0.0493665, 35.7101 },
{ -7.2794, 1.89344, 30.8989 },
{ -153.026, -86.0745, 368.757 },
{ -116.208, -193.252, 151.937 },
{ -7.2692, 5.58314, 344.523 },
{ -7.9371, 1.42364, 568.952 },
{ 189.757, 61.9468, 245.577 },
{ -23.4029, -5.56605, 105.132 },
}
----------------------
Первая строчка - координаты геометрического центра объекта с ID равным 0. И так далее для всех объектов.
Комментарий by mildarf: некоторые разделы были пропущены, так как не несли никакой смысловой нагрузки для CS 1.6
Далее идут камеры. Хотя обычно, если и есть в модели камера, то она одна.
Код:
----------------------
Camera "Camera01" {
Position { 403.317, -10.8177, 202.115 }, // Позиция камеры //
FieldOfView 0.538016, // Сила линзы //
FarClip 1000, // Дальнее отсечение //
NearClip 8, // Ближнее отсечение //
Target {
Position { -86.5748, -22.7399, 0.860381 }, // Координаты цели //
}
}
----------------------
Камера не входит в общую нумерацию объектов. Для неё задаётся координаты объектива и цели, на которую он смотрит. Сила линзы определяет угол обзора камеры, чем больше значение, тем больше угол. За пределами растояния, попадающего в промежуток между дальней и ближней границей отсечения, ничего для камеры не видно.
А теперь, как применив эти знания, создать свою модель.
Если у вас уже есть модель, то её надо сперва мысленно разбить на простые составляющие. Голова с туловищем, руками и ногами - один параллелепипед, конь - другой параллелепипед. Далее считаете количество вершин в каждом таком составляющем. Создаёте свою mdl, в котором делаете столько мешей, сколько составляющих у вас получилось (в принципе можно и меньше). Заносите в них координаты необходимых вершин, не важно какие координаты, главное чтобы были все необходимые вершины. Затем запсываете триугольники, чтобы получились именно те простые фигуры, которые в получили. Задаёте остальные, необходимые для корректной работы параметры (например вершины текстуры), но не создаваёте пока анимации. Теперь модель готова. Опытным путём задаёте нужные координаты текстурных вершин. Анимация делается посредством всё тех же костей, помщников, источников частиц и т. д. Вообщем, как я и предупреждал, соэдание своей модели через mdl - тяжёлое занятие.
Некоторые особенности mdl:
Координаты в mdl расположены не так как в максе, а именно, то, что в mdl x, y, z, то в максе -y, x, z. Вот такие странности, но это проверенно и подтвержденно.
Другое перевёртывание - цветовое. Там, где задаётся цвет он задаётся не RGB, а BGR.
Вращение меша, привязанного к кости происходит вокруг геометрического центра (pivot) кости.
Не забывайте, если у какого-либо объекта не указана точка его расположения, значит это задаётся через pivot point этого объекта.
----------------------
Теперь вы супер-моделлер!