3 июн в 11:58 S.T.A.L.K.E.R. Community :

«New Project» - откровения разработчиков

Главный разработчик модификации «New Project» под ником Rafa (лидер проекта, главный программист), рассказал о своем пути в моддинге и работе над текущим проектом.
О там как всё начиналось, с какими сложностями пришлось столкнуться и над чем работаем в данный момент – читайте в новой статье из цикла "Откровения разработчиков"!
Предыстория

Работа над Lost Alpha

Оптимизация кода для New Project
В самом начале работы над НП в команде было совсем мало программистов. Лишь время от времени нам помогали участники других команд. Всё это стало причиной того, что я взял на себя роль ведущего программиста, и это развязало мне руки. Я давно вынашивал идею о реализации многопоточности в нашем движке. Так как времени на горизонте было много, а работа по остальным аспектам проекта в тот момент только набирала свои обороты, я уделил много времени внедрению частичной многопоточности рендера. Основная идея была в вынесении выборки объектов и их последующего куллинга в отдельные потоки. Этот этап рендеринга занимал до 50% от времени необходимого на всю фазу отрисовки. Были и другие моменты, которые попали в отдельные потоки. Например: инверсированная кинематика скелета и расчет hemi освещения динамических объектов. В целом я избавил движок от многих «бутылочных горлышек». Теперь, где раньше движок выдавал 50 FPS – стало 80-90 FPS. Пришлось много раз ломать голову о том, как перестроить уже написанную логику под многопоточное исполнение. Я старался минимизировать использование мутексов в пользу фаз синхронизации потоков, так как многопоток, который постоянно застревает на доступе к защищенной мутексом памяти или логике перформит еще хуже, чем однопоток (надеюсь вы поняли, о чём я). Много раз хотелось всё бросить… и я бросал, но с N-ной попытки у меня наконец-то получилось. И даже несмотря на то, что реализация многопоточности вызвала много перекрестных проблем и потаённых ошибок в работе движка, которые пришлось долго исправлять, я остался доволен результатом.

Недавно нам наконец удалось доделать и отладить перенос расчета анимаций скелетов в отдельный поток. Это дало еще +10-15% к FPS в нагруженных НПС сценах. Еще была проведена различная работа по оптимизации времени кадра без использования многопоточности. Например, в рендере введена более грубая, но очень полезная обрезка отрисовки объектов, основанная на относительном размере объекта и его удалении от точки обзора. Данное изменение дало возможность практически отказаться от разделения геометрии на сектора. Мелкая геометрия теперь и так не попадает в рендер на большем расстоянии. Моделирование этих секторов, а затем расстановка соединяющих порталов в СДК… всё это занимало много времени и часто требовало пересборки уровня (левел-дизайнеры поймут). Теперь это всё в прошлом, разделение на сектора теперь применяется только на крупные здания и подземные помещения.

Кроме оптимизации кода, нам помогли перенести движок с 32-битных рельс на 64-битные (благодарим RedPanda, OpenXRay и OGSR). Теперь мы без опаски можем использовать 2K 4K и даже 8K текстуры, для максимальной детальности игровых объектов. Проблема с ограниченностью по оперативной памяти преследовала нас еще с LostAlpha. Совокупность хорошей оптимизации и использования 64-битной базы дало нашим левел-дизайнерам возможность максимально качественно прорабатывать детализацию всех объектов уровня, как это видно из наших видео. Без всего этого игровой мир был бы намного более «скудным и лысым», как 10 лет назад.


Переезд на ЗП и другие работы по обновлению движка

СДК

Заключение
Сообщество: S.T.A.L.K.E.R. Community
Канал: S.T.A.L.K.E.R.

Комментарии (0)

Показать комментарий
Скрыть комментарий
Для добавления комментариев необходимо авторизоваться
Версия: Mobile | Lite | Доступно в Google Play