Графический процессор является отличным механизмом для небольших операций с высокой степенью предсказуемости, таких, которые требуются тысячами для того, чтобы нарисовать одно изображение на холсте (в буфере памяти) для отображения на экране.
Графический процессор может выполнять несколько сотен операций с одним буфером памяти одновременно, используя так называемые шейдерные программы, это используется для придания изображениям привлекательности, добавляя функции, которые делают современные игры такими потрясающими. Проблема состоит в том, что из-за их потребности в высокой скорости и пропускной способности данных эти программы должны постоянно изменяться, указываться на новые данные и, как правило, управляться.
Это только одна из вещей, которую процессор делает для современных игр. Графическая карта делает его красивым, в то время как процессор показывает, как сделать его красивым. Многие стратегические игры также требуют отслеживания в реальном времени многих тысяч игровых объектов и того, что эти объекты делают в данный момент.
Например, я дам вам идею, используя одну игру, Supreme Commander.
У вас есть единое целое. Достаточно просто.
Эта единица может двигаться, и в этом случае вам нужно отслеживать векторы направления и скорости для этого объекта.
У устройства есть пистолет, и в этом случае вы должны отслеживать, стреляет он или нет.
Оружие стреляет пулями, поскольку для каждой выпущенной пули игра должна создать объект, детализирующий направление и скорость этой пули, или, по крайней мере, создать виртуальную линию из оружия, а затем проверить, не пересекаются ли другие игровые объекты с этой линией.
Допустим, это не простое оружие, а нечто вроде баллистической пусковой установки, оно требует более реалистичной баллистической симуляции. Пуля должна отслеживаться, когда она пересекает карту, и ее скорость и высота постоянно моделируются (приближенной) реальной баллистической моделью. Это нужно будет делать сотни раз в секунду, чтобы снаряд выглядел правильно.
Это все одновременно говорит графической карте, что рисовать там, где вам нужно.
Снаряд должен постоянно проверяться, чтобы определить, занимает ли он то же место, что и вражеский отряд, и в этом случае у вас есть удар, в противном случае вы продолжите.
Если происходит попадание, вам нужно вычислить, что происходит, получает ли юнит урон или его убили? В любом случае нам нужно показать пользователю какую-то анимацию "взрыва"? Кусочки осколков разлетаются, что-то в этом роде ... В этом случае каждый из этих кусочков шрапнели нужно отслеживать, анимировать и в конечном итоге уничтожать, чтобы их больше не нужно было моделировать.
Теперь представьте, что у каждого игрока может быть до 500 юнитов, потенциально способных двигаться, чтобы стрелять из нескольких орудий или ракетных пусковых установок, чтобы проверить, есть ли поблизости враги, из которых можно стрелять. Потенциально тысячи взаимодействий пуль, траекторий ракет и баллистических снарядов, которые должны быть созданы, отслежены, испытаны и имеют видимые действия, которые происходят в результате. Поместите 8 игроков в эту игру, и вы быстро получите несколько тысяч юнитов с десятками тысяч снарядов в игре, и все это со связанными программными "объектами", которые нужно создавать, отслеживать и уничтожать в течение срока службы объекта.
Это огромное количество вычислений, которые необходимы для того, чтобы отобразить каждый кадр графики, и это все, прежде чем рассказать графической карте, что именно она может показать.
Во многих играх вы можете (своего рода) игнорировать все, что находится за пределами экрана или за пределами области в данный момент, но не так в игре RTS, каждое подразделение может двигаться, стрелять и умирать независимо от того, на что вы смотрите в данный момент. момент. В каждом отряде также есть встроенный "ИИ", который рассказывает, как следует передвигаться, как избегать препятствий, как добраться до противника, когда он должен стрелять, как он может стрелять.
Эти вещи не поддаются тому, что видеокарта может легко сделать. Видеокарты хорошо работают с сотнями копий одной маленькой программы на больших блоках данных и не слишком хорошо справляются с большими и длинными вычислениями, которые подходят для каждого шага расчета состояния одного устройства. Конечно, он может справиться с баллистическими снарядами и тому подобными вещами, но за каждый бит, который вы отслеживаете, вы теряете силу, которая может быть использована для отображения изображений.
Процессоры являются достаточно мощными и могут обрабатывать гораздо более сложные программы ветвления, чем графическая карта, и они гораздо больше подходят для крупномасштабного управления всей системой, в то время как видеокарты хороши для простого вычисления чисел и показа красивых картинок.