Workers & Resources: Soviet Republic

Workers & Resources: Soviet Republic

Not enough ratings
Разработка модификаций (база)
By Shotkey
Руководство содержит исчерпывающий пайплайн портирования моделей в игру, что будет полезно начинающим модерам. Руководство написано на примере здания, без внимания к тонкостям настройки непосредственно конфигурационного файла building.ini. Показаны основы файловой структуры игровых объектов. Особенности настройки сложных конфигов можно изучить самостоятельно в руководствах по ЗДАНИЯМ и ТЕХНИКЕ от LovelyPL
   
Award
Favorite
Favorited
Unfavorite
0. Исходные файлы (рекомендации)
Для моделирования я рекомендую использовать Blender, поскольку он бесплатен (есть в steam), очень легок в освоении и имеет большой арсенал инструментов. С работой софта следует ознакомиться на специальных ресурсах, обучалок полно в ютубе. В целом, можно использовать любой 3д редактор. Имейте в виду, что редактор моделей скорее всего понадобится, даже если вы хотите использовать готовую модель из интернета.

Текстурный атлас — это квадратная картинка, на которой размещены текстуры вашей модели. Для работы с текстурами подойдет почти любой графический редактор, но лучше использовать фотошоп или хотя бы редакторы с поддержкой работы со слоями (например, paint.nеt). Лучше всего использовать фототекстуры, которых полно в интернете. Если чего-то нет, можно найти фотографии и обрезать их. В большинстве случаев бесшовные текстуры не требуются. Крайне нежелательно использовать текстуры нарисованные в пэйнте и тем более заливку цветом. Если нужен однородный цвет можно добавить фильтр шума или декали царапин, шероховатостей.

Закидываем все нужные картинки в один файл и масштабируем, чтобы они все имели пропорциональный размер. Если хотите, чтобы часть окон светилась ночью, то стоит сделать как минимум две текстуры окна, одна из которых потом будет подсвечена. Текстура загруженная в 3д редактор имеет неограниченные размеры, за счет замощения текстурного пространства. Поэтому для текстурирования больших площадей (например, стены) можно использовать бесшовные текстуры. В большинстве случаев достаточно бесшовности в одном направлении (тайлы): для этого края должны плавно переходить друг в друга.
тайловая текстура с малозаметным швом

Следующей особенностью рендеринга моделей является то, что текстура может отрисовываться с некоторым смещением, поэтому размещать текстуры необходимо либо с учетом их базового цвета (например, белые рядом с белыми), либо обрезать текстуру с запасом, либо вручную закрашивать несколько пикселей вокруг текстуры (паддинг).
отсутствие паддинга привело к «наползанию» соседней текстуры темного цвета и появлению темных полос на границе
паддинг между разными текстурами

Когда текстура готова, можно сделать цветокоррекцию отдельных слоев, чтобы все было гармонично, замазать всякий мусор, грязь, которые сильно бросаются в глаза. Если фрагмент текстуры задумано использовать многократно, то выделяющиеся детали могут создать неприятную глазу повторяемость (паттерн):
текстура с паттерном и после исправлений

Заключительный этап - «ночная» текстура (emissive), с помощью этого файла игра будет создавать свечение в ночное время, например окон и вывесок. Чтобы создать такую текстуру, нужно закрасить все несветящиеся объекты черным цветом. Подсвечиваемые зоны могут быть белыми или цветными. В игре ночная текстура наносится поверх обычной как цветофильтр, поэтому меняя цвет и яркость можно получить разный результат. Важно, чтобы подсвечиваемые области были на достаточном расстоянии от других текстур (до 50 пикселей), поскольку на расстоянии свечение будет наползать на соседние текстуры.
отступы подсвечиваемых текстур
текстура черепицы расположена слишком близко к текстуре окна

Сохраняем оба атласа (текстурный - diffuse, и ночной - emissive) в формате png и возвращаемся к модели. Создаем материал и добавляем туда нашу текстуру.

