Всем привет, ребята, с вами Алекс Б.! Буквально только что вышел девблог 108 и, как обычно, я предлагаю краткий обзор для тех, кто не любит много читать. Если же жаждете подробностей — жмите «далее» ?
Ну а теперь подробности ?
Небольшой патч, но большое количество багфиксов и некоторые улучшения в производительности! (забегая вперёд — пока я готовил перевод, выяснилось, что разрабы скорее понакосячили, нежели понаисправляли — Алекс Б.)
Производительность окружения (Alex Rehberg)
Андре занялся анализом производительности в конце прошлой недели, и выявил, что общая производительность имеет тенденцию ко снижению при продолжительной игре, ну а я нашёл баг, который, собственно, приводил к этому. Нет, это исправление не увеличит FPS в целом, но избавит вас от его проседания при продолжительной (час-два, или больше) игре.
Микширование/»полировка» озвучки (Alex Rehberg)
Я по-прежнему продолжаю работать над микшированием звуков, и несмотря на общую завершённость, продолжаю находить мелкие недоделки, поэтому все изменения вы увидите скорее всего к майскому вайпу, который ожидается, ориентировочно, на следующей неделе. На этой неделе я сосредоточился на работе над звуками оружия, а точнее на добавлении сопутствующей озвучки шороха одежды при его перемещении в руках персонажа. Также, ввиду того, что еда и вода теперь имеют куда большее значение в игре, я записал несколько звуков глотания/хруста для еды. Также, закончена работа над доозвучкой огнемёта, и результаты уже можно услышать в игре. Также я записал некоторые звуки шагов босиком по камню, грязи, песку, траве и дереву.
Ручная водокачка (Tom Butters)
С тех пор, как мы добавили больше применения воде, потребность в ней возросла! Именно поэтому мы занялись работой над водокачкой, которую игроки смогут устанавливать, чтобы добыть себе побольше воды. Чтобы заставить её качать воду, понадобится сильно приложить руки ?
Вот вам 3D-модель для наглядности:
Рандомизация лиц (Taylor Reynolds)
Одна вещь сильно приковала моё внимание, когда я смотрел на анимацию эмоций, которую мы показывали на прошлой неделе — это то, насколько универсальной может быть система, применённая для этого. В частности, с помощью неё можно разнообразить отдельные черты лица для получения уникальных, не похожих друг на друга лиц, даже в случае совпадения расы. Эта же система использовалась для создания расовых отличий, к примеру, для изменения размера носа. Можно было бы, конечно, просто рандомизировать все эти значения, но это могло бы привести к непредсказуемому итоговому внешнему виду, а перебор вариантов параметров лица по алгоритму был труднореализуем ввиду сложностей при построении «правил» изменения пропорций лица.
За прошедшую неделю я смог создать прототип системы, которая будет придавать уникальные черты лица каждому игроку, но при этом будет избегать гротексных и нереалистичных сочетаний этих черт. Для примера демонстрирую небольшую порцию уже сгенерированных вариаций, основанных на базовом расовом наборе:
Женская одежда (Taylor Reynolds)
Также я потратил часть время на работу над женской одеждой, основываясь на концептах, созданных Полом.
Производительность (André Straubmeier)
Перед тем, как вы прочитаете этот абзац, сразу предупреждаю, что игра находится на той стадии разработки, когда одно изменение НЕ может обеспечить прибавку в производительности на 50%, так что, вы будете разочарованы, если ждали именно этого. Мы сейчас работаем по нескольким небольшим направлениям, которые не подразумевают заметных изменения в этом плане.
На позапрошлой неделе я получил возможность отслеживать причины падения производительности, чтобы оперативно выпускать патч, устраняющий их. Корневые изменения на этот раз заключаются в устранении утечек в весьма неновом уже скрипте системы частиц и менеджере окружения. Обновление также включает в себя оптимизацию деспавна (разрушения) строительных блоков. И, как я уже говорил, ещё на прошлой неделе была начата работа над фиксом падения производительности при повороте камеры на рядом стоящих игроков — тестирование показывает, что мы окончательно победили эту проблему.
Следующим пунктом в списке проблем, над которыми я поработал, были проблемы рендеринга и отбора, которые оказались более сложными, нежели простой поиск проблем производительности, вызванной данной частью кода. В данном случае удалось выяснить что проблема заключалась в процедуре отбора, большую часть времени в которой «отъедал» отбор деревьев. Конкретно проблема заключалась в способе, которым Unity работает с обработкой ветра в SpeedTree. Отключение анимации ветра дало мне прирост производительности примерно на 7%, что очень хороший результат для одиночного изменения. В итоге было потеряно много времени, отключена данная функция и обретено понимание, что проще будет реализовать данную фишку вручную, как и многие другие, что имеются в SpeedTree, но не реализуются в связке с Unity.
Напоследок я оптимизировал часть кода в интерфейсе пользователя. Мы имеем систему, которая позволяет нам отображать всё, что угодно в нужных сочетаниях, и при этом не нуждается в написании кода. Да, это удобно в плане удобства использования, но вторая сторона медали заключается в том, что все эти операции оказываются жутко неоптимизированными, что приводит к затратам времени до 1 мс на кадр. Теперь это исправлено, и мы можем продолжать получать пользу от удобства использования, не заставляя при этом хромать производительность.
Беда с открытыми дверями (André Straubmeier)
Давней проблемой было неполное закрытие дверей в некоторых ситуациях на клиентской стороне, что позволяло этим клиентам заглядывать через неё и даже стрелять внутрь. Было весьма непросто отследить причину, заключалась она в схожей проблеме с сетевым соединением, которая и тянула вслед за собой данный баг.
Моё ехидное замечание: а вот игроки сегодня повально жалуются, что теперь двери могут подвиснуть вообще полностью открытыми, а не наполовину, как раньше.
Персонаж в инвентаре (Alex Webster)
Я немного изменил позу персонажа, показываемого в окне инвентаря, разница — налицо:
также я подумал, что было бы неплохо, если бы внешний вид персонажа отображал его текущее состояние — голод, холод, боль…
Вот что получилось:
Это просто идея, поэтому, если она вам нравится или не нравится — дайте мне знать, чтобы можно было воплотить это в жизнь вместе с остальными задумками по отображению эмоций персонажа, над которыми мы как раз работаем, и реализовать отображение более реальных, осмысленных эмоций.
Напоследок, группа голых замерзающих людей:
Увеличенный масштаб глобального затенения (Diogo Teixeira)
Пару недель назад я начал экспериментировать с техникой глобального затенения, которую можно было бы вычислить и наложить на большую площадь (например, 1х1 км) и сделать это независимо от направления камеры. Техника частиц очень простая и протестирована на широком спектре ПК и консолей. Она поддерживает динамические поверхности и может подстраиваться под постройку нами структур и перемещение динамических элементов. Так выглядят результаты издалека.
Это поможет затенить внутреннее пространство зданий, пещер, тоннелей, лесов и позволит нам вернуть отражения к нормальным, реалистичным значениям. Это будет работать как дополнительное пространство мира, этакая низкоуровневая добавка к нашему существующему глобальному затенению.
Улучшение прорисовки глубины (Diogo Teixeira)
На этой неделе я сделал перерыв в работе над глобальным затенением, чтобы заняться штукой под названием «логарифмический Z-буфер». Эта работа включает патч наших шейдеров для получения возможности более точной работы z-буфера/точности глубины. Артефакты, вызванные не совсем корректным использованием z-буфера особенно заметны на океанской воде около берегов, выглядят они как постоянное мерцание и дёрганье кромки воды:
По схожим причинам, использование сверхширокоэкранных режимов приведёт к появлению разнообразных артефактов z-буфера, включая также возможность смотреть сквозь стены, поэтому мы вернули назад передний план камеры, чтобы избежать читинга. В нашей реализации логарифмической глубины нет даже переднего плана:
Приближение (зум) строительных структур тоже может вызывать эффект взгляда сквозь стену, но данный эффект ограничен геймплейно. Это всё те проблемы, которые я планирую решить с этим фиксом, и, хотя рано утверждать, что баги полностью искоренены, результаты выглядят очень многообещающими.
К сожалению, этот процесс требует патчинга всех наших шейдеров, что может привести к появлению тонн новых визуальных багов. Я планирую закончить с модификацией шейдеров на этой неделе, чтобы получить целую неделю постоянного многоплатформенного тестирования на staging-ветви игры до добавления патча в стабильную версию.
Стальная и картонная броня (Paul Bradley)
На этой неделе я работал над идеей двух новых видов брони, один из которых состоит из тяжёлой стальной брони и должен превратить надевшего его персонажа в ходячую крепость ценой меньшей скорости и мобильности. Возможно, будет интересно посмотреть, как такая броня будет применяться в защите и нападении. Вторая идея — картонная броня (ребята, вы прикалываетесь?!), которая может быть сделана из мусора и не будет предоставлять вообще никакой защиты, но позволит игрокам применить фантазию, чтобы сделать с ней что-нибудь занятное (так вот чем разработчики на самом деле всю неделю занимались!).
Фиксы водных ресурсов (Maurino Berry)
Просто несколько багфиксов к добавленным на прошлой неделе предметам для воды:
- Исправлены бочки с водой, которые не блокировали строительство
- Исправлено ведро воды, которое имело действием по умолчанию утоление жажды (и его нельзя было сменить на другое)
- Исправлена возможность переносить воду в невзятом в руки ведре
- Исправлена невозможность допить последние 50мл с бурдюка
Стартовое количество калорий (Maurino Berry)
Изменения в балансе метаболизма на прошлой неделе были очень хорошо восприняты, но требуют хорошей балансировки (хотя бы в первом приближении). Во-первых, я прибавил стартовое количество калорий с 75-100 до 100-125, что даст вам дополнительные 10-15 минут на то, чтобы найти еду, прежде чем у вас кончатся силы. Я продолжаю следить за работой обновлённого алгоритма метаболизма и буду вносить изменения по мере необходимости.
Поджог (Maurino Berry)
На данный момент наша система огня — простой объект типа “огненный шар”, который моет спавнить другие себе подобные объекты и двигаться, подобно физическому объекту, попутно причиняя радиальный урон в заданном радиусе, что нельзя считать воспламенением. Над ним я начал работать на этой неделе, и пока что реализация не готова к добавлению в игру, хотя выглядит неплохо:
Мне очень хочется закончить эту работу, так как я смогу добавить огненные стрелы, которые смогут поджигать людей и животных на расстоянии от вас, попутно давая бонус стрелку в виде предварительно зажаренного мяса!
Список изменений
Новые звуки питья/поедания Новые звуки огнемёта Исправлен баг падения производительности окружения Исправлены утечки в системе добавления частиц Оптимизирован деспавн строительных блоков Исправлено очередное проседание производительности при взгляде на игроков Исправлена производительность отбора деревьев, страдавшая из-за плохой реализации ветра Оптимизирован программный код пользовательского интерфейса Настроен LOD-инг травы (меньше увеличение для низших LOD`овs) Обновлён вид персонажа в меню Добавлено размещение волны для уровня качества воды, равного 1 Ограничена дистанция теней до 50, когда каскады теней отключены Префабы льдин используют LOD-сетку Исправлено небо на горизонте / яркость воды Улучшен просчёт плотности воздушной перспективы Добавлена консольная переменная shadowmode для настройки тени от солнца Тени от солнца полностью отключены, когда дистанция отрисовки теней равна 0 добавлены новые тесты производительности для процедурной генерации Тесты процгена сбрасывают GC, LOD`ы, траву, декорации и задачи перед каждым пуском Убрана поддержка старых режимов тумана при компиляции шейдеров и сцены Исправлена незавершющаяся анимация дверей (на самом деле нет) Исправлена регрессия, когда временами пропущенные сущности линковались с постройками Исправлены объекты, не отправлявшие обновления слота, когда на стороне сервера производились изменения для переменной perf добавлено отображение асинхронной очереди задач при значении 6 Команда рестарта сервера вызывает команду выходи после достижения 0 таймером Исправлены отсутствующие значки поджига/тушения в печи Увеличен базовый запас калорий Исправлено пламя, дававшее меньший урон объектам, стоящим на камне/металле Стоимость карты снижена до 1 единицы бумаги Исправлены бочки с водой, не блокировавие постройку Исправлена возможность переносить воду в невзятом в руки ведре Исправлена невозможность допить последние 50мл с бурдюка
У меня на этом всё, друзья, с вами был Алекс Б. ? Хочу извиниться напоследок за задержку с переводом, я слишком протянулся.
Встретимся-увидимся у меня на канале, а также здесь же, в следующем переводе Community update и очередного, 109 девблога в следующую пятницу.
P.S. Если вы желаете поддержать мои труды по переводу — вы можете узнать, как это сделать, здесь.