Недавняя утечка SDK Xbox One—вместе с прилагающейся документацией—дала нам очень хорошее представление о том, как создавалась и эволюционировала последняя на сегодня консоль от Microsoft. Недавние нововведения, такие как разблокировка седьмого ядра процессора для исполнения игрового кода, были обнаружены как раз благодаря этой утечке, но документация содержит в себе гораздо больше разной интересной информации. Фактически, они дают нам полное представление о графике создания системы, от первых альфа-девкитов времен апреля 2012, вплоть до последних улучшений и доработок, которые были внесены в ноябре 2014.
К счастью, в этом случае не пришлось вникать в каждый отдельный API и каждую конкретную оптимизацию, которые были сделаны за 19 месяцев, все важные события отражены в разделе “What’s New” документации, и этот раздел расписан для каждого релиза SDK вместе со ссылками на аналогичные события в предыдущих релизах, отмечая как ключевые вехи в развитии, так и более мелкие изменения с описанием как было, как стало и с намеком на то, что будет дальше.
Что немного удивляет, так это ощутимая смена фокуса по ходу разработки, которая отражает перемены в маркетинге консоли и появление SKU без Kinect—работы по реализации управления движением были потихоньку отложены “на потом”, а на первый план вышло повышение производительности GPU и различные оптимизации, многие из которых стали возможны ценой устранения Kinect из картины.
Так же стало ясно, что проблемы производительности GPU были вполне известны внутри Microsoft—даже до запуска. Наверное, самый большой сюрприз из обнаруженного в документации SDK-не считая свежих новостей про освобождение седьмого ядра CPU-существование двух отдельных графических драйверов для железа Radeon, которое установлено в Xbox One: мы уже знаем про моно-драйвер—GPU-интерфейс Microsoft, призванный максимизировать производительность, но где-то так же существовал обычный драйвер пользовательского режима (user-mode driver)—нечто, на что ссылаются в этих документах.
Хороший источник сообщает, что UMD-это специфичный для Xbox One драйвер, который имел много дополнительных проверок и возможность отлавливать ошибки, и был призван помочь разработчикам выкатить рабочий билд игры как можно скорее—ценой сниженной производительности. Но здесь мы уже торопимся: давайте начнем с самого начала.
Альфа-железо: Апрель 2012-Март 2013
Когда первые альфа-версии девкитов добирались до рук разработчиков, еще не было Xbox One в том виде, в котором мы его знаем—проект некстджен-консоли от Microsoft проходил в обращении по кодовому имени Durango (кстати, это Мексиканский штат, если вдруг интересно). Действительно, в то время реального железа консоли вообще не было в природе—разарботчикам предоставляли PC в обычном корпусе, который по железу соответствовал видению Microsoft возможностей обычной серийной консоли. Эта самая машина попала в руки хакера SuperDAE, скорее всего через портал разработчиков Microsoft, и в итоге она оказалась на eBay. К этому моменту основы консоли стали очевидными: Durango использует энергоэкономичные 64-битные x86-ядра и графическое железо “уровня DirectX 11″.
Каково было состояние фактического железа Xbox One к тому моменту? Дизайн APU, содержащий CPU, GPU, Move Engines и ESRAM-память уже был готов, но само железо пока еще не покидало лабораторий Microsoft. В любом случае, разработка ПО шла полным ходом для альфа-платформы. Явно заметно, что основные усилия в разработке были направлены на мультимедиа-фишки. Взаимодействие с другими девайсами через SmartGlass, натуральный пользовательский интерфейс с возможностями, основанными на Kinect 2.0, и фокус на мультимедиа в целом–основные темы релизов SDK в тот период.
Натуральный пользовательский интерфейс: Помните про Input One и фокус на Kinect/ТВ? Во время альфа-железа Kinect, сенсор движений, который ныне часто попадает под клевету, потихоньку формировался в центральное ядро системы, и разработчики начинали улавливать идею того, что возможно на второй версии сенсора. Ранние сборки SDK предлагали некоторые очень интересные инструменты, например возможность сравнить вывод первого Kinect с выводом пре-альфа сенсора Durango. К тому времени железо было очень далеко от законченного и для планирования были доступны только потоки данных IR и глубины.
Если же взглянуть на последующие заметки к релизу, можно увидеть огромное количество изменений и улучшений для поддержки нового сенсора через NUI (Natural User Interface-натуральный пользовательский интерфейс) 2.0 API. Продвинутое отслеживание скелета, определение положения рук, отслеживание выражения лица, идентификация пользователя и новые системы распознавания речи—все это было представлено в августе 2012, и еще немалое количество фишек было добавлено за последующие месяцы. К тому моменту было ясно, что Kinect 2.0 будет большой штукой для Xbox One, и разработчикам было предоставлено много разных игрушек для изучения. Что интересно, в Microsoft знали про угасающий интерес к Kinect для Xbox 360, но фокус на сенсоре по-прежнему сохранялся. Возможно, платформодержатель решил, что молния выстрелит дважды, но в любом случае все главные решения по железу уже были приняты—в том числе и цель построить “гостиную будущего”—и компания уже была связана этим.
Графика: Оригинальные девкиты поставлялись со стандартными видеокартами от AMD вкупе с обычным DirectX 11 “драйвером от производителя”. Начиная с апреля 2012, Microsoft начали потихоньку выкатывать специфичный для Durango драйвер с ограниченной функциональностью, известный как “Durango user-mode driver” или UMD. В нем регулярно появлялись новые фишки, включая аппаратную расшифровку и зашифровку видео, тесселяцию из D3D 11.1, изменения в обработке шейдеров и другое. К августу этот драйвер становится стандартным; через пару месяцев поддержка обычного драйвера убрана полностью. Обновления к UMD поступают ожидаемо регулярно, но не настолько часто до тех пор, пока Microsoft не выпустили “D3D монолитный драйвер”-хорошо оптимизированный интерфейс GPU, над которым Microsoft продолжали работать, пока UMD фактически не стал заброшенным—и вот с этого момента все начало набирать обороты.
Средства разработки: В мае 2012 Microsoft снова представили замечательнейший профайлер PIX, который существует уже много лет и помогает разработчикам анализировать и понимать производительность написанного кода. Изначальный релиз PIX выглядел очень простым, но улучшения после анонса поступают быстро и они существенны: например, был добавлен браузер ресурсов с видом на рендер-таргеты и буфер глубины, визуальный график событий отрисовки на GPU, развитый интерфейс и возможность отлавливать тайминги событий на CPU и GPU для более глубокого анализа с минимальным влиянием на производительность. Более того, появилась поддержка заданных пользователем событий, и состялся первоначальный релиз монитора производительности для профилирования в реальном времени, который мог отображать живые параметры производительности с девкита. Кроме этого, появлялось и со временем улучшалось много других средств за этот ранний период, в том числе были изменения и в Visual Studio, дополнительные шаблоны, был ускорен процесс развертывания игры на девките для тестирования, была улучшена генерация кода и не только.
Ввод: Поддержка приложения-компаньона, как минимум на базовом уровне, была доступна уже с самого начала, это его переименовали в SmartGlass в августе. Примерно тогда же были анонсированы импульсные триггеры контроллера, скорее всего проектирование геймпада (на который было потрачено более 100 миллионов долларов-прим. переводчика) подходило к завершению. API для ввода в этот период менялись постоянно.
Аудио: Судя по всему, аудио не играет большой роли в ранние дни SDK, когда реального железа еще не было (Xbox One в итоге обладает довольно мощным звуковым процессором на APU, нечто похожее на блок TrueAudio, который можно встретить на последних видеокартах AMD для PC). Базовая функциональность была доступна уже сразу, но эмуляция звуковой карты была добавлена в августе, что позволило разработчикам тестировать код “звуковой части” своих приложений и игр.
Бета-железо: Февраль 2013-Август 2013
К началу 2013, мы стремительно приближаемся к официальному анонсу консоли. К этому моменту дизайн системы потихоньку начинает складываться в единое целое. Где-то в районе февраля бета-девкиты уже циркулируют на руках у разработчиков, они выглядят близко к итоговой консоли и используют финальное железо-но поддерживающее ПО пока еще глубоко на стадии разработки. Ранние бета-девкиты описываются как “зебра-железо”: белая консоль с черной раскраской. Разные отчеты подсказывают, что раскраска разная от консоли к консоли, чтобы в случае чего определить источник утечек—немного забавное решение, с учетом того, что упомянутый ранее SuperDAE и сайт VGLeaks уже рассказали практически все про технологическое строение Durango. Многое из того, что утекло, так и осталось нетронутым в утекшей сейчас документации, почти дословно.
К марту 2013, поддержка альфа-железа полностью убрана, и Zebra бета-девкит становится стандартной коробкой, с которой работают разработчики. В течение следующих месяцев, они потихоньку заменялись серийным железом Xbox One, который отличался от “зебр” не только внешне, но и повышенными частотами CPU и GPU. Разработка софтверной части продолжалась:
Запись игровых клипов: Очевидно, что эта функция была в разработке некоторое время, тем не менее очень интересно, что появление GameDVR в среде разработчиков в марте 2013 примерно совпадает по времени с анонсом PlayStation 4 и ее аналогичного функционала. Возможность делиться геймплеем была очень важной и для Sony, и для Microsoft, и без сомнения была навеяна схожим железом, которое компании предпочли лицензировать у AMD.
Графика: Изменения продолжают собираться в драйвере пользовательского режима, или UMD, о котором говорилось ранее, но в июле 2013 Microsoft начинает предварительно показывать Монолитный Direct3D-драйвер (Monolithic Direct3D driver), который публично упоминается как моно-драйвер и призван эволюционировать штатный набор фишек D3D специально для консоли, удаляя лишние функции и убирая лишние накладные расходы. Это удивительно, но Microsoft все еще имеет в обороте два драйвера GPU, и так продолжалось до мая 2014, пока UMD окончательно не отправили в корзину. Моно-драйвер стал ключом к улушению производительности будущих игр Xbox One, но версия драйвера, которая использовалась для стартовых игр, была далеко не так хорошо оптимизирована, как сейчас. Один из разделов SDK того времени гласит “Больше никакого тиринга!”—это символизироало появление поддержки v-sync и adaptive v-sync. Кроме этого, появилась поддержка 720p-вывода (для старых телевизоров-прим. переводчика), но на деле это простой даунскейл с 1080p.
Xbox Live: Многие функции, связанные с Xbox One уже были онлайн, и были анонсированы обновленные API Xbox Live Services: набор включал в себя работу с профилями, доски рекордов и возможность в реальном времени отражать в статусе то, что пользователь делает в игре.
Натуральный пользовательский интерфейс: Дальнейшие улучшения получает Kinect, с появлением финального железа появляется и готовое к выпуску железо камеры. В этот временной период обновления SDK направлены на повышение точности работы с Kinect. Появилось точное отслеживание рук и пальцев, ориентация суставов, определение состояния глаз и рта, определение наклона туловища и улучшенное определение сидящих людей. Мысль, которую можно уловить-полная функциональность Kinect была готова слишком поздно. Из-за этого разрабатывать игры под камеру было сложно и это объясняет, почему к запуску консоли Microsoft не приготовили ни одной игры, которая оправдывала бы существование камеры.
Последний апдейт SDK перед запуском консоли состоялся в августе 2013, примерно тогда же, когда вышел Service Pack 3 для операционной системы Xbox One. Интересно, что в документации есть целый раздел о подготовке игр к запуску Xbox One. Один из наиболее интересных элементов в этом разделе-кейс применения динамического разрешения игрового билда (то, что используется в Advanced Warfare или Wolfenstein: TNO на One-прим. переводчика). В документе отдельно отмечено, что если у разработчиков есть проблемы с достижением целевого FPS при целевом разрешении, то стоит задуматься о динамическом изменении разрешения в зависимости от нагрузки на GPU. Удивительно, но там же Microsoft предлагает метод для реализации этого процесса. Единственная игра, в которой мы заметили использование этой технологии-это Wolfenstein: The New Order, но неизвестно, используется ли тут API Microsoft, или реализация сделана силами id Tech 5. Поскольку в PS4-версии игры это тоже работает, мы ставим на второе.
К этой точке времени в Microsoft уже знают, что многие игры запуска, в том числе и некоторые их собственные, будут работать не в нативном разрешении, и документация выделяет мощный движок апскейлинга Xbox One: говорится о том, что он лучше, чем у 360, “который и так являлся очень крутой технологией”. Возможно, это правда, но на запуске Xbox One как раз имел проблемы с апскейлингом, одной из которых стал фильтр резкости (убранный с обновлением консоли в начале 2014), нам остается только гадать, почему Microsoft назвали эту технологию хорошей.
Платформодержатель также реализует проприетарную технологию сглаживания AMD—EQAA, которая была добавлена за несколько месяцев до запуска консоли-впрочем, мы не знаем ни одной игры запуска, где технология бы применялась. Так же указан кейс реализации 4xMSAA: если игра уже использует 2x-вариант сглаживания, то в связи с низкой побочной нагрузкой на GPU за счет хранения первых двух фрагментов каждого пикселя в ESRAM и двух последних в основной памяти (к которой обращаются не так часто из-за сжатия) можно перейти на 4xMSAA почти без влияния на производительность. Это интересная теория, и возможно это было применено в Forza Horizon 2—единственная Xbox One-игра на нашей памяти, которая использует 4xMSAA.
С февраля по ноябрь 2014—и дальше
В документации SDK Xbox One зияет огромная дыра: раздел “What’s new” пустует между августом 2013 и февралем 2014. Была ли информация удалена выложившим, или ее не существует вообще-неизвестно. В любом случае, начало 2014-решающий период для Microsoft, когда компания пытается выправить стратегию запуска Xbox One и исправить разницу в GPU с PS4 настолько эффективно, насколько это вообще возможно. Сразу же мы видим записи о том, что разработчикам дается больше контроля над ESRAM, который стал затычкой для многих игр с запуска консоли.
Графика: За время ближайших месяцев виднеется большое количество обновлений, связанных с моно-драйвером. Аппаратное ускроение обработки видео добавлено в марте, вместе с поддержкой асинхронных вычислений на GPU. К маю окончательно убирается поддержка user-mode драйвера в пользу моно-драйверу, это объясняет существенное улучшение производительности игр для Xbox One, которые выходили после второго квартала 2014. Фокус на моно-драйвере отбивает себя сполна на протяжении 2014 года, Microsoft улучшает производительность GPU почти каждый месяц, демонстрирую огромный прогресс в эффективности вызовов отрисовки к июлю.
Многие улучшения производительности GPU идут из функциональности Kinect, которая стала опциональной—июньский XDK и его влияние подробно расписывается в тогдашней версии документации. Кроме GPU-ресурсов, игры получают дополнительные вычислительные ресурсы CPU засчет функциональности Kinect—это касается игр, которые не используют распознавание речи, определение глубины и процессинг IR. Кроме этого, отключение специализированных под игру голосовых команд позволило увеличить доступную пропускную способность GPU на 1 GB/s.
Улучшения апскейлера: Качество апскейлинга изображения так же сильно подросло в апреле с новыми элементами управления, доступными для разработчиков. Судя по обновлению, стал доступен выбор из семи фиксированных типов апскейлинга изображения, включая билинейный, функцию кардинального синуса в четыре прохода, фильтры Ланцоша. Это позволило существенно улучшить качество изображения и объясняет, почему разница между 900p и 1080p-играми последнего времени почти не заметна.
Запуск Xbox One показал, что производительность GPU была довольно грустной в сравнении с PS4, с проблемой ‘Resolutiongate’ в играх вроде Battlefield 4, и это совсем не помогало консоли. В феврале 2014 Microsoft начали серьезно улучшать производительность.
Аудио: К маю 2014 появилась поддержка фоновой музыки при использовании закрепленного приложения, кое-что, чего до сих пор не умеет PS4. Так же был добавлен микшер громкости для закрепленного приложения и игры, и при использовании Kinect для чата. В июле произошли дальнейшие совершенствования процесса взаимодействия аудиокарты и CPU, в основном связанные с переходом на незакэшированную память для аудиопроцессора, что позволило снизить нагрузку на CPU при работе с аудио. Так же появилась поддержка USB-микрофонов.
Средства разработки: PIX, профайлер от Microsoft, продолжает улучшаться, и в сентябре он научился показывать содержимое ESRAM, чтобы оптимизировать использование ультрабыстрой памяти. Так же в документах упоминается функция скриншотов для разработчиков-кое-что, что не помешало бы сделать и для основной системы. Так же PIX для One научился делать постоянную запись изображения с консоли, когда на 360 можно было записывать только минуту геймплея.
Средства ввода и натуральный интерфейс: Большинство изменений с Kinect—кроме отключения функций—связаны с устранением различных багов. Устраняются ошибки в отслеживании и вносятся общие улучшения, но в целом ясно, что сенсору теперь уделяется гораздо меньше внимания. Так же улучшается ввод с геймпада, например разработчики теперь могут точно определять, когда производится ввод, что позволяет более точно контролировать управление игрой, и могут выбирать, на каком из ядер CPU выполнять обработку данных. Еще упоминается поддержка клавиатуры “для некоторых приложений”, что намекает на то, что приложения теперь могут общаться с USB-клавиатурой.
Изменения в мультиплеере: Одно из самых больших изменений, которое отражено в этих документах, это то, как работает мультиплеер. В документации упоминаются термины “Мультиплеер 2014″ и “Мультиплеер 2015″, и соответственно обозначают два разных подхода в отношении того, как игроки подключаются между собой. Текущий дизайн мультиплеера построен на системе игровых вечеринок, когда игры используют системную конструкцию чтобы управлять активной группой пользователей, когда они играют в игру вместе. Все функции матчмейкинга работают через эту вечеринку. Документ описывает, как внутри вечеринки игроки помещаются в сессии, при этом облако используется для хранения и работы сессий, и оно так же отвечает за управление вечеринками.
Пока некоторые игры вроде Call of Duty: Advanced Warfare продолжали выглядеть лучше на PS4, другие тайтлы показывали, что разрыв между Xbox One и ее основным конкурентом сокращается. В случае с Destiny, Xbox One-бета, которая работала в 900p, была поднята до 1080p к релизу—выдавая фактически тот же опыт, что и версия игры для платформы Sony.
В любом случае, для “Мультиплеера 2015″ Microsoft удалили этот барьер, убрав необходимость иметь доступ к сетевым функциям через систему вечеринок. Теперь все функции, связанные с мультиплеером, доступны напрямую через MPSD-сессии, и больше нет необходимости работать с вечеринками на низком уровне. Судя по всему, это сделает процесс создания игр проще, так как требуется меньше вызовов туда и обратно, которые могли потенциально вызывать проблемы в производительности. Дизайн “Мультиплеера 2015″ и его API стали доступны в предварительном виде в сентябре 2014, и пока так и не ясно, когда мы увидим игры, которые этот дизайн используют. Было обсуждение, что Halo: The Master Chief Collection может использовать дизайн-2015, но если учесть, что технология была анонсирована почти перед самым запуском игры-маловероятно.
Итоги: эволюционируя от мультимедийного центра до игровой машины от-и-до
В Digital Foundry, у нас есть необходимость в том, чтобы понимать, как работает игровое железо, и эта утечка SDK дала нам самый большой кусок информации, который мы только могли получить про Xbox One после интервью с одним из инженеров в далеком октябре 2013. Технические мелочи часто бывают несущественными, иногда они о чем-то говорят, но всегда они удивительны, предоставляя кучу информации о направлении, в котором Microsoft двигались за эти беспокойные 19 месяцев разработки консоли.
Поразительно смотреть на таймлайн улучшений, оптимизаций и появления новых фишек консоли, почти все из которых пришли ценой отрезания функционала Kinect, который был у стартовой консоли. С седьмым ядром CPU в полном доступе для разработчиков, дополнительными ресурсами GPU и оптимизациями моно-драйвера прослеживается явный прогресс, который объясняет, почему последние крупные игры на Xbox One выглядят так же или почти так же хорошо, как и на PS4. Но достаточно много информации пока остается в неведении—например, Microsoft понизили резерв CPU, но как обстоят дела с 3 ГБ памяти, которая все еще недоступна разработчикам?
Конечно, стоит отметить, что все эти изменения не происходят в вакууме. Сложно представить, что Sony не улучшили производительность своей платформы в похожей манере за последнее время. Несомненно, Sony медленно выкатывает обновления для пользователей, но как с этим обстоят дела со стороны разработчиков все еще остается большой тайной. Информация просачивается медленно и аккуратно, в основном через презентации разработчиков на GDC/Siggraph (мы ждали официального подтверждения истории про зарезервированную память у PS4 около 8 месяцев), но возможно утечка такого масштаба произойдет и у Sony в какой-то момент в скором времени. Несмотря ни на что, главный результат всех этих нововведений—игры в 2015 должны стать лучше—не только из-за улучшенных средств разработки, но еще и потому что разработчики будут работать над “вторым поколением” игр для Xbox One и PS4-и нам не терпится увидеть их в действии.