Теперь нужно сделать развертку модели (UV-карту граней) и разместить островки поверхностей на плоском текстурном пространстве. При этом не забываем, что текстурное пространство не имеет границ, если в атласе есть бесшовные текстуры - самое время их использовать. Островки размещаем с учетом необходимых зазоров (см. выше про паддинг). Островки можно растягивать и деформировать как угодно — главное, чтобы на модели это выглядело желаемым образом.
1. Экспорт файлов
Если нужно чтобы здание строилось в несколько этапов, то необходимо разбить модель на отдельные объекты. (Каждому этапу строительства необходимо назначить как минимум 1 объект для отрисовки. Кроме того, вдоль прямоугольной границы этих объектов будут располагаться строительные леса.) Дополнительно нужно поделить на части большие объекты, состоящие из более чем 21.845 треугольников. Выделяем отделяемые грани - "P" - "selection".

Упростите модель, убрав все лишние ребра, проверьте нет ли несвязных вершин и тд:
чисти, чисти вилкой

Проверьте нормали граней (направление видимой стороны грани) - они должны быть направлены во внешнюю сторону, иначе грань не будет видно.
для проверки нормалей включаем специальный слой визуализации и чиним все красное
розовые и фиолетовые - это совпадающие грани направленные в разные стороны


Проверяем расположение модели в пространстве. Если часть модели расположена ниже оси Z, то ее необходимо отделить, иначе для этого меша могут не отображаться строительные леса. По осям XY модель нужно отцентрировать - игровой курсор будет в нулевой точке глобальных координат сцены. В завершение, отзеркаливаем модели по оси Х (в игре она отзеркалится обратно).

Переименовываем все объекты - их названия будут прописаны в конфигурационном файле в разделе строительства, поэтому называем их коротко и понятно. При этом учитываем, что в блендер все дата-блоки одного типа должны называться по-разному. Проверяем название материалов: все объекты модели использующие общую текстуру могут иметь один материал. В общем случае, нет никаких ограничений как на использование нескольких материалов и текстур одной моделью, так и на использование несколькими моделями одного материала. Подробно настройка материалов будет описана дальше, сейчас главное правильно все назвать, не наплодить "дубликатов" и отделить то, что должно быть отдельно.

Экспорт: выделяем все объекты одной модели, далее выбираем экспортировать —> «wavefront .obj» —> только выделенные, триангулировать, материал включаем (но файл .mtl можно сразу удалить). В игре работает гладкий шейдинг, поэтому можно включить «shade autosmooth» и сохранить нормали вершин. При наличии модификаторов их можно включить тоже. Обращаем внимание, чтобы у модели была только одна UV карта.
экспорт одной модели из Blender

Важно упомянуть, что для тяжелых моделей крайне желательно добавить лод - низкополигональную модель, которая будет использоваться игрой на большом расстоянии. Помимо оптимизации, лод устраняет шумы на дистанции. Пример создания лода показан в приложении.

Далее создаем текстуру. Разрешение картинки обязательно должно быть степенью 2, то есть 512х512, 1024х1024, 2048х2048 и тд. Допустимы и прямоугольные варианты, например 512х1024. Формат используем .dds - в большинстве случаев хватит компактного BC1 (DXT1). Если есть прозрачные объекты сложной формы (особенно окна у техники), то можно использовать BC3 (DXT5), поскольку 1 бит альфа недостаточно для плавных переходов. ОБЯЗАТЕЛЬНО включаем мипмап (генерация мип-текстур, mipmap generation - ищем галочку).


Если таких опций нет, то лучше скачать другой редактор, плагин или конвертер. Я использую paint.nеt, также существуют dds-плагины для фотошопа - другие способы не пробовал, но их много. Наличие мип-карт в файле можно проверить, посмотрев на вес файла: если размер в кБ очень близок к числам 128, 256, 512, 1024, 2048 и тд - значит в файле содержится только текстура и не добавлена дополнительная информация. Вес должен быть примерно в 1.3 раза больше.
2. Конвертация файлов
Запускаем modelviewer (приложение в корневой папке игры), загружаем файл obj, сохраняем его в nmf. Далее повторяем этот алгоритм для каждой модели, каждый раз перезапуская modelviewer. Теперь создаем материал: выбираем нашу текстуру и настраиваем яркость каналов.
1. Добавочный цвет освещения солнцем. (сюда вставляем текстуру)
2. Собственная светимость граней.
3. Базовый цвет граней, без солнца.

