Использование аппаратного ускорения Flash

Моя цель — протестировать производительность среды Flash 3D, создав множество 3D-кубов, вращая их и считывая FPS.

Я знаю, что могу вращать 2D-объекты в 3D-пространстве. Например, я могу построить куб из 6 мувиклипов, поворачивая их и соответствующим образом соединяя. Затем я могу сгенерировать множество этих кубов в случайных местах x, y, z (заранее определенная область перед окном просмотра), повернуть их и считать fps.

Но потом прочитал про это аппаратное ускорение и мне непонятно, когда оно активируется/используется. Должны быть соблюдены определенные условия. Я знаю, что это должно быть разрешено пользователем (щелчок правой кнопкой мыши-> настройки-> включить аппаратное ускорение) или, если оно встроено через тег объекта, необходимо установить wmode=direct.

Это со стороны зрителей, а что со стороны разработчиков?

Если я рисую на сцене простой красный прямоугольник, а пользователь включил аппаратное ускорение, означает ли это, что графическая информация будет отображаться на графическом процессоре?

Я читаю различные источники и книгу «Программирование игр Adobe Flash 11 Stage3D», и из того, что я собираю, для отображения графической информации на графическом процессоре мне нужно явно вызвать класс Stage3D в AS3, после чего я могу нарисовать свой 2d/3d объекты там.

Что это? Если я хочу, чтобы мое приложение запускалось в режиме аппаратного ускорения (и оно было включено со стороны зрителей), происходит ли это автоматически, независимо от содержимого моего флэш-файла? Или мне нужно добавить туда класс Stage3D.

Спасибо.

Будет ждать ответа.


person Starwave    schedule 25.05.2014    source источник


Ответы (3)


Прежде всего: не путайте во Flash две разные концепции:

  • Общее аппаратное ускорение

Это было введено в основном для воспроизведения видео во Flash Player 10. Я не уверен, что оно вообще использовалось для графики. Это не имеет ничего общего с рендерингом 3D-графики непосредственно на графическом процессоре.

  • Поддержка графического процессора

В Flash Player 11 компания Adobe представила Stage3D. Это интерфейс, через который Flash может отображать графику с использованием графического процессора, если он доступен. В Windows используется Direct3D, в Mac — OpenGl. Классический Flash DisplayList Graphics API не поддерживает это. Вы должны пройти API Stage3D, как описано в книге, которую вы упомянули. Чтобы использовать поддержку графического процессора в браузере, для тега внедрения необходимо, чтобы атрибут wmode был установлен на «прямой». Работать напрямую с API Stage3D непросто, и для этого вам нужно изучить концепции 3D-программирования, программирования шейдеров и т. д. Есть несколько библиотек, которые помогают работать со Stage3D. Для 3D есть т.е. Away3D. Если вам просто нужна 2D-графика с поддержкой графического процессора, в наши дни Starling — очень популярный фреймворк.

person otomo    schedule 28.05.2014
comment
ФИ-НА-ЛИ! Конструктивный ответ, проливающий свет на этот вопрос, эти понятия смешаны, неудивительно, что я их перепутал. Да, я получил больше информации о том, что все, что мы обычно рисуем во Flash, является объектом DisplayList, который не может быть обработан на графическом процессоре, но объекты, нарисованные в Stage3D, могут. Кроме того, объекты Stage3D всегда будут стоять за объектами DisplayList, по этому вопросу в Интернете ведется довольно много дискуссий. Но на заметку - что произойдет, если у меня будет полноразмерный рисунок stage3d, а поверх него есть объект DisplayList? Все обрабатывается на графическом процессоре, кроме DL obj? - person Starwave; 29.05.2014
comment
хорошая отправная точка, чтобы погрузиться в это, вероятно: adobe.com /devnet/flashplayer/articles/how-stage3d-works.html - person otomo; 30.05.2014
comment
чтобы ответить на ваш последний вопрос: да! Хотя рисовать классический DisplayList поверх Stage3D не рекомендуется из-за падения производительности. Тем временем Adobe, похоже, исправила это: forum.starling-framework.org/topic/ - person otomo; 30.05.2014
comment
хороший обзор истории поддержки графических процессоров во Flash: blog.kaourantin.net/?p=138< /а>. - person otomo; 30.05.2014

Вот функция, которая преобразует мувиклип в растровое изображение. Я использую обычную флэш-память для создания того, что будет отображаться на экране, затем конвертирую мувиклипы в растровые изображения и удаляю мувиклипы:

private function fConvertClip(pClip: MovieClip, pWidth: int, pHeight: int): Bitmap {
var bd: BitmapData = new BitmapData(pWidth, pHeight, true, 0x00000000);
bd.draw(pClip, null, null, null, null, true);       
aBitmaps.push(bd);
var bmp: Bitmap = new Bitmap(bd, "auto", false);
bmp.smoothing = true;
return bmp;

}

person moot    schedule 26.05.2014

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

На gotoandlearn.com есть отличные обучающие видео по этому вопросу.

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

person moot    schedule 25.05.2014
comment
Не включайте настройку аппаратного ускорения - ПОЧЕМУ? Извините, но это не отвечает на мой вопрос (выделено жирным шрифтом)... - person Starwave; 25.05.2014
comment
Потому что этот параметр не привязывает ваш прямоугольник к графическому процессору. Он пытается проверить компьютер пользователя и решает, преобразуется ли прямоугольник. Вы сами сказали, что видели, как этот параметр является решением. Как я уже сказал, используйте код, чтобы заставить его работать с GPU. - person moot; 26.05.2014
comment
Потому что этот параметр не привязывает ваш прямоугольник к графическому процессору. - хорошо, теперь мы куда-то движемся. Тогда вопрос - что ПРИНУЖДАЕТ мой прямоугольник к gpu? - person Starwave; 26.05.2014
comment
Мы куда-то попали? Я ответил на ваш вопрос (см. растровое изображение, графический процессор, учебник, объяснение преобразования moviclips в растровое изображение и фактический код), но проблема в том, что вы не уверены, о чем спрашиваете? Опубликуйте свой код, чтобы мы знали, что именно вы знаете о том, о чем спрашиваете. - person moot; 26.05.2014
comment
Я узнал то, что хотел узнать в книге, в настоящее время я работаю над тем, чтобы изложить все это на бумаге, как только это будет сделано, я поделюсь ответом здесь. - person Starwave; 27.05.2014