====== Дополнительный инструментарий ====== В этой статье расскажем о дополнительных инструментах для обработки файлов. ===== Компиляция шейдеров ===== **Шейдеры** — это под программы, выполняют вычисления на графическом процессоре (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'', закрываем. Поздравляем модель добавлена в игровой движок.