Системное программирование на QC. Часть 1.

Тем, кто хочет начать моделировать для Half-Life (и не только, т.к. скомпилировать можно ещё в кучу игр), я написал статью про то, как создать в MilkShape 3D модель и поставить в редакторе уровней Hammer.​

1) Что подсказывает пространственное воображение стоит нарисовать (т.к. модель простая, то совсем не обязательно):

набросок модели скобы

2) Т.к. несколько моделей в одном каталоге создадут неразбериху, создаёте подкаталог для модели в рабочем каталоге вашего проекта, к примеру в нашем моде Ralert:
C:\Ralert\Модели\Скобы\
В нём скоро появятся файлы векторной модели — *.smd и мультипликаций — тоже *.smd, текстуры — *.bmp, файл с параметрами компиляции — *.qc и потом скомпилированная модель — *.mdl
3) Туда кидаем 256-ти цветную текстуру в формате *.bmp. Вот развёртка текстуры рифлёной поржавевшей стали ГС:

Текстура арматуры из стали ГС

Небольшое отступление от темы: называться .bmp-текстура может как угодно, даже по-русски, но если она будет начинаться приставкой "chrome", то на всей модели этой текстуре автоматически будет присвоен статус "хромированного" покрытия... или никелированного, а ещё точнее блестящей полированной поверхности. Хромированный эффект на текстуре — это когда грань расположена фронтально, то она красится в цвет центральной точки текстуры 64х64. Чем сильнее наклон, например, вправо, тем выбирается более дальняя от центра справа точка. А например, левую верхнюю точку алгоритм выберет при наклоне почти на 90° влево вверх. Если текстура больше, то выбирается только часть. Вот текстура для проверки 64x64 и переливающиеся грани куба с хромовым эффектом из этой текстуры:

Текстура для проверки эффекта хромирования куб, на переливающихся гранях которого хромовый эффект

А теперь хромовый эффект на шаре со сферическим сглаживанием, когда этот искажённый узор текстуры выглядит одинаково со всех сторон шара:

хромовый эффект на сфере выглядит одинаково со всех сторон

вернее почти одинаково, т.к. шар из небольших треугольников неидеален.
И ещё иллюстрации с текстурой 128х128 — вначале модель шара с наложенной текстурой без эффекта, а то на предыдущих примерах не сравнивал:

Текстура для проверки эффекта хромирования Шар без хромового эффекта Ещё шар без хромового эффекта

Когда хромовый эффект используется с текстурой 128x128, видна только верхняя левая четверть текстуры 64х64:

хромовый эффект на сфере выглядит одинаково со всех сторон
Кстати, этот шар был более многогранным, а значит гладким, чем предыдущий. Но сейчас "хром" ни к чему. Если будет надо, то и на скомпилированной модели текстуре можно будет задать этот эффект в просмотрщиках и сохранить.
Так вот, в Милке сразу из текстуры стали сделаем материал

Создание материала в Milk-е

Вкладка Materials/New и верхняя кнопка, обозначенная на рис. розовым, предложит загрузить текстуру
4) Цилиндр (точнее это призма, ладно пофиг). Кстати, цилиндр самый универсальный, т.к. из него получается большинство фигур вращения — конус (и усечённый), тор, труба, всякие лампочки, вазы и т.п. Спирали тоже. А цилиндром вместе с инструментом Face можно создавать произвольные основания — буквы можно делать.
Создадим цилиндр
Панель инструментов/Вкладка Model/кнопка Cilinder

В Milk Shape создан цилиндр

Число сторон я выбрал 9 (сначала, но финальную я сделал заново с 5 сторонами для скорости на карте).Выбираем 7 сегментов вдоль скобы, чтобы изгибы смотрелись приличнее.
А внизу оставим флажок "Close Cilinder" — чтобы основания цилиндра тоже были. (Обычно он у меня сброшен — основания я заполняю вручную инструментом Face. Получается на 2 треугольника меньше в каждом основании, особенно если, например, их потом 10-ти кратно размножаете, то экономия в 40 граней).
5) Выделяем центры оснований:
Вкладка Model/кнопка Select + ниже кнопка Vertex и масштабируем по высоте - кнопка Scale + ниже включите кнопку оси Y,а X и Z — отключите.
Для начала важно запомнить, что здесь Y — вертикальная ось.
Между делом, по умолчанию у нас 4 экрана: слева фронтальный вид, под ним — вид сверху, справа — вид слева и объёмное окно. В объёмном окне зажав Ctrl или Shift можно менять вид мышкой.

