SamuKata
teedeezet
teedeezet

boosty


Итоги месяца: июнь 2024

Привет всем спонсорам!
  
Работа над проектом в июне оказалась плодотворной и интересной. Правда, я настолько увлёкся разработкой, что почти забыл о новом ролике. Исправлять это недоразумение придётся в июле, причём высокими темпами.
  
[Grim Wild]
  
Основные задачи были нацелены на закрытие всех старых дыр, чтобы завершить разработку версии 0.3, протестировать её нововведения и приступить к созданию 0.4. И это всё было успешно сделано.
   
Новые переходы поверхностей
  
Я давно планировал переделать визуальное отображение поверхностей. В предыдущие попытки результат меня не удовлетворял. А теперь - очень даже.
  
Все поверхности визуально выпирают на соседние клетки, и там рисуется переход.
  
Границы можно рисовать разные - за это отвечает отдельная текстура. У сыпучих поверхностей она такая:
  
У кирпичей - вот такая:
  
 Некоторые переходы выглядят не очень красиво, но это тестовый вариант.
  
В сравнении с прошлым визуалом, я считаю нововведение крайне удачным. Вся логика, кстати, целиком и полностью просчитывается на видеокарте, так что отнимать драгоценных ресурсов у процессора не будет.
 
Редактор спрайтов
  
В результатах работы за май я упоминал разработку редактора спрайтов. Тогда я писал, что он существует "для меня самого" только в движке.
  
В июне его разработка продолжалась, и я ввёл туда несколько инструментов, которые будут полезны и мододелам. Например, визуальное редактирование сокетов или указание области текстуры для отрисовки.
  
Теперь редактор доступен прямо в игре, и с его помощью создатели модов смогут намного быстрее и удобнее работать со спрайтами.
    
Раньше я думал, что изменение свойств спрайтов будет происходить через окно виртуальных ассетов (а там просто текстовые поля) или через Lua. Как же хорошо, что теперь это не так!
  
Композитные текстуры
  
Про композитные текстуры я уже писал в большом посте про отрисовку. Напомню об их функционале кратко:   
  
Типичная текстура в GW имеет формат RGBA8. В каждом канале (красный, зелёный, синий, прозрачность) один пиксель занимает восемь бит (значения от 0 до 255).
 
Если для RGB это оправдано, то вот для прозрачности (которая в ГВ не имеет промежуточных значений; то есть пиксель либо строго прозрачный, либо строго непрозрачный) достаточно всего одного бита. В остальные 7 я могу записывать для пикселя любую другую информацию.
Испытания маски блеска прошли неудачно: в реальности всё выглядит не так красиво, как в моих фантазиях.
 
Главная задача композитных текстур - создать в системе отрисовки дополнительный функционал, при этом полностью сохранив изначальную производительность и базовые принципы. Например, полную совместимость с runtime текстурными атласами. Повторное использование спрайтов через Sprite Pool. Объединение Draw Calls и кэширование команд для отрисовки.
 
Разработка этой механики состояла из двух частей:
1) Текстуры с побитовой манипуляцией надо как-то создавать. Никакие популярные программы не позволяют делать это быстро и удобно.
2) Текстуры надо правильно обрабатывать (добавлять на атлас / использовать в шейдере на GPU). И делать это так, чтобы результат при использовании обычных текстур ничем не отличался от композитных.
 
Именно этими пунктами я и занимался в июне. Вторая часть не такая уж интересная, потому что заготовки под неё я делал с самого начала работы над новой отрисовкой.
 
А вот первая - очень даже. Ведь я сделал удобную утилиту, позволяющую создавать композитные текстуры автоматически. Всё, что требуется от меня или от мододела - это загрузить вводные данные из нескольких самых обычных текстур.
 
Финальная текстура визуально почти ничем не отличается от базовой. Я специально сделал так, чтобы при предпросмотре (например, в проводнике Windows) её прозрачность примерно была похожа на оригинальную
 
Демонстрация маски оттенка в игре:

Итоги месяца: июнь 2024

Как и было сказано, объединение Draw Calls + кэширование команд отрисовки + использование в Sprite Pool было полностью сохранено
 
Отложенное обновление трансформации
 
Про него я тоже писал в посте, так что теорию повторять не буду.
  
Обновление трансформации спрайтов (локация, поворот, масштаб) теперь происходит один раз в конце кадра и идёт сверху вниз: от "корней" (сцен, пристыкованных напрямую к уровню) до "листьев" (конечных спрайтов, к которым ничего не пристыковано).
 