Cохраняем материал с названием custom.mtl. Обычно цвета текстур в игре значительно отличаются от того, что вы видели в графическом редакторе. Как правило, светлые цвета становятся очень яркими, а темные - еще более темными. Солнечный свет накладывается поверх базового цвета, цвет на солнце (1) лучше сделать заметно меньше, чем базовый цвет в тени (3). Светимость (2) обычно используется только для ночной подсветки, однако с помощью нее можно также имитировать блики - они будут появляться с солнечной стороны. При правильной настройке это может выглядеть хорошо.

К сожалению, modelviewer не отображает реальные цвета из игры, поэтому использовать его для цветокоррекции неудобно. Материал проще всего настроить через блокнот:
3. Преднастройка мода здания
Запускаем игру, заходим в редактор зданий и сразу сохраняемся. Сворачиваем игру и открываем этот проект в каталоге media_soviet/buildingeditor/userbuildings/"цифры_название". Закидываем сюда файлы custom.nmf, custom.mtl и .dds текстуру. Возвращаемся в редактор и во второй вкладке выбираем «пользовательский nmf». Следующие вкладки игровых функций настраиваем в творческом формате. Сохраняем мод, при желании включаем «добавить в игру» и тестируем мод.

Если зданий несколько и они существенно различаются, можно настроить каждое из них аналогичным образом. Если же здания похожи, то достаточно настроить только одно. Настройка через редактор не является обязательной, но предоставляет удобный интерфейс для настройки базовых функций. Тем не менее, тонкая настройка мода возможна только путем редактирования кода в файле конфигурации. Это можно сделать позже, используя информацию из руководств LovelyPL.

Копируем все наши заготовки из buildingeditor/userbuilding в любое удобное место. Теперь эти папки лучше переименовать на что-то понятное. Все файлы element_script удаляем. Файл previewimage.png перемещаем на видное место, например на рабочий стол. Далее открываем блокнот и создаем файл .txt (кодировка UTF-8) с описанием нашего мода. Пока что хватит и пары предложений, остальное допишем позже. Заходим в мастерскую в игре, на вкладке «в разработке» жмем плюсик и заполняем все поля используя previewimage.png и созданное описание. После создания предмета больше не нужно заходить на эту страницу, пока мод не будет полностью завершен.
4. Настройка каталогов.
Заходим в media_soviet/workshop_wip и вставляем подготовленные каталоги в последнюю папку с длинным номером. Сюда же добавляем нашу «ночную» текстуру подсветки (emissive), если она нужна. Создаем копию файла custom.mtl и открываем его в modelviewer. Добавляем во второй графе «specular» ночную текстуру и сохраняем этот материал как ночной. При желании можно немного уменьшить яркость каналов, чтобы ночью здание было темнее. Ночью здание освещается луной, поэтому вкладка diffusecolor будет влиять по аналогии с солнцем. Можно не создавать и ночной материал - игра будет использовать дневной, но тогда цвета могут получиться слишком светлыми.

Прописываем в файле renderconfig пути к файлам необходимым для отрисовки модели:
Если моду не требуется ночной материал или лод, то соответствующие строчки нужно убрать из renderconfig. Наконец, в файле building.ini изменяем параметр $NAME_STR – это "название модели" в интерфейсе игры. Оно должно быть максимально полным и понятным (и желательно на английском), так как кроме него и миниатюрной иконки в игре больше ничего не видно. Ссылки на папки всех моделей вписываем в конфигурацию мода workshopconfig:

К этому моменту могла образоваться некоторая запутанность в файлах и каталогах. Поэтому я собрал их все на одной картинке. Стрелками здесь показана иерархия файлов - порядок их чтения игрой при загрузке карты, начиная с файла workshopconfig. Если что-то получилось по-другому, то доводим до ума.
Нарушение этой цепочки приведет к багам/вылету. Файлы .bbox и .fire создавать не нужно. Игра создает их автоматически при первой загрузке модели. Из-за этого при первом запуске не отображаются строительные леса. При замене модели эти файлы обязательно нужно удалить вместе со старой моделью, чтобы они создались заново.

Особенность каталогов техники - нет «renderconfig». Файлы материалов открываются напрямую и должны называться как на картинке: "material", "material_1", …, "material_15" (всего не более 16). Пути к другим файлам прописаны в скрипте, файлы preview и bbox генерируются автоматически.

