1 марта 2011 г.

Что такое Molehill?

Данная статья — вольный перевод статьи Thibault Imbert. Оригинал здесь.

Molehill — 3D API для Adobe Flash Player и Adobe AIR. Это название API для работы с трехмерной графикой на языке ActionScript 3 для платформы Flash, использующего возможности графического процессора (GPU). Работа API основана на низкоуровневом и высокоуровневом программировании шейдеров (вершинных и фрагментных). На платформе Windows API будет полагаться на DirectX. На других платформах — на OpenGL доступной реализации. Благодаря этому API разработчик получает возможность управлять таким функционалом как z-буферы, буферы трафарета, кубические текстуры, vertex skinning при скелетной анимации и многим другим на уровне GPU. А пользователь получает высокопроизводительную 3-мерную графику прямо в своём браузере.

Доступный сейчас API Flash плеера остается. Molehill будет его значительно дополнять, предлагая решение для сложной 3-мерной визуализации, требующей графического ускорителя. В зависимости от разрабатываемого вами проекта вы сможете выбрать с каким API будете работать.

Недавно Adobe представила концепцию Stage Video. Stage Video добавляет в прежний дизайн поддержку GPU для видео-декодирования. В этой новой модели визуализации видео-кадры или 3-мерный буфер не размещаются в списке отображения, как другие объекты отображения Flash плеера, а рисуются позади сцены средствами GPU. Это позволяет Flash плееру размещать такое содержимое непосредственно в памяти графического адаптера и обрабатывать его там же. И нет причины перемещать эту информацию в оперативную память для обработки CPU.

Поэтому, 3-мерные объекты (Context3D и Stage3D) размещены позади сцены (объекта stage) и не принадлежат списку отображения. Это не позволяет пользователю взаимодействовать с ними как с объектами отображения (DisplayObject). Соответственно, все возможности объектов отображения Flash плеера: вращение, смешивание, фильтры и прочие не применимы к 3-мерным объектам.

С точки зрения ActionScript-разработчика вы будете взаимодействовать с двумя основными объектами для работы с 3D — Stage3D и Context3D и все запросы 3-мерного содержимого от Flash плеера будут создаваться вами.

Но что произойдет если драйвер видеокарты не поддерживается? Вы получите пустой черный экран с игнорированием ошибки? Flash плеер вернет объект Context3D и обработает его, но вся обработка будет осуществляться уже средствами CPU. Для достижения этого мы будем полагаться на очень быструю визуализацию средствами CPU от TransGaming Inc., названную SwiftShader. Хорошая новость в том, что даже когда визуализация будет средствами CPU, она всё-равно будет раз в 10 быстрее, чем используемая сейчас во Flash Player 10.1. Таким образом можно ожидать значительного прироста производительности даже при софтверном обсчете.

Вся прелесть API Molehill в том, что вам не нужно беспокоиться о том как это всё происходит. Не имеет значения где исполняется приложение на PC или мобильной платформе, посредством OpenGL, DirectX или SwiftShader. Все детали будут скрыты для вас как для разработчика. Вы будете работать только с API, не вдаваясь в детали выбора "железа".

Важно помнить, что API Molehill не использует фиксированный поток функций. Он использует программируемый поток, который позволяет вам работать с вершинными и фрагментными шейдерами для того, чтобы показать что-то на экране. Для этого вы загружаете шейдеры как низкоуровневый Adobe Graphics Assembly Language (AGAL) байт-код, используя класс ByteArray, в видео-карту. И здесь у вас, как у разработчика, есть две возможности: или работать с шейдерами на низком уровне, уровне ассемблера (это требует хорошего понимания работы шейдеров), или посредством высокоуровневого языка, например Pixel Bender 3D, что более удобно и понятно при написании и компиляции соответствующих байткодов AGAL.

Для отображения ваших треугольников вы будете работать с объектами VertexBuffer3D и IndexBuffer3D, передавая их в шейдер. После того как шейдер написан вы передаете его в видеокарту посредством объекта Program3D. Обычно вершинные шейдеры обрабатывают местоположение вершин отображаемых треугольников, а фрагментные (пиксельные) шейдеры обрабатывают пиксели текстур или внешний вид этих треугольников.

Вершинные и пиксельные шейдеры

В завершении, эти объекты передаются объекту Context3D.

Взаимодействие объектов с API Molehill

Как легко заметить, API Molehill очень низкоуровневый и предназначен для опытных программистов, работающих с 3-мерным содержимым. Но, конечно, есть и такие, кто предпочитают более высокоуровневые средства — фреймверки и API. Среди этих средств можно выделить: Alternativa3D, Flare3D, Away3D, Sophie3D, Yogurt3D и множество других, часть которых уже поддерживают функциональность Molehill.

5 комментариев:

Анонимный комментирует...

cool

Анонимный комментирует...

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

Анонимный комментирует...

К сожалению вынужден согласиться. Движки под это все сырые, а весь функционал "притянут за уши". Смысла в 3D игре в браузере не вижу, т.к. чем дольше играешь, тем больше нагрузка. Попытался писать на этом... Печальный опыт. Дошел до хваленых шейдеров... Нарвался на ассемблер. Короче директ в помощь и хватит извращаться.

Анонимный комментирует...

полностью не согласен с вашим мнением, должно-быть нехватка опыта...

PixeL комментирует...

Очень не хотелось бы холивара. Практического смысла в нем совсем не много или нет совсем. Давайте забъем. :)

Отправить комментарий