Стоит ли апгрейдить видеокарту и "раскроет" ли ее потенциал тот или иной процессор?
Я заметил, что довольно часто возникает вопрос, стоит ли апгрейдить видеокарту и "раскроет" ли ее потенциал тот или иной процессор. Я бы хотел ответить на этот вопрос одним предложением: на самом деле хрен его знает.
И вот почему.
Видеокарта работает не самостоятельно по своему разумению, рендеря что в комманд буфер взбредет, а получает команды, предварительно сформированные приложением игры. Суть утверждения "раскрыть потенциал видеокарты процессором" кроется в мысли "успевает ли процессор выдавать команды рендеринга видеокарте так, чтобы она визжала как последняя куртизанка". И проблема ответа на этот вопрос заключается в том, что разные игры построены на разных движках, а движки по-разному используют вычислительные мощности процессоров, поэтому нельзя однозначно сказать, что все будет хорошо. Кстати, процессор оперирует еще и разными видами памяти, и если кэшем в целом все ясно, то ОЗУ, хранящая большую часть данных, с которыми оперирует процессор, может вносить не меньший вклад на скорость выдачи команд видеокарте.
А, да, многопоточность. Нынче все продвинутые двигатели имеют отдельный рендер-тред для обработки команд рендеринга (В UE4 можно даже полюбоваться на время, проведенное процессором на рендер-треде с помощью консольной команды stat unit). Так вот, программисты в целом имеют разную дистанцию между точками, откуда руки растут и жопой. А потоки надо синхронизировать, а здесь много кто лажает. Поэтому даже крутой процессор может не помочь против остановок ожидания освобождения ресурсов.
Поэтому на самом деле разумной тактикой будет индивидуальный подход к играм, в которые хочется играть без тормозов. Вот вам условно универсальный инструмент, как узнать, на сколько сильно поможет покупка новой видяхи, если оставить процессор и память теми что есть. Итак, вот что нужно делать:
1. Изменить разрешение картинки на минимально возможное. Это позволит максимально снизить pixel-pressure: нагрузку на GPU, которую обеспечивают все техники, завязанные на работу с пикселями: весь постпроцессинг, deferred shading, формирование G-Buffer'а и т.п.
2. Если в игре настраивается разрешение теней, то уменьшить разрешение на максимально возможное.
3. Если в игре используются каскадные тени, выставить количество каскадов на то максимальное значение, на котором вы хотели бы играть на новой видяхе.
Тут нужно пояснение: каскадные тени это техника создания теней на открытых пространствах с помощью карт теней (shadow maps). Используется несколько буферов глубины, в которые рендерится сцена из камер с разным охватом площади. В результате получается, что ближние объекты получают более подробную карту теней, а по мере удаления от игрока используется информация, попавшая в карту теней большего охвата территории, что позволяет сэкономить видеопамять и ресурсы блоков растеризации и при этом не ухудшить картинку.
Когда я сказал, что надо задрать количество каскадов, а не уменьшить их, как в прошлых двух пунктах, это не было ошибкой. Дело в том, что движок игры использует рендеринг в буфер глубины для формирование теневых карт, точно таким же образом, как он рендерит изображение для основной камеры игрока, через которую вы смотрите на игровой мир.
А это значит, что для каждого каскада существует своя камера. И для каждой камеры нужно вычислять, какие объекты попадают в кадр, а какие нет. Если движок не использует непрямой рендеринг и отсечение видимых объектов на GPU (
Indirect Drawing + GPU Culling), а на данный момент еще ни один движок так не поступает, все эти вычисления выполняются на процессоре.
4. Выставить качество граифики на желаемое после покупки новой видеокарты. Здесь все просто: многие подходы требуют участия процессора в формировании данных для алгоритма, поэтому нужно, чтобы они работали в полную силу.
5. Качество текстур. Тут вопрос сложный: если у вас совсем уж калькулятор, в котором пауки свили парк развлечений и катаются на вентиляторе, то там может не хватить памяти даже на то, чтобы просто загрузить все эти текстуры высокого разрешения в видеопамять и драйвер будет вынужден свапать то, что не влезло, в системную память, вытаскивая по мере необходимости обратно. Разумеется, такое изнасилование PCI-E шины для производительности даром не пройдет, поэтому рекомендую пользоваться различными утилитами, способными показывать занятую видеопамять, и подобрать такие значения качества текстур, чтобы оставалось еще минимум 30-40% свободного места (ваша игра - это не единственный потребитель видеопамяти в системе). Кроме того в случае, например, со встроенными видеокартами, они будут нагло часть памяти отжирать у системы, снова гоняя данные по PCI-E, что также плохо скажется на производительности, а мы рассматриваем результат установки новой дискретной видеокарты, и если в результате в наши замеры прокрадется огрех от несштатного падения скорости из-за нерационального использования видеопамяти, у нас ничего путного не получится.
6. Запускаем игру и смотрим результат по кадрам в секунду.
Суть метода в следующем: мы по максимуму исключаем вклад видеокарты в общее время рендеринга кадра, и таким образом оставляем только ту часть, которая принадлежит процессору, в полном объеме, а то, что делает видеокарта, стараемся уменьшить до минимального. Правда, есть проблема, связанная с количеством полигонов, которое от разрешения картинки зависеть не будет, но тут уж деваться некуда.
Так вот, ФПС, который показывает игра с такой конфигурацией, будет максимально достижимым ФПС с новой видеокартой. Если он недостаточен, нужно апгрейдить и процессор тоже (а то и ОЗУ).
Если кратко, то вот так. Потом, вероятно, добавлю картинки для иллюстрации описанных действий.