Генерация скайбокса
В игре используется встроенная система неба HDRP Unity, то есть она генерирует текстуру скайбокса (кубическую карту) в каждом кадре. Это занимает около 0,65 миллисекунды, что не очень много по сравнению со всем остальным, но если игра нацелена на генерацию 60 FPS, то это будет почти 4% от общего бюджета времени на кадр.
Предварительный проход
Теперь мы переходим к самому рендерингу. В C:S2 используется отложенный рендеринг: по сути, это означает, что рендеринг выполняется за несколько фаз и с использованием множества промежуточных render target. Первая фаза — это предварительный проход, создающий попиксельную информацию о глубине, нормалях и (преположительно) о гладкости, записывая их в две текстуры.
Этот проход на удивление затратен, он занимает примерно 8,2 миллисекунды, то есть слишком много, и именно здесь начинает проявляться одна из самых больших проблем рендеринга игры. Но для начала нам нужно поговорить о тех самых зубах.
История с зубами
Очень странная, но популярная тема обсуждения производительности Cities: Skylines 2: модели персонажей имеют полностью смоделированные зубы, хотя их в буквальном смысле невозможно увидеть в игре, если только не включить фоторежим и не засунуть камеру внутрь головы персонажа. Пользователь Reddit Hexcoder0 провёл исследования при помощи NVidia Nsight Graphics™️ и опубликовал свои находки в теме в официальном подреддите (это вдохновило меня провести собственное расследование и написать эту чрезмерно длинную статью). Выяснилось, что в игре не только есть полностью смоделированные зубы, они ещё и рендерятся буквально всегда и с максимальным качеством. Ещё важнее то, что это справедливо и для всего остального, что связано с персонажами: ни у одного из мешей персонажей нет вариантов LOD. Colossal Order практически сразу публично признала это, и даже упомянула более общие проблемы с обработкой LOD. Забудьте все эти странные жалобы на симуляцию зубов жителей и прочего; это не Dwarf Fortress, никто её не рассчитывает, а если бы и рассчитывали, то это, очевидно, не требовало бы рендеринга зубов.
Кроме того, Colossal Order рассказала, что для генерации моделей персонажей использует промежуточное ПО Didimo Popul8. Если я не ошибаюсь, споры о зубах начались ещё до выпуска игры, когда кто-то заметил, что в спецификацию персонажей Didimo включены отдельные меши для таких объектов, как зубы и ресницы. Изначально я предполагал, что в игре используются стандартные меши персонажей Didimo, потому что, откровенно говоря, они выглядят очень посредственно и бездушно, но теперь я уже не так уверен. На самом деле, в мешах игры полигонов больше, чем в стандартных моделях Didimo: например, печально известная модель рта/зубов состоит из 6108 вершин, что существенно больше, чем 1060 вершин стандартного меша. Отдельный персонаж даже до добавления волос, одежды и аксессуаров состоит примерно из 56 тысяч вершин, а это много. Например, в среднем среднестатистическое жилое здание низкой плотности состоит из менее чем десяти тысяч вершин до добавления реквизита двора и других деталей.
В этом примере кадра игра рендерит 13 наборов зубов, при том, что они совершенно никак не влияют на кадр: они не меняют ни единого пикселя. Даже сами персонажи практически ничего не вносят в кадр, за исключением шума и артефактов.
Продолжение предварительного прохода, высокополигональное позорище
Вопиюще неоптимизированные моделей персонажей — не единственная причина низкой производительности игры (потому что всё никогда не бывает так просто), но они стали показателем более обширных проблем с ассетами и рендерингом игры. Игра регулярно отрисовывает слишком много объектов со слишком большим количеством полигонов, которые буквально никак не влияют на готовое изображение. И это относится не только к предварительному проходу: похоже, те же проблемы влияют на все проходы рендеринга, которые растеризируют геометрию. Я думаю, причины этого следующие:
У некоторых моделей вообще нет вариантов LOD.
Система усечения геометрии игры не очень совершенна; собственный код рендеринга реализует только усечение по пирамиде видимости, но нет никаких признаков усечения невидимой геометрии. Присутствует усечение по расстоянию, но оно не особо агрессивно, что отлично решает проблему резко «выпрыгивающих» в кадр объектов, но плохо для производительности.
Кроме моделей персонажей есть ещё несколько примеров.
Вы можете сказать, что это специально подобранные примеры, и что современное оборудование вполне справляется с обработкой подобных моделей. В общем смысле вы будете правы, но проблема в том, что все эти относительно небольшие затраты начинают суммироваться, особенно в градостроительном симуляторе, где одна неоптимизированная модель в одном кадре может рендериться несколько сотен раз. Растеризация десятков тысяч полигонов на инстанс в каждом кадре, буквально никак не влияющая ни на один пиксель — это пустая трата ресурсов, пусть даже с ней справляется оборудование. К счастью, такие проблемы довольно легко решить как созданием большего количества вариантов LOD, так и совершенствованием системы усечения. Однако для этого нужно время, и остаётся лишь посмотреть, захотят ли CO и Paradox потратить это время, особенно если для этого понадобится исправить один за одним большинство ассетов игры.
Само по себе наличие высокодетализированных моделей — не проблема, особенно если вы намереваетесь делать градостроительный симулятор нового поколения. Проблема в том, что игра не справляется с таким уровнем детализации, и что полигоны используются неэффективно и несогласованно. На каждую модель персонажа с тщательно смоделированными волосами в носу приходятся стандартные модели реквизита с на удивление низким количеством полигонов. Думаю, если бы игра работала нормально, люди бы хвалили эти высокодетализированные модели, публиковали бы хвалебные посты в соцсетях и кликбейтные видео с заголовками «OMG, разработчики продумали ВСЁ», «Не верится, что они смоделировали кабели в будке охранника!» и «CITY SKYLINES 2 — САМАЯ ДЕТАЛИЗИРОВАННАЯ ИГРА В МИРЕ?». Но мы имеем, что имеем.
А, да, мы же, кажется, говорили о рендеринге? Давайте продолжим.
Векторы движения
Игра рендерит в отдельном проходе попиксельные векторы движения, которые можно использовать для сглаживания и motion blur. Мне кажется, пока векторы движения немного поломаны, из‑за чего игра на момент написания не поддерживает DLSS или FSR2. В расширенном меню настроек есть опция временно́го сглаживания, которая в определённой степени улучшает качество рендеринга, однако объекты, анимированные при помощи вершинных шейдеров (например, деревья), покрыты артефактами и призрачными следами (ghosting).
Этот проход занимает примерно 0,6 миллисекунды.
Дороги и декали
Наконец-то мы рендерим что-то различимое: дороги! А ещё лужайки и другие элементы, совпадающие с поверхностью рельефа.
Этот проход занимает примерно 1 миллисекунду.
Основной проход
Это самое «мясо» процесса отложенного рендеринга. Этот проход получает все созданные ранее промежуточные render target, кэши виртуальных текстур и жёстко прописанные текстуры, создавая множество буферов, включая буфер альбедо, нормалей, различных свойств PBR и глубин. Также он создаёт упомянутую в первой части статьи информацию о видимости виртуальных текстур. Он рендерится с половинным горизонтальным разрешением, предположительно для оптимизации. В рельефе не используется виртуальное текстурирование, поэтому он рендерится в полном разрешении и с постоянным цветом, вне зависимости от истинной текстуры рельефа.
Этот проход занимает 16,7 миллисекунды, или примерно столько же, сколько должен занимать весь кадр, если мы стремимся к 60 кадрам в секунду. Проход снова растеризует всю геометрию, поэтому к нему применимы те же причины торможения, что и в предварительном проходе. Дополнительные затраты, вероятно, объясняются количеством дополнительных выходных данных, плюс затратами на поиск в кэше виртуальных текстур и на само наложение текстур.
Окружающее затенение
Далее игра создаёт буфер окружающего затенения (ambient occlusion) при помощи векторов движения, нормалей и буфера глубин плюс копий двух последних из предыдущего кадра. Судя по отладочным именам шейдеров, используется алгоритм GTAO. Это занимает около 1,6 миллисекунды.
Каскадные карты теней
C:S2 использует каскадные карты теней и, на мой взгляд, справляется с этим не очень хорошо. В тенях есть куча артефактов, и они постоянно мерцают, особенно при перемещении солнца или растительности (а они движутся постоянно). Даже когда экран не полностью покрыт артефактами, разрешение теней довольно низкое, и скачки качества между разными каскадами теней очень заметны.
В игре используются четыре каскада с разрешением 2048×2048 пикселей на каскад. В расширенном меню графических настроек есть настройка разрешения направленных карт теней, но на момент написания она не связана ни с чем в коде; ни эта отдельная настройка, ни общая настройка качества теней не меняет разрешение карты теней. Именно поэтому пресеты настроек среднего и высокого качества теней в буквальном смысле идентичны. Не знаю, недосмотр ли это, или настройку отключили в последний момент, потому что она вызывала проблемы. Пресет низкого качества отличается от среднего и высокого тем, что отключает тени, отбрасываемые рельефом.
Несмотря на низкое качество, это с большим отрывом самый медленный проход рендеринга, он занимает примерно 40 миллисекунд или почти половину от общего времени кадра. Кроме того, он сильно обгоняет все остальные проходы по количеству вызовов отрисовки: в моём тестовом кадре 4828 из 6705 вызовов отрисовки выполнялись для карт теней, то есть целых 72%. Именно поэтому производительность так повышается при отключении теней.
Причины тормознутости этого прохода почти такие же, как в случае предварительного и основного проходов: в слишком большом количестве вызовов отрисовки рендерится слишком много ненужной геометрии. Счётчики производительности Renderdoc показывают, что многие из вызовов отрисовки меняют от нуля до менее чем сотни пикселей в карте теней, к тому же здесь снова участвуют зубы. Похоже, игра считает, что каждый отдельный 3D‑объект потенциально может отбрасывать тень на всех настройках качества, вне зависимости от расстояния. Это можно сильно оптимизировать, и теоретически, общие улучшения LOD и усечения существенно повлияют и на производительность карт теней. Надеюсь, после улучшения производительности CO (или моддеры) снова смогут повысить настройки качества теней и увеличить разрешение карт теней до чего‑то более подходящего для 2023 года.
Давайте закончим эту часть на позитивной ноте: при исследовании кода обработки теней я выяснил, что игра вычисляет положение солнца и луны на основании текущей даты, времени и координат города. Очень милая деталь!
Отражения экранного пространства и глобальное освещение
В игре используются встроенные реализации HDRP Unity для screen space reflections (SSR) и screen space global illumination (SSGI). Не буду рассматривать их в подробностях, поскольку документация Unity и так достаточно исчерпывающая, плюс не хочу притворяться, что полностью их понимаю. В глобальном освещении (global illumination) используется ray‑marching, и по умолчанию оно вычисляется в половинном разрешении экрана. Для повышения качества используются устранение шума и временно́е накопление. Было бы здорово, если бы игра, заявлявшаяся как градостроительный симулятор нового поколения, поддерживала аппаратную трассировку лучей, но особо бы я на это не рассчитывал.
Вместе на эти два эффекта тратится примерно 3 миллисекунды.
Отложенное освещение
На этом проходе всё объединяется. Большинство ранее созданных промежуточных буферов объединяются для рендеринга почти окончательного изображения. Особо про этот проход сказать нечего, кроме того, что он занимает примерно 2,1 миллисекунды.
Странный проход одежды
В игре есть небольшой проход только для одежды персонажей Didimo, в данном случае это три платья, один комбинезон и одни брюки гидрокостюма. Остальные восемь персонажей или голые, или для их одежды используются другие шейдеры. При таком масштабе этот проход не влияет практически ни на какие пиксели. К счастью, он занимает всего 0,2 миллисекунды.
Рендеринг неба
Затем из ранее сгенерированной текстуры скайбокса рендерится небо, однако в примере кадра этого не видно. Этот проход занимает около 0,3 миллисекунды.
Предварительный проход прозрачных объектов
Традиционное отложенное освещение не работает с прозрачными объектами, поэтому они рендерятся отдельно. Прозрачные объекты рендерятся за две фазы, начиная с этого предварительного прохода, который обновляет только буферы нормалей и глубин. В этом кадре не так много уникальных прозрачных объектов, так что проход занимает около 0,12 миллисекунды.
Рендеринг воды
Игра выполняет предварительную обработку в вычислительных шейдерах для подготовки к рендерингу воды, а затем создаёт множество размытых версий почти готового изображения с уменьшенным масштабом. Эти входные данные передаются основному шейдеру рендеринга воды, который рендерит поверхность воды. Это занимает около 1 миллисекунды.
Частицы, дождь и прозрачные объекты
Этот проход обрабатывает большинство прозрачных элементов, включая частицы, погодные эффекты и 3D-объекты, сделанные из стекла и других прозрачных материалов. В примере кадра не видно частиц, но игра всё равно пытается отрендерить дым из труб промышленной зоны, а также пар от отходов, льющихся из канализационной трубы. Далее рендерится дождь с использованием двадцати инстансов по 12 тысяч вершин каждый. Любопытно, что остальные прозрачные объекты рендерятся после дождя, вызывая странные эффекты при пересечении прозрачных объектов (наподобие теплиц и линий электропередач) с дождём. Всё это занимает примерно 0,56 миллисекунды.
Обработка передаваемых обратно виртуальных текстур
Полученный ранее буфер видимости виртуальных текстур обрабатывается вычислительным шейдером, создающим выходную текстуру размером в 1/16 от исходного разрешения. Для визуализации я по алгоритму ближайших соседей отмасштабировал выходные данные в восемь раз, чтобы они были более читаемыми. В конечном итоге, эту информацию игра получает обратно от GPU, чтобы решать, какие тайлы текстур загружать и выгружать. По данным Renderdoc, на это тратится очень мало времени, сильно меньше 0,1 миллисекунды.
Постобработка
В игре используется множество встроенных в Unity эффектов постобработки, в том числе временно́е сглаживание (которое, как я говорил выше, немного поломано), bloom и тональную коррекцию, плюс DOF и motion blur, если они включены. Не хотел возиться с суммированием таймингов всего этого, но примерно всё это занимает около 1-2 миллисекунд.
Контуры, текст и другой UI
Последние оставшиеся вызовы отрисовки используются для рендеринга всех элементов UI, как отрисовываемых в мире игры, так и более традиционных элементов UI наподобие нижней панели и других элементов управления. Достаточно большое количество вызовов отрисовки используется для элементов UI, создаваемых Gameface, однако в конечном итоге эти вызовы очень быстры по сравнению с остальной частью процесса рендеринга. Названия дорог рендерятся в сцене при помощи двухмерных полей расстояний со знаком (SDF). Если текст находится за зданием или другим объектом, то для смешения текста со сценой используется буфер глубин, что выглядит красиво. Этот последний проход занимает несущественное количество времени.
И теперь всё готово!
Я пытался не превращать статью в подробное исследование графики, но, наверно, потерпел поражение. Надеюсь, вы узнали что-то новое.
Итоги и выводы
Так почему же Cities: Skylines 2 так невероятно сильно нагружает GPU? Если вкратце, то игра забрасывает графическую карту слишком большим количеством геометрии, поэтому она в основном ограничена производительностью растеризации. Причиной ненужной геометрии стали как отсутствие упрощённых вариантов LOD для многих мешей игры, так и слишком простая и плохо настроенная реализация усечения. А собственную реализацию усечения в игре вместо встроенного решения Unity (которое, по крайней мере, теоретически, должно быть более совершенным) сделали потому, что Colossal Order пришлось реализовывать довольно большую часть графики самостоятельно, ведь интеграция между DOTS и HDRP в Unity по-прежнему находится в процессе разработки и, вероятно, не подходит для большинства реальных игр. К тому же решение виртуального текстурирования Unity находится в бесконечном состоянии беты, поэтому CO пришлось реализовывать собственное решение и для него, что и вызвало вопиющие проблемы.
Вот, что произошло по моему мнению (то есть это лишь моя гипотеза): Colossal Order сделала ставку на новую привлекательную технологию Unity, и в каком-то смысле это существенно себя оправдало, но в других аспектах вызвало множество неприятностей. Это нередкая ситуация в разработке ПО, и я сталкивался с таким в своей повседневной работе разработчика с уклоном в веб. Компания выбрала в качестве архитектуры DOTS, чтобы избавиться от узких мест CPU, от которых страдала предыдущая игра, и для увеличения масштаба и глубины симуляции; в этом она очень преуспела. CO начала разработку игры, когда DOTS всё ещё была экспериментальной, и, вероятно, для компании оказалось неожиданностью, как много ей пришлось реализовывать самостоятельно, несмотря на то, что официально DOTS позиционировалась как готовая к продакшену. Не удивлюсь, если компания начала разработку с Entities Graphics, но потом ей пришлось создавать собственные решения для усечения, скелетной анимации, потоковой передачи текстур и так далее, когда она осознала, что официальное решение Unity с этим не справится. В конечном итоге, пришлось выпускать игру слишком рано, когда эти системы всё ещё не были отточены, вероятно, из-за финансовых аспектов и/или давления издателя. Ни одна из этих технических проблем не была чем-то неожиданным для разработчиков в день релиза, и я не верю их утверждениям о том, что изначально они нацеливались на 30 FPS — ни одна игра для PC не ставила такой цели с начала 2000-х, и качество графики этого не оправдывает.
Хотя можно жаловаться на многое в технологиях игры, это небольшое расследование, на которое я потратил большую долю своего свободного времени за последние полторы недели, заставило меня отдать должное завышенным целям игры и начать больше симпатизировать разработчикам этой технически амбициозной, но проблемной игры. Я многое узнал о внутреннем устройстве Cities: Skylines 2 и Unity HDRP, а также хорошо попрактиковался в работе с Renderdoc.
Ответы на вопросы и другие дополнения
Моя статья обрела популярность, мне стало поступать множество вопросов и комментариев. Я пытался отвечать на них, но они стали повторяться, поэтому я добавил раздел FAQ, чтобы подробнее объяснить некоторые аспекты.
Вы говорили о 7 FPS в главном меню. Почему оно работало так медленно?
Хотя именно это тормозное меню мотивировало меня исследовать производительность игры, в конечном итоге мне не удалось найти причин торможения. Точнее, не полностью. Ещё до того, как впервые запустить Renderdoc, я заметил, что при выходе из игры через главное меню мы на мгновение видим небо и воду. Renderdoc подтвердил мои подозрения: даже в главном меню всегда есть 3D‑сцена с рельефом, водой и скайбоксом. Эта сцена рендерится относительно целиком, но потом полностью перекрывается пользовательским интерфейсом. Полный конвейер рендеринга используется даже для этой невидимой сцены, что объясняет мгновенное влияние графических настроек на главное меню. Если учесть, что как минимум при запуске игра устанавливает почти все настройки на максимум, в том числе те эффекты, которые разработчики не рекомендуют использовать, то вы получите причину этого «слайдшоу».
Однако одно это не объясняет такую низкую частоту кадров: скучный ответ заключается в том, что мне потом так и не удалось воссоздать подобный уровень производительности. Но дело не только во мне: почти у всех моих друзей, игравших в игру после релиза, при первом запуске возникала одна и та же проблема. При первом запуске и, вероятно, при смене ассетов игра выполняет обработку кэша виртуальных текстур, но я не проверял, использует ли она вообще для этого GPU. Поэтому пока это остаётся тайной.
Краткая информация о сцене в главном меню (в том числе о фоне и меню поверх него):
Примерно 400 вызовов отрисовки
563 тысячи входных вершин
745 тысяч растеризированных треугольников
Сколько в сцене суммарно вершин и треугольников?
Согласно счётчикам производительности Renderdoc, при рендеринге кадра задействуется 121 миллион входных вершин и примерно 36 миллионов растеризированных треугольников. Это не общее количество видимых на экране треугольников, а объём геометрии, обрабатываемый на всех проходах рендеринга. Для подобной игры это безумное количество геометрии, и неудивительно, что игра с ним не справляется. Я видел отчёты на Reddit о том, что в больших городах игра может достигать сотен миллионов вершин, а в некоторых ситуациях и до миллиарда на кадр.
Считаете ли вы, что игру стоило делать на Unreal Engine 5 или на каком-то другом движке?
Скучный ответ консультанта: это зависит от многого. В идеальном мире, где нет бюджетов и дедлайнов, Cities: Skylines 2, вероятно, следовало бы сделать на полностью собственном движке (или, по крайней мере, с полностью собственным рендерером), потому что ни один из этих крупных движков не предназначен для подобной игры. В Unreal Engine 5 есть решения многих проблем, от которых сейчас страдает C:S2; существует Nanite для LOD и Lumen с Virtual Shadow Maps для освещения и теней. Однако у UE5 есть и собственные ограничения: в нём нет ничего подобного ECS Unity для геймплейной логики и крупномасштабных симуляций (за исключением Mass, которая, вероятно, далека от готовности к продакшену), а в качестве основного языка программирования движка используется C++, который гораздо менее гибок и доступен с точки зрения моддинга, ставшего важным аспектом успеха первой части игры. Имея достаточно времени и денег, обе эти проблемы можно решить, но стоит помнить, что CO всё ещё относительно мелкая компания и ей нужно аккуратно выбирать, к чему прилагать свои усилия.
Renderdoc ненадёжен в бенчмаркинге, вам следовало использовать [вставьте название другого инструмента].
Вероятно, следовало, если бы мне удалось заставить работать альтернативы. Из полезных комментариев я узнал, что Nvidia, очевидно, в своей безграничной мудрости какое-то время назад отказалась от поддержки профилирования D3D11 в Nsight (™️), поэтому если бы я захотел правильно профилировать производительность рендеринга и получать больше информации, то мне бы следовало перейти на более старую версию этого ПО.
В конечном итоге целью был не бенчмаркинг производительности, а исследование общей картины и поиск ответа на вопрос «из-за чего же игра так тормозит?». Я считаю, что нашёл достаточно доказательств, чтобы ответить на этот вопрос, даже если отдельные тайминги в какой-то степени оказались неточными.
Не могу поверить, что в этой игре LOD используются не везде
Это не вопрос.
Поясню: в игре есть LOD некоторых/многих объектов. В целом я бы сказал, что у большинства, если не у всех зданий есть LOD, но у многих декораций и реквизита наподобие труб и реквизита дворов их нет. Более того, я даже не знаю, проблема ли в том, что у этого реквизита буквально нет LOD, или в том, что эти LOD по какой-то причине не загружаются. Возможно, разработчики создали автоматически сгенерированные LOD, но результат оказался настолько плохим, что его отключили? Понятия не имею.
Вы сказали, что в игре есть InstaLOD. Какова его роль?
Из декомпилированного кода видно, что InstaLOD включён для конвейера ассетов игры (по сути, для инструментов моддинга), и похоже, больше нигде не используется. То есть InstaLOD применяется только при импорте новых ассетов в игру.
Ненавижу JavaScript. Ненависть к JavaScript и/или к современному вебу — основная черта моей личности. В игре для UI используется JavaScript, и вероятно поэтому она такая медленная и уродливая.
Это снова не вопрос и это не совсем связано с рассматриваемой темой. Изученные мной данные показывают, что UI не стал существенным узким местом, и в ближайшее время этого не предвидится. Лично я никогда не работал с Gameface, но он, похоже, популярен в современных крупных играх, в том числе и тех, которые большинство считает хорошо оптимизированными. Важнее всего здесь знать то, что он не основан на полностью браузерном движке наподобие Electron; это собственный фреймворк пользовательского интерфейса, реализующий подмножество современных веб-технологий специально для применения в игровом UI. Это должно означать, что он занимает существенно меньше памяти и имеет более высокую производительность, чем нечто, основанное на Chromium/Blink или WebKit.
Комментарии (50)
leshabirukov
07.11.2023 14:14+26«Слышен ли звук падающего дерева в лесу, если рядом никого нет?»
janvarev
07.11.2023 14:14+12Как показывает практика, очень даже слышен - сервер нашей симуляции излишне нагружается... :)
QDeathNick
07.11.2023 14:14Только что обсуждали как в Таркове реализована передача данных между сервером и клиентом, ровно эту же фразу вспомнили.
V1tol
07.11.2023 14:14+25Вспомнилось, как много лет назад по-приколу запускал первый Crysis на компьютере с Radeon 9600 PRO. Мне это даже удалось и я наблюдал что-то около 1 кадра в секунду в джунглях. Включив в консоли статистику, увидел цифру в ~1 миллион полигонов и прям офигел.
А сейчас градостроительному симулятору очень нужно запихивать в видеокарту 36 миллионов треугольников, чтобы рисовать параллельно-перпендикулярные серые коробки. Даже если у вас есть проблемы с движком, можно ведь хотя бы используемые ресурсы оптимизировать.
crystallize
07.11.2023 14:14+1Я помню на геймдев.ру были раньше разборы рендеров Обливиона, Флэт-аута, НФС Карбон. Про то что в Карбоне на небо шейдер на 80 инструкций, при этом 80% неба тут же закрашивается обектами. Не могу теперь это найти.
VladN803
07.11.2023 14:14+4https://gamedev.ru/pages/vortex/articles/?id=1143
Не знал, но было интересно найти. 4й абзац
unclejocker
07.11.2023 14:14+2Ну в общем я прочитал статью, открыл настройки игры, и добился на 2080 (обычной, не super) 40-55 кадров в секунду в HD.
Там есть настройки LODов, но похоже на то, что по умолчанию они выкручены так, что LODы не работают.
TAZAQ
07.11.2023 14:14+2Мне повезло с железом, вероятно, 11900+4080 на fhd вытягивают этого монстра, но есть нюанс, когда город приближается к 100к жителей начинаются тормоза в симуляции, особенно если выселять людей из плотных зон. Посмотрим что будет после релиза
SvoboniiLogin
07.11.2023 14:14+13Какого релиза ?это и есть релиз
Wolframium13
07.11.2023 14:14+14Сейчас релиз для игр это +3-4 года с даты выпуска, 10 патчей и 6 ДЛС.
GruBBy_kz
07.11.2023 14:14+6не нашёл ссылку на источник, пришлось гуглить:
https://blog.paavo.me/cities-skylines-2-performance/
Wallhead
07.11.2023 14:14+3Из за такой херни не играю в игры на релизе, жду гола 3,пока все допы выйдут и патчи.
SAWER
07.11.2023 14:14А собственную реализацию усечения в игре вместо встроенного решения Unity (которое, по крайней мере, теоретически, должно быть более совершенным) сделали потому, что Colossal Order пришлось реализовывать довольно большую часть графики самостоятельно, ведь интеграция между DOTS и HDRP в Unity по-прежнему находится в процессе разработки и, вероятно, не подходит для большинства реальных игр.
Не понимаю при чём тут DOTS вообще. Не особо работал с DOTS(к счастью), но такие базовые и независимые вещи должны работать и с ним. HDRP так же не к месту - совсем про другое, точнее про отрисовку. Но батч и подготовка мешей происходит до непосредственно отрисовки.
Встроенное решение тут был бы динамический батч(без батча было крайне много проходов). Многие компании почему-то пилят свои велосипеды, уменьшая кол-во шагов отрисовки, которым становится тот же дайнамик батч, но поделённый на зоны. Это позволяет уменьшить динамическое пересоставление мешей. Но такое решение крайне требовательно к тому как работаешь с объектами и если что-то сделать не так, то получится крайне плохой результат. Вот тут как раз можно получить сильное увеличение кол-ва отрисовок объединённого меша из-за мелких объектов. Ну и в таком случае LOD так же не работает по умолчанию, потому как подготовка мешей идёт вручную и нужно делать LOD для всего объединённого меша.
А в целом выглядит как недоработанное решение. Некоторые вещи заложили в проект и делали сразу, но по ходу (не)выяснилось наличие иных проблем, а часть, наоборот, оказалась надуманной. Но решить их уже не получилось в силу ограниченности средств - делали как задумали, не отвлекаясь. Оттуда и графика на 100к, выглядящая на 3к - нормального контроля или времени не было.domix32
07.11.2023 14:14Не понимаю при чём тут DOTS вообще
DOTS это механизм ECS, который по-хорошему должен помогать отсекать HDRP ненужные объекты при помощи соответсвующей системы.
entze
07.11.2023 14:14+2А как сам геймплей? Или никто не дошел до проблем с экономикой и прочим?
Djeux
07.11.2023 14:14+2С геймплеем тоже не все хорошо, но проблемы с ним не настолько очевидны как с графикой и тормозами. Понять фича или баг что много бизнесов с "нехваткой клиентов" сложней чем 5 FPS
net_racoon
07.11.2023 14:14Вроде в каком-то обзоре говорили что там упростили игровой процесс и играть стало скучнее.
Djeux
07.11.2023 14:14Я хоть и не спец по skylines, но даже я заметил что обанкротиться во второй части сильно сложней чем в первой.
Там добавили новые механики которые сильно спасают экономическое положение, но не сказал бы что стало скучней.
Wolframium13
07.11.2023 14:14+10Как всегда забили на оптимизацию, ибо "просто обновите компьютер"
Эх, когда читаешь статьи, как раньше программисты бились за каждый пиксель в игре, идя на всякие ухищрения, аж слёзы ностальгии выступают.
dalerank
07.11.2023 14:14+3А обновить комп не поможет, из колосалов в 2018 ушли топ разработчики, которые переписали в свое время юньку, чтобы она могла вывозить первую часть. На их место пришли умные и амбициозные студенты, но опыта не хватает. Еще во время первой части поднимался вопрос о переезде на хаусмейд движок, потому что уже тогда было ясно что вторую часть юнька не вытянет. Она и первую то вытягивает с трудом. А вы про зубы...
Jianke
07.11.2023 14:14+2из колосалов в 2018 ушли топ разработчики
Подробности, где почитать?
dalerank
07.11.2023 14:14+1в 2019 на gamescom в Кельне пересекся с Демин Морело(рендерщик их) он искал новую студию. Пруфов к сожаление не могу дать, точно были новости на редите и форуме, разве что на линкедине посмотреть на количество новичков в студии(https://www.linkedin.com/company/colossalorder/people/). Если много людей которые приходят за полгода-год до релиза, то в студии не все в порядке (просто жизненное наблюдение), устали они, нашли другую студию или зп не устраивает, это уже другой разговор
DALwick
07.11.2023 14:14+1Странно, что на оптимизацию забили, а на добавление моделей зубов вместо какой-то условной плоской челюсти - нет.
darthmaul
07.11.2023 14:14+3Подозреваю что модельки персонажей или сгенерировали или заказали у индусов, которым вообще плевать на оптимизацию - лишь бы симпатично смотрелось.
ElvenSailor
07.11.2023 14:14А может быть, те люди, которые добавили зубастых пешеходов без LODов, сделали это намеренно? Т.е. своего рода забастовка по-итальянски?
мол, мы свою часть сделали, крутитесь теперь, как хотите, с оптимизацией)
mikegordan
07.11.2023 14:14+5Я не понял "ИТОГ"
Так что? Как так вышло что таже команда с тем же unity от 1 части сделали всё так плохо?
Передали огромный кусок на Аутсорс разработки каким то школьникам из индусии?
net_racoon
07.11.2023 14:14+2Да нет, просто положили болтец. А если хотите играть- обновите комп за 100500 тонн нефти.
feodosia_mia
07.11.2023 14:14+1Решили прыгнуть выше головы и не уложились в сроки (хотя история с зубами конечно удивляет).
На самом деле 1 часть тоже плохо работает со всеми дополнениями, видимо оптимизация это их проблемная сторона.
lgorSL
07.11.2023 14:14Возможно в первой части тоже не было лодов для пешеходов и т.п. но там это компенсировалось общей низкополигональностью.
И вообще в целом кажется, что исходный код второй части очень сильно пересекается с первой.
xkb45bkc4
07.11.2023 14:14+1Я всегда свято был уверен, что для таких игр процессор нужен, а не видеокарта. Графика вторична же в таких играх, главное симуляция города, а не красивые лужи на асфальте и зубы без кариеса.
unclejocker
07.11.2023 14:14+1Там можно закрутить графику в дно и (скорее всего) можно будет играть на калькуляторе. Но будет криповато выглядеть, я пробовал:)
Tutanhomon
07.11.2023 14:14насчет семи кадров на первом запуске - скорее всего они продолжают компилировать шейдера для игры, но это только предположение из знакомства с Юнити, в саму игру даже не играл.
qfrdrh
07.11.2023 14:14+1Не понимаю зачем так делать, ну не вытягивает актуальное железо ваши амбиции, почему бы не сделать все поскромнее, мы же в град острой играть будем, а не в GTA VI?
Akr0n
07.11.2023 14:14+2Интересно, а всяческие экоактивисты случайно не могут хорошенько "простимулировать" издателя игры сделать срочную оптимизацию? Шутки шутками, но в масштабах планеты все эти баги тянут на гигаватты спущенной в унитаз электроэнергии с соответствующим углеродным следом.
cdriper
07.11.2023 14:14+1зуб даю, у них там с самого начала в роадмэпе значился порт под самую популярную консоль
под Nintendo Switch
idregerge
07.11.2023 14:14+1Современный геймдев, ничего нового. Раньше под железо пытались изворачиваться, отчего навороты не работали у других, нынче вообще забили болт, 4090Ti вывезет. Полная деградация игровой индустрии, где игры штампуются конвейерами из конвейеров
onets
Лол ШТО??? Отрисовка зубов в закрытом рту каждого жителя ??? ????????????
AlexSpirit
Дык, херак херак и в продакшн.
Fell-x27
Некстген подкрался незаметно. Со спины...
zergon321
Зубная щётка в Yandere Simulator'e...
icya
Достойные продолжатели автора гнома с бутылкой