====== Дополнительный инструментарий ======
В этой статье расскажем о дополнительных инструментах для обработки файлов.
===== Компиляция шейдеров =====
**Шейдеры** — это под программы, выполняют вычисления на графическом процессоре (GPU) и управляют тем, как объекты и эффекты отображаются на экране\\
О расположении шейдеров можно узнать [[/me/tree#contents|тут]]
* Открываем директорию "Contents/shaders" и создаем две папки
* с названием ''fragm'' — означает исходники для фрагментных шейдеров
* с названием ''vertex'' — означает исходники для вершинных шейдеров
* Создаем шейдеры (к примеру, вот такой — смотреть [[#создание_шейдеров|тут]])
* Создаем в корневой директории игрового движка файл сценарий командной строки ''dev_compilleShaders.cmd''
@echo off && cd Bin32\ && ME_Shaders "\fragm\video" && cd ..\Contents\shaders\fragm && ren *.bin *.chf && move *.chf .. && cd ..\..\..\Bin32\ && ME_Shaders "\vertex\video" && @echo off && cd ..\Contents\shaders\vertex && ren *.bin *.chv && move *.chv ..
pause
* Запускаем файл ''dev_compilleShaders.cmd'' сценарий для компиляции шейдеров
* В папке "Contents/shaders" должны появится новые два файла: ''video.chf'' и ''video.chv''
===== Создание шейдеров =====
В шейдерных файлах должна быть первая стройка ''#MotionEngine_Shader_File'' для того, чтобы игровой движок смог понять, что этот файл для него создан. Также сохраняется обычно в формате ''*.assets''. \\
**пример файлов:**\\
Фрагментный шейдер "video.assets" в папке "/Contents/shaders/fragm"
#MotionEngine_Shader_File
out vec4 FragColor;
in vec3 ourColor;
in vec2 TexCoord;
// texture sampler
uniform sampler2D texture1;
void main()
{
FragColor = texture(texture1, TexCoord);
}
Вершинный шейдер "video.assets" в папке "/Contents/shaders/vertex"
#MotionEngine_Shader_File
layout (location = 0) in vec3 aPos;
layout (location = 1) in vec3 aColor;
layout (location = 2) in vec2 aTexCoord;
out vec3 ourColor;
out vec2 TexCoord;
void main()
{
gl_Position = vec4(aPos.xy,0,0.5);
ourColor = aColor;
TexCoord = vec2(aTexCoord.x, -aTexCoord.y);
}
===== Конвертация 3д-моделей в игровой движок =====
==== Структура модели ====
* Файл ''<название модели>.mep'' (**me**ta **p**rop ) **Информационный файл (описание модели):**
{"model":"<название модели>.ME2","author":"<автор>","published":"<когда создана была модель в формате: ГГГГ.ММ.ДД>"}
* Файл ''<название модели>.ME2'' (**M**otion **E**ngine версии **2**) — Сама 3д-модель экспортированная
* Файл или файлы "<название модели>.ME2.s*.mtx" скинов — указываются текстуры для модели, тем самым можно сделать несколько скинов у одной 3д-модели (нумерация первого скина начинается с нуля, к примеру: "TestModel.ME2.s0.mtx", или "TestModel.ME2.s5.mtx"). Выглядит файл скина, например:
{"textures":[{"id":"Map1-image","name":"Map1","path":"solids/bed_01.gi"}]}
Но обращаем внимание, что файл автоматически генерируется при экспорте в формат ME2. Эти все перечисленные файлы они обязательные, иначе игровой движок не сможет запустить модели, либо же другой инструментарий.
==== Экспорт 3д-моделей ====
> Из своего опыта расскажем, что бывают непонятные проблемы с геометрией экспортированных 3д-моделей из программы Blender.
* Открываем Autodesk 3ds max нашу созданную новую 3д-модель
* В главном меню выбираем "Customize" -> "Units Setup":
{{gallery>:sdk:pasted:20251012-231829.png?800x800}}
Проверяем, чтобы заданы параметры были также как на скриншоте:
{{gallery>:sdk:pasted:20251012-231929.png?800x800}}
Нажимаем на кнопку "System Unit Setup" откроется ещё настройка, тоже проверяем. Должно быть также как на скриншоте:
{{gallery>:sdk:pasted:20251012-232032.png?800x800}}
Нажимем ОК в двух окнах.
* Выделяем модель нажимаем ПКМ, преобразуем модель в полигональную сетку:
{{gallery>:sdk:pasted:20251012-232203.png?800x800}}
* Сбрасываем трансформацию объектов (нужно выполнять для правильности отображения модели 1:1 - метров)
{{gallery>:sdk:pasted:20251012-233122.png?800x800}}
* Выбираем экспорт в главном меню: "File" -> "Export" -> "Export...", указываем формат: "Autodesk Collada (*.dae)", сохраняем в папку "Contents/objects" файл "<название вашей модели>.dae". Нажимаем "Save" в диалоговом окне экспорта.
* Модель готова к экспорту. Проверяем наличие файлов: "<название модели>.ME2", "<название модели>.s0.mtx"
==== Создаем файл mep ====
Создаем файл описания модели по формату, который ранее был показан в структуре — [[#структура_модели|тут]]
==== Обработка 3д-модели ====
На данный момент существует два способа конвертации файла 3д-модели в формат ME2 игрового движка.
- в редакторе карт ''MERadiant'' с помощью инструмента (подробнее смотрите [[/me/editor#обработка_моделей|тут]])
- с помощью сценария командной строки
- для этого создайте файл ''make.cmd'' в корневой папке игрового движка с содержимым и запустите (в этом случае текстуры необходимо из старого формата преобразовать в GI-формат - [[#обработка_текстур|далее вручную обработаем текстуры]]):
@echo off && cd Bin32\ && ME_TEXTURE "../Contents/objects/<ваше название модели>.dae" "../Contents/objects/<ваше название модели>.ME2"
==== Обработка текстур ====
Текстуры должны располагаться в папке "Contents/textures" в тематической папке для эффективного поиска текстур.
* Создаем файл "make2.cmd" сценария командной строки в корне игрового движка:
@echo off && cd Bin32\ && ME_TEXTURE GI "../Contents/textures/<пример под папки>/<текстура>.tga" "../Contents/textures/<пример под папки>/<текстура>.gi"
* Выполняем файл "make2.cmd", в итоге получается файл текстуры
==== Настройка файла скинов ====
В этом разделе, сейчас настроим файл скинов, а именно заменим путь на относительный (игровой движок понимает только относительный путь от папки "Contents/textures/<папка которую знает движок>")
- находим например нужный скин у модели в папке "Contents/objects" ''<название модели.ME2.s0.mtx'', открываем с помощью блокнота.
- открывается код в синтаксисе JSON, редактируем пути в значениях ''path'' (не должно содержать: ''file:'' или полный путь с указанием букв диска), пример правильного пути: ''solids/geom_tunel2.gi''
- сохраняем ''CTRL+S'', закрываем.
Поздравляем модель добавлена в игровой движок.