Общие файлы, которые используются несколькими объектами можно перенести из папок моделей в корень или отдельную папку. В папке объекта обязательно должны быть файлы конфигурации building.ini и renderconfig.ini, игра будет искать их. Остальные файлы будут либо найдены по указанному пути, либо созданы автоматически.

При этом во всех ссылках корневой каталог мода обозначается как «../». Если нужно сослаться на другой мод из мастерской, то это подъем на две ступени каталогов, поэтому пишем «../../» - и далее путь к нужному файлу, например «../../2981690321/mtl/custom.mtl» - игра выйдет в корневую папку с модами, откроет каталог mtl в моде 2981690321 и загрузит оттуда файл custom.mtl.
Исключение - скины. Путь к целевому зданию сразу начинается с номера мода.

Возвращаемся к игре. Чтобы ускорить загрузку карты, можно отключить подписные моды во вкладке ваши подписки (снимаем галочку «отображать подписки»). На всякий случай ставим галочку «дополнительные записи в журнал для отладки». Загружаем новую игру, активировав игровые функции необходимые новому моду. При серьезных ошибках, игра вылетит на этапе инициализация зданий или техники. Проверить причину вылета можно открыв log.html в корне игры и изучив красные строки в файле. При стечении обстоятельств может произойти вылет и несвязанный с модом. Обычно в этом случае лог заканчивается строкой "game initialised". Просто пробуем еще раз.

Если все хорошо, то проверяем работоспособность мода. Здание сразу будет отображаться в самом конце списка модов из мастерской. (При желании, сразу делаем скриншоты моделей для иконок и для мастерской.) Для иконок imagegui.png достаточно размера 128х128 пикселей. Поскольку иконки в игре маленькие, желательно чтобы она была почти полностью заполнена моделью. Обратите внимание на яркость иконки - в игре она может казаться очень темной. При отсутствии файла imagegui.png, игра использует previewimage.png в качестве иконки.
5. Публикация.
При желании создаем свою превью - квадратную картинку в формате .png размером менее 1Мб. Вставляем его с заменой в папку мода. Объем описания имеет некоторое ограничение, примерно 5000 символов. Про форматирование текста описаний см. здесь. В описании нельзя использовать простые "кавычки". Если они нужны, используйте «елочки» и любые другие варианты оформления. Если хотим сделать описание на нескольких языках, то сначала делаем на английском (язык по умолчанию). Если не знаете английский, то можно спокойно вставить из гугл переводчика. Это будет крайне полезно для игроков, которые не знают ваш язык. Описание вставляем/пишем в файл workshopconfig в строке $ITEM_DESC "описание" - вместо нашей затычки.

Перезапускаем игру, чтобы она прочитала все изменения в файлах мода. Открываем мод в разделе мастерской в меню игры, выбираем «видимость для всех» (параметр $VISIBILITY в конфиге не трогаем). Подтверждаем изменения и ждем загрузки файлов на сервер - мод опубликован! Как только вы сделали это, мод появится в ленте новых модов. Последующие обновления никак не повлияют на расположение мода в ленте.

Открываем мод в своей мастерской в программе steam (иногда он может отсутствовать в общей ленте модов до 30 минут). Остается загрузить скриншоты мода: формат .jpg (не .jpeg), размер не более 2мб, и добавить описание на других языках (если нужно). Обращу внимание, что скриншоты нужно сначала все загрузить и сохранить, а чтобы переставить их местами, нужно зайти в редактирование скриншотов второй раз. Наконец, если мод использует файлы из других модов, нужно обязательно указать требование подписаться на них.

Подписываться на свой мод не нужно, однако сделать это можно. Например, если вы случайно удалили мод из папки wip или внесли неправильные изменения, то можно подписаться и скопировать актуальные файлы из папки steamapps\workshop\content\784150\"номер".

