Большой шаг вперед: графика на iPhone 3GS

Две недели назад все только и гадали – какие новые возможности iPhone анонсирует Apple на WWDC? Бурные обсуждения, множество догадок. Согласно одной из версий, новинкой должен был стать улучшенный графический чип, хотя лично я в это совершенно не верил. В конце концов, iPhone и так впереди многих по скорости и качеству графики.

Поверьте, когда Apple сообщила подробности, это стало для меня полнейшим сюрпризом. В телефоне действительно появился новый графический чип – и это была не просто более быстрая модель; это был PowerVR SGX, что эквивалентно смене поколения в мире консольных игровых приставок. Чувство удивления быстро сменилось большим энтузиазмом по поводу моря возможностей, открываемых новым чипом.

Шейдеры. Наконец-то!

Фрагментные (Пиксельные) шейдеры (Pixel Shader)
Фрагментный шейдер работает с фрагментами изображения. Под фрагментом изображения в данном случае понимается пиксель, которому поставлен в соответствие некоторый набор атрибутов, таких как цвет, глубина, текстурные координаты. Фрагментный шейдер используется на последней стадии графического конвейера для формирования фрагмента изображения [Википедия]

Занимаясь разработкой игр для приставок, я считал наличие вершинных и пиксельных шейдеров чем-то очевидным. Подобно тому, как большинство разработчиков не задумывается о том, поддерживает ли их процессор числа с плавающей точкой, я привык к тому, что шейдеры всегда находятся в моем наборе инструментов. Программируя графику на “обычном” iPhone, без шейдеров я всегда чувствовал себя скованным и неловким. Теперь об этом можно забыть: iPhone 3Gs предлагает нам полностью программируемый конвейер (pipeline) с поддержкой шейдеров.

Наконец-то мы сможем реализовать различные модели освещения, легко добавлять отражения и преломления, использовать карты рельефа, выполнять нефотореалистичный рендер и использовать кучу других современных возможностей, к которым все привыкли в современных играх. Безусловно, в итоге все это означает более богатую и детализированную игровую графику.

Помимо того, что вершинные шейдеры помогут сделать полигоны менее угловатыми, их можно также использовать, чтобы описать поведение каждой отдельной вершины (что было слишком большой нагрузкой на CPU в предыдущей инкарнации iPhone). Теперь гораздо проще реализовать всевозможные эффекты вроде расплющивания, растягивания или скручивания.

Не только шейдеры

iPhone 3Gs предлагает куда больше, чем просто поддержка шейдеров. Новое железо поддерживают кучу возможностей, которые, может, не такие уж “крутые” и не так часто будут упоминаться, но все они – огромный подарок для программиста:

Читайте также  App Store pre-Release iO

1. Stencil-буфер (или трафаретный буфер). Стенсил-буфер – очень гибкая вещь, которая пригодится любому программисту, занимающемуся графикой. Эта штука может быть использована для того, чтобы пометить какую-то часть картинки, как скрытую (представьте, что мы взяли трафарет и наложили его на фотографию), хотя есть и другие интересные технологии его использования (например, наложение теней).

2. Настоящие VBO, т.е. Vertex Buffer Objects (массивы вершин). Если вы пробовали использовать VBO на оригинальном iPhone, то скорее всего, результаты вас расстроили. API-то есть, а вот производительность так себе. Судя по всему, OpenGL драйвер был реализован так, что данные о вершинах обновлялись и копировались при выводе каждого фрейма, что полностью обессмысливало само понятие VBO. Хорошая новость: iPhone 3Gs предлагает истинные VBO, так что вы лишь один раз загружаете в графический чип данные о ваших объектах, а затем они используются железом каждый раз, когда объект необходимо вывести на экран.

3. Общая память (Unified memory). Apple любит говорить о деталях своего аппаратного обеспечения очень и очень размыто – возможно, для того, чтобы иметь возможность позже обновить его, не создавая никому проблем. Вместе с тем, это препятствует тому, чтобы использовать железо “по-максимуму”. Одним из малоизвестных фактов является то, что графическая память iPhone 3G составляет 24 MB – и в этот объем нужно уместить все текстуры, вершины и т.д. Теперь iPhone 3Gs использует для графики обычную память – и это означает, что графические объекты могут располагаться в любом месте без каких-либо ограничений. А если вспомнить, что память у нас увеличилась до 256MB, то становится ясно: все это неизбежно приведет к весьма заметному улучшению графики в новых играх.

4. Текстурные блоки (texture units). У iPhone 3G было всего два текстурных блока, что ограничивало нас довольно базовой функциональностью: базовая текстура плюс карта освещенности. Все остальное требовало использования нескольких проходов, что приводило к повторному рендерингу геометрии и здорово замедляло процесс. Новое железо поддерживает 8 текстурных блоков, так что при реализации всевозможных эффектов ограничений больше нет (выше только звезды!). При этом, безусловно, не стоит забывать, чем больше текстур – тем больше затраты на их обработку.

С точки зрения разработчика…

..нет сомнения, что iPhone 3Gs – нечто совершенно новое: он быстрее, имеет больше памяти и кучу новых возможностей. Давайте скажем честно: это совершенно новая платформа. До этого мы еще могли игнорировать различия между iPhone 3G и iPod Touch 2nd gen, но больше это не так. И это первый шаг к фрагментации рынка iPhone-приложений.

Читайте также  Pre-Release Земеля Джим

И мы говорим не о том, что ситуацию можно поправить парочкой #ifdef (т.е. условной компиляцией). Это в самой основе своей иная платформа, для которой все графические объекты создаются иначе; это новый конвейер, для которого будут делаться шейдеры; это куда больше программирования и оптимизации.. Иными словами, если вы планируете использовать новое железо, то затраты на разработку возрастут. Никаких сомнений в этом нет.

С другой стороны, разработчики просто не могут игнорировать рынок из более чем 40 миллионов iPod Touch’ей и iPhone’ов предыдущего поколения, поэтому нам придется довольно долгое время одновременно поддерживать две платформы. Полагаю, довольно большое количество разработчиков продолжат ориентироваться исключительно на предыдущий iPhone 3G, не используя продвинутые возможности нового железа. Остается только надеяться, что Apple не будет представлять абсолютно новую платформу каждый год и убережет разработчиков от тех кошмаров, что они имеют на PC.

Взгляд пользователя

Каким образом от нового железа выиграют пользователи? iPhone 3G можно описать как нечто очень похожее на игровую консоль Sega Dreamcast. Но тогда iPhone 3Gs напоминает “навороченный” Microsoft Xbox и сидит где-то между оригинальным Xbox и Xbox 360.

Очень скоро разница между старыми играми, и новыми (использующими новые возможности), станет очевидной для всех пользователей, хотя небольшой форм-фактор и разрешение экрана несколько смягчают разницу в восприятии (разница будет куда заметнее, если Apple официально реализует возможность “video out”, так что iPhone можно будет подключить к TV).

Выводы

Теперь игры можно сделать куда более привлекательными – но только в том случае, если у разработчиков будет дополнительное время и ресурсы для поддержки совершенно новой платформы. Это вряд ли будет возможно до тех пор, пока игры продаются дешевле чашки кофе, поэтому я ожидаю некоторых изменений в этой области.. Отделит ли новый iPhone зерна от плевел, создав более жизнеспособный рынок? Или же потопит всех разработчиков, попытавшихся поддерживать фрагментированную платформу? Только время покажет.

Источник: iphones.ru

Лучшее для себя