Корни - это чанки. То, что они являются отдельной сценой, позволяет иметь возможность двигать их и менять видимость. Движение чанков может быть полезно для будущих идей, например, космических кораблей. 1 космический корабль являлся бы корнем, от которого при плавном движении по уровню наследовалась бы трансформация всех находящихся внутри объекты.
 
В июне для этой механики было сделано почти всё, но пара проблем всё же осталась. Как и ровно один вылет игры, причины которого я продолжаю активно расследовать. Именно из-за этих мелочей я и не могу уже сейчас заявить, что "система отрисовки на 100% готова". Она готова, вероятно, пока только на 99%.
 
Вариации спрайтов
 
В игре у спрайтов могут быть визуальные вариации. Например, тело человека: нормальное, тонкое, толстое и мускулистое. Или разный внешний вид для постройки "статуя".
 
Раньше мне приходилось создавать для каждой вариации отдельный ассет. У меня были, например, Body_Normal, Body_Thin, Body_Fat и Body_Muscular. Меня это более-менее устраивало, но когда я дошёл до одежды, началась полная жесть. Ведь она тоже имеет 4 вариации для каждого вида тела. 
 
Именно поэтому я решил модифицировать механику типов спрайтов, о которой писал в прошлых итогах.
 
Если раньше ассеты спрайтов могли быть Single (1 спрайт внутри) или Directed (повернутые на 3 стороны: восток, юг, север), то сейчас они стали такими:
• Single: по 1 спрайту внутри вариации
• Double: по 2 спрайта (горизонтальный и вертикальный) внутри вариации.
• Triple: по 3 спрайта (восток, юг, север) внутри вариции.
• +TileSet, Custom (я писал о них раньше)
Тело теперь занимает всего один ассет (тип Triple, 4 вариации внутри)
   
Asset View
   
Я готовлюсь к реализации системы виртуальных ассетов (я про неё часто говорил, но она всё ещё не реализована), и некоторые изменения для этого уже вносятся в Asset Manager.
   
В основном это всё скучно и не представляет для спонсоров большого интереса. Единственное, что я бы хотел показать - это новое окно Asset View ("просмотр ассетов"), которое активно помогает мне в отладке и поиске проблем.
  
Здесь можно увидеть тип, название, путь и статус ассета (загружен/выгружен)
  
Этот инструмент будет полезен и мододелам, поэтому я решил включить его в саму игру. Доступен он прямо через консоль разработчика. 
  
Lua и скрипты
   
Ещё одна важная часть развития проекта - это скриптовый язык Lua. Я продолжаю развивать и совершенствовать его возможности. И сейчас я с удивлением для себя обнаружил, что скорость тестирования и отладки у меня значительно выросла. В некоторых аспектах я предпочитаю писать именно Lua скрипты, а не код на C++ или спагетти на Blueprints. 
Новые функции и "классы", которые были добавлены в июне
 
Немного деталей.
 
Внедрить Lua в проект на Unreal Engine оказалось не так уж сложно. Для этого существует как минимум два плагина: UnLua от Tencent и LuaMachine от независимых разработчиков. 
 
Я попробовал оба этих плагина и остановился на LuaMachine как на базе, которую я начал модифицировать и дополнять под себя и свои нужды.
 
Китайцы хоть и сделали профессиональный и производительный продукт, но меня не заинтересовали: некоторая документация там есть только на китайском языке. Как и комментарии в коде. Как и описание коммитов в ГитХабе. В общем, к принудительному изучению китайского языка я оказался не готов.
  
(техническая информация)
В Grim Wild используется Lua 5.4. То есть не LuaJIT. К этому я отношусь спокойно, потому что супер-сложных и performance-critical скриптов в игре не будет. Lua у меня в проекте - это просто обёртка C++ кода, где и выполняется всё самое тяжёлое и важное.
  
Кстати, это не единственное, что косвенно связывает меня с Tencent. Когда-то давно я сделал концепт для логотипа GW (возможно, на тот момент ещё "Grim World") в форме буквы G, внутри которой спрятана буква W. А знаете, что сделали китайцы в логотипе своего WeGame? Спрятали W в букве G. Я узнал об этом совпадении только несколько лет спустя.
teedeezet: делаю свой RimWorld
Tencent: делаем свой Steam
 
Steam: Grim Wild (Playtest) 
 
В Steam есть функционал для тестирования игр. Он называется Playtest. По сути, это отдельное приложение, которое связано с базовой игрой лишь одной и той же страницей в магазине. 
  