Мод можно редактировать почти без ограничений. Для этого после внесения правок необходимо перезапустить игру, зайти во вкладку мастерской, открыть мод и нажать галочку. Игра загрузит измененные файлы на сервер. Редактировать можно любые файлы, однако изменение основного nmf-файла здания может негативно сказаться на объектах, которые игроки уже построили на своих картах. Изменение только UV-карты модели не должно вызывать проблем. Отредактированный building.ini повлияет только на новые здания. Остальные файлы никак не влияют на корректность работы существующих сохранений. Проблем при редактировании техники я не встречал: насколько мне известно, из конфигов техники игра ничего не записывает в файл сохранения. Кроме прочего, при обновлении мода на сервер загружается измененная картинка previewimage.png и описание на английском из файла workshopconfig. Поэтому если вы изменили описание на английском в steam, то его нужно отредактировать и в конфигурационном файле.

Этих сведений должно быть достаточно. Я не рекомендую пропускать какие-либо из пунктов, в противном случае мод будет забагованным или некачественным. Как вопросы от новичков, так и замечания и советы от более опытных пользователей категорически приветствуются в комментариях!
Приложение - ЛОДЫ
Модели зданий замещаются лодом при отдалении камеры на 700-1500 метров. У техники эти расстояния меньше, а лодов может быть три. Желательно чтобы лод был значительно меньше основной модели, в противном случае затрата ресурсов на хранение и обработку дополнительного файла не будет оправданной.

Для создания лодов техники эффективно использовать инструмент «decimate» (модификатор или в редакторе "mesh - clean up"). Для создания лода здания используем примитивы - создаем новый объект и подгоняем его грани к нашей модели по привязкам. Совпавшие грани будут мерцать и рябить при вращении сцены. Дальше добавляем необходимые детали, которые особенно выделяются из общего силуэта и видны с расчетной дистанции. В целом, нужно основное внимание уделять внешним очертаниям и выпуклым деталям. Расстояние между поверхностями лода и модели может быть любым, точность запекания настраивается.

Ничего сложного, однако эту модель тоже нужно покрыть текстурой и наш атлас здесь совсем не годится, ведь нам нужно закрасить большие грани однородной текстурой, которая будет имитировать сложную геометрию основной модели. Чтобы решить эту проблему, необходимо «запечь» текстуры нашей готовой модели на геометрию лода. Запекание лодов на примере blender показано на видео:
Процедура чисто техническая, необходимо только выставить правильные настройки. Разворачиваем лод в автоматическом режиме, выставляем отступы (margin) 2-4 пиксела. Если у вас несколько лодов, будет хорошо запечь их все вместе, на общий атлас (тогда разворачиваем их тоже все вместе). Создаем лоду новый материал со своим названием и запекаем на него все объекты модели. Для этого выбираем все необходимое (удерж. ctrl) и последним выбираем наш лод (он будет активным), нажимаем «bake». Проверяем как выглядит лод с этой текстурой. Если что-то не запеклось, то играем параметрами «extrusion/ray-distance», в зависимости от расстояния между лодом и моделью в проблемных местах. Готовый файл сохраняем на диске, и запекаем таким же образом ночную текстуру. Лод .obj экспортируется отдельно от модели но по тому же принципу.
11 Comments
Shotkey  [author] 20 Apr @ 6:15am 
спасибо, смотрю три картинки крашнулись(
будет время попробую починить
nor.man 20 Apr @ 3:15am 
как всегда качественный материал!
papaChad 19 Apr @ 10:25am 
Хотел узнать, как работать с игровыми файлами, а узнал курс по Блендеру. Однозначно лайк !!!
Exvell 19 Apr @ 1:11am 
вообще дают
D!$$ 17 Nov, 2024 @ 11:47am 
Вопрос.
Дают ли достижения с модами из мастерской?
korsarone 9 Jul, 2024 @ 11:14am 
Есть-ли RU -руководство по созданию и настройке карт?
sashamoroz532 8 Mar, 2024 @ 2:06pm 
Доброго времени суток. Могу ли я продавать свои моды в этой игре?
RedDrake704 21 Feb, 2024 @ 6:58am 
мой дс mankoalexei
Shotkey  [author] 21 Feb, 2024 @ 6:56am 
Maxko/Avex, в дискорде можно скинуть
RedDrake704 21 Feb, 2024 @ 5:56am 
Добрый день, у меня возникла проблема с созданием транспорта. Когда я его доделал до играбельного состояния то в игре просто не отображается моделька грузовика, и в длине его нописано нереальная длина по типу -195642325423324232. Как решить или лучше стоит вам кинуть полную папку с ним?