Возможности 3D графики Windows Phone

Все телефоны на базе Windows Phone согласно требованиям Microsoft имеют аппаратное ускорение графики поддерживающее 3D рендеринг. В XNA 4.0 включено 5 основных эффектов шейдеров для 3D графики и несколько опций для их дополнительной конфигурации. Это основная палитра для использования в 3D играх для телефона. Вы можете скачать пример, чтобы познакомиться с тем как они работают. В этой статье приведен обзор всех пяти шейдеров, и они проиллюстрированы короткими роликами, которые дают понять об их основных визуальных возможностях.

Как уже было сказано, в Windows Phone 7 XNA 4.0 SDK 5 3D шейдеров которые реализованы в соответствующих классах.

  • BasicEffect
  • SkinnedEffect
  • EnvironmentMapEffect
  • DualTextureEffect
  • AlphaTestEffect

Несмотря на то что в Windows Phone 7 есть инфраструктура шейдеров, возможность программировать их напрямую на языке HLSL пока отсутствует. Тем не менее с исходными кодами этих шейдеровможно познакомиться в разделе примеров App Hub. Давайте посмотрим на что способны каждый из этих шейдеров.

BasicEffect

Самый первый это Basic эффект. Этот класс был уже в версии XNA 1.0. Он поддерживает от нуля до трех источников света, базируется на стандартной модели Блинн-Фонга, Опционально так же поддерживается дополнительная карта текстур, задымление, и данные цвета для вершин. Включение тех или иных опций может значительно повлиять на производительность вывода графики.

DualTextureEffect

Отличный выбор для 3D графики на телефоне. Этот метод накладывает на 3D объекты две текстуры, причем координаты второй текстуры могут быть отличными от первой, повернуты относительно друг друга и т.д. Можно сказать, что это секретное оружие в графике для смартфонов. При всей незамысловатости, этот эффект очень быстр, и позволяет использовать такие техники как карты освещенности и детальные текстуры. Смешение двух текстур производится по формуле Modulate2X
Output.rgb= Texture1.rgb * Texture2.rgb * 2;
Output.alpha = Texture1.alpha * Texture2.alpha;
Самый простой способ понять эту операцию – первая текстура определяет основной цвет объекта который затем может быть модифицирован второй текстурой. Если вторая текстура – серая на 50% то в результате будет получен оригинальный цвет первой текстуры. Если вторая текстура серая на 70% то результат будет ярче чем оригинальная текстура.

Alpha Test Effect

Это самое настоящее читерство в мире 3D графики. Алгоритм альфа тестинга заключается в том что тестирующая функция с граничными условиями (нет, больше чем, меньше чем, равно, меньше или равно, больше или равно) используется при выводе пикселя и зависит от альфа уровня. Любой фрагмент (пиксель который не прошел полный цикл шейдинга) который не удовлетворяет условиям теста просто не обрабатывается. Это позволяет, например, рисовать один сложный 3D объект в память, а затем копировать и его на экран в виде 2D с масштабированием, пользуясь информацией в альфа-канале для обработки прозрачных областей. Такой способ может пригодиться для вывода множества однотипных объектов. Для того чтобы они не выглядели как копирующие движение друг друга, можно рендерить 3-5 объектов с разными фазами движения и затем копировать их в несимметричном порядке. Это создаст иллюзию уникальности движения каждого такого объекта, но при этом значительно сэкономит ресурсы.

Skinning Effect

Данный эффект предназначен для скелетной анимации объектов. Ваш код игры управляет только «костями» объекта сильно облегчая работу с вершинами 3D модели. Вершины будут двигаться в соответствии с положением «костей», координаты которых рассчитает GPU. Windows Phone 7 поддерживает до 72 «костей» чего в принципе хватает для весьма сложной анимации.

Environment Map Effect

Финальный в нашем списке эффект, который позволяет отображать 3D объекты самым красочным образом, имитируя блеск, отражения и блики. Базой для этого эффекта является учет кубической карты, или другими словами развертки текстуры куба состоящей из 6 поверхностей. 3D объект находится в центре такого куба и отражает те текстуры, которые его окружают. Данный эффект почти ничем не отличается от BasicEffect и дополнительно принимает в качестве параметров значения трех коэффициентов влияющих на то как будет отображаться объект.

Сводная таблица возможностей шейдеров Windows Phone 7

Для того чтобы более развернуто понимать какие шейдеры использовать в тех или иных случаях, а так же сравнить их возможности можно воспользоваться вот такой таблицей:

Что дальше

Если вас заинтересовали вопросы программирования 3D графики для Windows Phone 7, то вам надо скачать инструменты для разработки и последнюю версию Windows Phone SDK 7.1

Иван Андреев iandreevнекоторое время назад подготовил цикл статей по программированию 3D для Windows Phone. Ниже ссылки на материалы.

Ну и не забывайте пользоваться нашими ресурсами и форумами MSDN, на которых можно найти ответы на многие вопросы.