Ждёт ли нас будущее без DirectX?
В этом материале будет рассказано о том, почему игры на PC "благодаря" DirectX не выглядят намного лучше, чем их консольные собратья, и как особенности использования DirectX нивелируют превосходство компьютерного "железа" над консолями.
В первой части статьи уже были затронута эта тема, но теперь мы перейдём к более предметному разговору. Собственно, в чём именно проявляется этот "повышенный аппетит" DirectX к производительности, которая становится недоступной для разработчиков? Настолько ли всё плохо?
Ну, во многом это зависит от самой игры. "Потери производительности могут быть практическими незаметными, либо же быть очень существенными," — говорит Ричард Хадди. "Если бы отрисовываете просто экран, заполненный пикселями, то типовой PC справится с этой задачей так же хорошо, как и любая консоль. В наши дни компьютеры обладают достаточной грубой силой, чтобы показывать весьма хорошую картинку в высоких разрешениях, чем и пользуются компьютерные игры. Однако то, чего вы не увидите в PC-играх — это отличия в самой программной архитектуре, которые выливаются в то, чего нет на PC и что мы часто видим на консолях.
На консолях возможно отрисовывать 10 000, может 20 000 геометрических элементов ( или Draw Calls ) за кадр, и делать это со скростью в 30-60 кадров в секунду, в то время как на PC сложно отрисовать более 2000-3000 и не столкнуться с проблемами производительности. Удивительно, но PC, обладая такой производительностью, показывает только десятую часть от скорости отрисовки объектов по сравнению с консолями, если вам необходим отдельный пакет ( batch ) для каждого Draw Call.
На настоящее время в DirectX как архитектуре для PC-приложений пытаются ликвидировать данное обстоятельство, стремясь повысить возможное количество Draw Calls, в том числе путём создания многопоточных списков отображения ( Display lists ), представленных в DirectX 11. Тем не менее это нововведение улучшает ситуацию не более чем в 2 раза, и даже вкупе с инстансированием ( когда одинаковые объекты дублируются в сцене и отрисовываются лишь однажды, отображая на экране свои копии там, где нужно ) — общей картины это не меняет, в PC-играх всё ещё трудно встретить такое же разнообразие, которое встречается в консольных играх.
Так, например, если вам необходимо, чтобы каждый ваш Draw Call немного отличался от предыдущего, то максимум, на который вы можете обычно рассчитывать — это до 5000 Draw Call. Консоли же "перевариют" гораздо больше — до 10,000 — 20,000 Draw Call, что позволяет художникам и дизайнерам сделать игру более разнообразной и насыщенной."
Конечно, программирование "прямо в железо" для консолей не является такой уж трудной задачей, особенно в конце жизненного цикла платформы, когда она изучена вдоль и поперёк. В начале жизненного цикла платформы, конечно, наибольшим желанием разработчиков является получение стандартизированного API, позволяющего быстро и без лишних затрах ресурсов разработать игру, однако по мере приближения к закату всё более актуальным становится желание "выжать все соки" и обращаться напрямую к железу, получая таким образом столь желанную производительность.
И в то же время нельзя забывать, что консоли обладают фиксированной архитектурой, чего нельзя сказать о PC. Код, написанный для PS3 или Xbox 360, будет работать на всех экземплярах этих консолей, в то время как на PC существует большое количество самых разных архитектур и производителей, на "железе" которых один и тот же код может не работать либо работать не так, как нужно.
Если убрать API ( такой, как DirectX, например ) — разработчики неизбежно столкнуться с необходимостью оптимизации и адаптации кода под большинство железок, присутствующих на рынке, что существенно повысит затраты на разработку, увеличит её время и снизит доступность конечного продукта ( что неприемлемо ).
Подобные проблемы существовали на заре рынка компьютерных игр, когда ещё не существовало стандартизированного API и каждый разработчик был вынужден подстраивать свою игру под тонкости работы железа разных производителей. Более того — прямой доступ к железу подразумевает необходимость более аккуратного обращения с ним, так как шаг вправо, шаг влево — расстрел некорректная работа программы может вызвать сбой в работе компьютера. По просту говоря, игру начнут виснуть и вместе с собой "вешать" всю систему, что также нежелательно и вряд ли обрадует кого-либо.
Ну и напоследок стоит отметить, что желание иметь доступ напрямую к железу — удел немногих компаний, таких как, например, Crytek или Epic Games, которые идут на "гребне волны" технологий и имеют ресурсы для инвестиции их в подобную "тонкую" разработку. Для инди-разработчиков прямой доступ практически неактуален.
По словам Майкла Глюка, технического директора по исследованиям и разработкам, "..компания Crytek действительно хотела бы иметь низкоуровневый доступ к железу. Определённо есть смысл в том, чтобы иметь стандартизированный, независимый от производителей API как слой абстракции над аппаратными средствами, но в то же время нам бы хотелось, чтобы этот слой был очень тонким и предоставлял больше возможностей доступа к низкоуровневым функциям железа. Это не только повысило бы производительность, но и позволило задействовать больше возможностей конкретных железок."
Однако Майкл согласен с тем, что с течением времени API если не уйдут совсем, то по крайней мере станут менее востребованными, особенно в контексте того, что GPU становятся всё менее специализированными и обретают способности выполнения задач общего назначения, используя концепцию GPGPU — General Purpose GPU, графические процессоры общего назначения.
Подведём итог. Как и любое универсальное стандартизированное решение, API — будь то DirectX или OpenGL — обладает как преимуществами, так и недостатками. В нашем случае недостатки заключаются в определённом "штрафе" в области производительности, а преимущества — в упрощении разработки программных продуктов на основе этих API. DirectX, вероятно, не исчерзнет как явление, однако давление на Microsoft и необходимость более низкоуровневого доступа к железу для реализации потенциала наверняка сделают своё дело, и в будущих версиях DirectX можно ожидать появления новых функций, способных задействовать "грубую силу" видеокарт.
Читайте также первую часть статьи AMD: DirectX сдерживает производительность графики на PC
- 2258 просмотров