6) svyortyvanie-milka.png

А) Теперь выделяем вершины и поворачиваем на 45 градусов
Б) Rotate + ниже включена кнопка Z и введено 45
В) Подравниваем кнопкой Move и
Г-Д) выделяем-вращаем-подравниваем
Е) Снизу симметрично доделывается и
Ё) Подгоняется длина хвостов
7) Отмасштабированную скобу повернём, чтобы была параллельно полу. И выделяем её как группу (т.к. к выделению вершин не присвоится материал):

выделение группы для материала в Milk Shape

И присваиваем материал:
Вкладка Materials/Assign
В объёмном окне появится затекстуренная скоба:


модель затекстурена

Если у вас не появилась затекстуренная. То...
В объёмном щёлкните правой кнопкой и среди 4 верхних строк поставьте Texture. Ну а если это не помогло, загрузите текстуру в материал заново.
8) Подравняем текстуру:
Меню Tools/Texture Coordinate Editor


редактор координат текстуры

Кнопками Select и Move подравниваем:


текстура подравнена


Если у вас не отображаются проекции рёбер на текстуру, значит или вам нужно выбрать в комбинированном списке редактора координат текстуры нужную группу (в примере она пока и так всего одна) или группа (3D объект) вообще не была выбрана.
9) Делаем из скоб лестницу. Выделим скобу как группу или грани и щёлкаем
Меню Edit/Dublicate Selection
Присвоили новой группе наш материал (Вкладка Materials/Assign). А сейчас поднимаем её вверх на 17 единиц:
Вкладка Model->Move, а внизу включена кнопка Y cо значением 17, которое мы ей вписываем. Жмём рядом с кнопкой Z специально обученную... В общем понятно какую кнопку. Всего сделаем 20 ступенек. Эт хорошо.
10) Модель не бывает без мультипликации. Для этого нужен скелет. Поставим одну скелетную вершину — joint:


скелетная вершина


Кстати, "joint" можно было бы перевести ещё и как "сустав". Если кружок скелетной вершины слишком велик, зайдите в меню File->Preferences... и замените в поле Joint Size вкладки Misc размер 0,2 или 0,02 вместо 1.

Только помните особенность энтити monster_furniture из Hammer-а. Если ставите monster_furniture на произвольной высоте, он сваливается своей нижней скелетной вершиной на пол (точнее ближайший брашевый блок). Если под ней у модели есть грани — они уйдут в пол. Чтобы не сваливались, правда, можно ставить не с помощью monster_furniture, с помощью непроходимого в игре объекта Cycler, но подробно сейчас об этом не буду.

Чтобы присвоить вершины к скелетной вершине, выделим скелетную вершину... чего её выделять, она одна. Выделим вершины скоб.

Можно выделить совсем просто: так как они все у нас не принадлежат ещё к скелету, так что:
Вкладка Joints->SelUnAssigned — выделяются незадействованные вершины
Joints/Assign — присобачили


присвоение к скелету


11) На последок я одну скобу искривил — повернул часть по 2 осям. И заострённые концы, которые будут в стене удалил.


кривая модель


12) Можно экспортировать:
Меню File->Export->Half-Life SMD
Под названием skoba1.smd
Сейчас Милка спросит Reference или Sequence. Reference — это векторная сетка, Sequence — мультипликация. Наш — первая.
А в другой модели я удалил кривую — поставил нормальную. И также экспортировал под названием skoba0.smd
(кстати обычно в smd-файлах сеток пишут оканчание _ref, но это важно там, где куча smd-файлов движений)

13) Режим мультипликации включается большим кнопарём снизу:

мультипликация в милке

Так как движений нет, можно сделать единственный кадр. И запомнить его (сделать его ключевым):
Ctrl+k или
Меню Animate->Set Keyframe

14) Экспорт движения:
Меню File->Export->Half-Life SMD
Сохранить под названием idle.smd (в переводе с англ. "холостое движение")
Опять спросит "Referense или Sequence?". Sequence.

⚠️ Внимание данная тема в дальнейшем будет дополняться! Благодарю вас за внимание!
 
Last edited:
Back
Top