Я решил использовать его, чтобы не смешивать стабильные версии GW и тестовые сборки. Ещё, как я думал, это будет полезно для "полу-закрытого" тестирования со спонсорами. 
 
 
Использование плей-теста оказалось не таким радужным, как я себе представлял. Когда я на радостях раздал текущим тестировщикам ключи, выяснилась не очень приятная деталь.
   
Даже для закрытого тестирования мне нужно выпустить этот самый Playtest в Стим. А для этого надо мало того, что создать все картинки (которые вы увидите снизу), так ещё и пройти 2 проверки от Valve (на визуал + на сборку игры) и отметить проект как "Скоро выйдет", чтобы прождать в этом режиме 2 недели. И только после этого я смогу "выпустить" плей-тест, чтобы туда смогли заходить тестировщики. 
  
Передо мной, на самом деле, стоит непростая задача: так как доступ к тестированию на втором этапе получат все желающие спонсоры огромной+ поддержки, мне надо как-то автоматизировать процесс выдачи ключей. Но главное даже не это. А то, что будет справедливо, всё-таки, если доступ к свежим версиям будут продолжать получать только активные спонсоры.
   
Пока что я придумал такую систему: при подписке на Бусти я буду высылать новому спонсору ключ от Playtest приложения. Но все обновления там выходят не на основную ветку, а на приватные (защищённые паролем). 
   
Пароль этот я буду указывать в самых обычных постах на Бусти. Он одинаковый для всех. То есть видеть его смогут только те, кто имеет доступ к постам на Бусти => это активные спонсоры.
   
При отписке старые версии я забирать не собираюсь. Playtest просто остаётся в библиотеке Стима без доступа к новым версиям. 
   
Если кто-то из вас уже сталкивался с похожей ситуацией, я буду рад обратной связи! Мне очень важно сделать эффективную и справедливую систему награждения бустеров!
  
Логотип Playtest (Valve вынудили меня его сделать уже сейчас)
 
Забавный момент: как только я сделал все нужные для магазина и библиотеки картинки, после чего Valve одобрили их, название приложения "Grim Wild (Playtest)" установилось и заблокировалось. Теперь поменять его без обращения в поддержку Steam нельзя. 
 
Сменить название проекта, конечно, стало посложнее :)
  
[Публичная деятельность]
  
В июне над контентом для Ютуба и Бусти я почти не работал. Компенсироваться это будет тем, что июль у меня планируется месяцем, почти полностью посвящённым публичной деятельности. Это стало возможным, потому что все неотложные дела в проекте были доделаны, и теперь я свободен. Свободен не от работы, конечно. Свободен для назначения самому себе новых задач.
  
Я планирую работать одновременно над тремя видео: 7, 8 и 9 сериями роликов. И над парой постов для Бусти. И, наконец-то, над обещанным давно роликом про отрисовку, где я покажу свои многомесячные труды в динамике.
 
Спасибо за внимание!

Итоги месяца: июнь 2024 Итоги месяца: июнь 2024 Итоги месяца: июнь 2024 Итоги месяца: июнь 2024 Итоги месяца: июнь 2024 Итоги месяца: июнь 2024 Итоги месяца: июнь 2024 Итоги месяца: июнь 2024
Итоги месяца: июнь 2024 Итоги месяца: июнь 2024 Итоги месяца: июнь 2024 Итоги месяца: июнь 2024 Итоги месяца: июнь 2024 Итоги месяца: июнь 2024 Итоги месяца: июнь 2024

Comments

<div ><div><span class="text">Александр Гринько, к сожалению, чем меньше роликов, тем меньше вовлечение аудитории. Зрители начинают массово терять интерес, если его постоянно не подогревать (что у меня не получается из-за занятости проектом)</span></div></div>

teedeezet

<div ><div><span class="text">Публичная деятельность хорошо и полезно, не спеши с роликами, чем больше будет реально сделанных фич тем вкусней</span></div></div>

Александр Гринько

<div ><div><span class="text">Senpasi, либо денег на карте не было. Но я спецом привязал вторую карту (на другие подписки деньги ушли) на бусти, что бы он не парил меня тем, что на зеленой видите ли нет средств ,</span></div></div>

Andrey_Ari

<div ><div><span class="text">почему-то подписка слетела. зашёл прочитать итоги месяца, а я типо не подписан :/<br>надеюсь больше не слетит</span></div>

Andrey_Ari


More Creators