Stage3D был представлен в Adobe Flash Player 11.0 и AIR 3.0 для того, чтобы облегчить ускорение GPU 3D-контента в приложениях Flash [1] [6] Во Flash Player 10 и более ранних версиях 3D Flash-приложения должны были полностью рендерить 3D-графику на CPU . Flash Player 10 поддерживал ограниченную форму поддержки ускорения GPU для материалов в API, называемом Pixel Bender . [1] [7]
Шейдеры графического процессора в Stage3D выражены на языке Adobe Graphics Assembly Language (AGAL). [8] : 57 [9] Объекты Stage3D отходят от традиционной модели рендеринга SWF тем, что их нельзя добавлять в списки отображения SWF ; вместо этого их необходимо создавать с помощью ActionScript . [1] [8] : 25
Поскольку Stage3D — это низкоуровневая библиотека, которую может быть утомительно использовать напрямую, на ее основе были построены некоторые высокоуровневые 3D- и 2D-библиотеки, чтобы извлечь выгоду из более высокой производительности, которую она обеспечивает. Неполный список библиотек и игровых движков, использующих ее, включает: Unreal Engine 3, [10] [11] Away3D 4, [5] CopperCube , [12] Flare3D , [13] Starling , [14] : vii ND2D или Adobe Labs' Proscenium. [15] Аналогично, 3D-приложения WebGL могут быть созданы с помощью three.js , высокоуровневой библиотеки, похожей на эти. [5] Away3D и Starling были окрещены как официальные компоненты Adobe Gaming SDK. [16] [17]
История
В 2011 году был выпущен Flash Player 11, а вместе с ним и первая версия Stage3D, обеспечивающая ускоренный на GPU 3D-рендеринг для Flash-приложений и игр на настольных платформах, таких как Microsoft Windows и Mac OS X. [1]
В марте 2012 года был выпущен Flash Player 11.2, который включил поддержку Stage3D/GPU на платформах Android и iOS. Игры, использующие API Stage3D, будут работать без изменений на этих мобильных платформах. [18]
В июне 2012 года был выпущен Flash Player 11.3, обеспечивающий прогрессивную потоковую передачу текстурных карт Stage3D, что обеспечивает более высокую производительность и время запуска игр и приложений, использующих Stage3D. [18]
В августе 2012 года был выпущен Flash Player 11.4, который увеличил количество поддерживаемых видеокарт с аппаратным ускорением до 2006 и разрешил использовать альфа-каналы для сжатых текстур Stage3D. [18]
В марте 2012 года Adobe объявила, что Stage3D станет частью премиум-функций Flash Player (начиная с версии Flash Player 11.2) и, таким образом, не будет полностью бесплатным для разработчиков, а будет основан на схеме распределения доходов. [19] [20] Различные известные члены сообщества Flash возражали против этого изменения, называя его «налогом на скорость». [19]
В январе 2013 года компания Adobe классифицировала все премиум-функции как общедоступные и могла свободно использоваться в приложениях Flash без необходимости получения лицензии или роялти от разработчиков или издателей. [2]
В сентябре 2012 года был выпущен Flash Player 11.4, позволяющий играм ориентироваться на «ограниченные профили», включающие старые графические чипы, которые не поддерживали все функции Stage3D. [21]
В апреле 2013 года был выпущен Flash Player 11.7, который поддерживал 16-битные текстурные карты для контента Stage3D, что позволило сократить использование памяти и улучшить управление памятью. [18]
В июле 2013 года был выпущен Flash Player 11.8, который увеличил максимальный размер текстурной карты до 4096 x 4096, в дополнение к поддержке прямоугольных (неквадратных) текстурных карт для контента Stage3D. Это позволило повысить детализацию текстурных карт и создать более крупные текстурные атласы, обеспечивающие лучшую производительность. [18]
Начиная с 2014 года, ускорение GPU было удалено в Flash Player 11.8 и выше для скриптов Pixel Bender. Pixel Bender была старой технологией для написания высокопроизводительных фильтров обработки изображений на базе CPU. Это нарушило ряд менее обеспеченных проектов, включая Scratch MIT , которые не смогли найти рабочую силу для быстрого перекодирования своих приложений. [22] [23]
Функции
Stage3D состоит из следующих компонентов:
Unified API — унифицированный API ActionScript 3 для управления памятью текстур, затенением вершин, затенением пикселей и рендерингом сеток. Прозрачно выполняется с использованием OpenGL (на Mac OS X и Linux ) и DirectX (на Microsoft Windows ).
Ускоренный рендеринг на GPU — интегрированная поддержка графических карт производства NVidia, AMD и Intel, [3] Черный список для несовместимых графических карт.
Ускоренный рендеринг ЦП — интегрированный резервный программный рендерер с использованием SwiftShader для систем с отсутствующими или несовместимыми видеокартами.
AGAL (Adobe Graphics Assembly Language) — язык для написания шейдеров (программ, работающих на графическом процессоре), которые можно преобразовать в шейдеры OpenGL GLSL и шейдеры DirectX HLSL с помощью Flash Player.
ATF (Adobe Texture Format) — формат текстур , позволяющий преобразовывать текстуры в соответствующие форматы текстур, зависящие от платформы, например DXT на Windows и MacOS, PVRTC на iOS. [14] : 47–48 [24]
Stage3D поддерживается следующими компонентами:
XC API — «премиум-функции» для Flash Player, состоящие из высокоскоростных кодов операций манипулирования памятью (известных как «Alchemy» ) и API Stage3D.
CrossBridge — набор инструментов для кросс-компиляции, позволяющий компилировать 3D-игры или игровые движки на базе OpenGL для запуска во Flash Player.
Adobe Scout — визуальный профилировщик для Flash-контента, работающего на настольном компьютере или мобильном устройстве. Scout обеспечивает глубокое профилирование контента Stage3D с помощью следующих интегрированных функций: [25]
Предварительный просмотр Stage3D — просмотр текущего заднего буфера исполняемого содержимого Stage3D [25]
Запись Stage3D — захват каждой команды Stage3D, выполняемой Flash-контентом, и ее повторное воспроизведение/пошаговое выполнение выполненных команд [25]
Использование памяти графического процессора — профилирование использования памяти текстур с разбивкой в реальном времени [25]
Редактор программ Stage3D — Интерактивно изменяйте записанные команды Stage3D и смотрите, как это влияет на рендеринг. Редактируйте код AGAL для вершинных и фрагментных программ, выполняемых каждым вызовом отрисовки. [25]
АГАЛ
Adobe Graphics Assembly Language (AGAL) — язык ассемблера для написания шейдеров графических процессоров . [26] AGAL был изобретен Adobe для предоставления унифицированного языка шейдеров для всех платформ. [26] Программы AGAL пишутся вручную с использованием низкоуровневых кодов операций и регистров . [26] Программы AGAL компилируются в байт-код, который затем встраивается в фильмы Flash SWF . [26] Этот байт-код AGAL автоматически компилируется в шейдеры OpenGL GLSL и шейдеры DirectX HLSL с помощью Adobe Flash Player , в зависимости от платформы. [26]
С помощью AGAL разработчики могут писать шейдеры, которые преобразуют 3D-модели на GPU ( вершинный шейдер ), и шейдеры, которые визуализируют сложные динамические эффекты освещения на GPU ( пиксельный шейдер ). AGAL также позволяет выполнять высококачественную визуализацию текстур с помощью mip-текстурирования . [ 27] AGAL широко используется в игровых движках Flash , таких как Away3D и Flare3D, для различных эффектов. AGAL обычно используется для обеспечения динамического освещения , расширенного динамического диапазона (HDR), альфа-маскирования , многопроходного рендеринга, отображения смещения и отображения окружения . [28] [29] Flare3D расширяет AGAL с помощью собственного языка шейдеров, называемого FLSL (FLare3D Shader Language), который упрощает написание программ шейдеров. [29] HLAG — еще один пример высокоуровневого языка шейдеров, который компилируется в AGAL. [30]
При портировании 3D-видеоигр на C++ для воспроизведения в Adobe Flash Player разработчики должны перевести традиционные шейдеры HLSL и GLSL в AGAL. [31] Код видеоигры на C++ можно преобразовать в совместимый с Flash код с помощью CrossBridge .
^ Джозеф Лабрек (2011). Что нового в Adobe AIR 3. O'Reilly Media, Inc. стр. 17–26. ISBN978-1-4493-1108-7.
^ Реми Арно (2011). «3D в веб-браузере». В Эрик Лендьел (ред.). Game Engine Gems 2. CRC Press. стр. 207–212. ISBN978-1-56881-437-7.
^ аб Кристер Кайтила (2011). Adobe Flash 11 Stage3D (Molehill) Руководство для начинающих по программированию игр . ISBN Packt Publishing Ltd.978-1-84969-169-7.
^ Adobe Flash Player 11.8 - Ошибка 3591185: производительность шейдера Pixel Bender резко упала в FP11.8. Закрыто как "NeverFix" Архивировано 22.04.2014 на Wayback Machine
^ abcde Начало работы с Adobe Scout, Adobe Developer Connection
^ abcde Что такое AGAL, Adobe Developer Connection
^ Mip-текстурирование для более гладких текстур в Stage3D, Adobe Developer Connection
^ Сессия: Flash to the Max! Высокопроизводительная 3D-графика в Silent Hunter Online, GDC Europe 2013
^ ab FLSL, Flare3D Wiki
^ HLAG в настоящее время находится в стадии альфа-тестирования, веб-сайт инструмента HLAG
^ Crytek, Silent Hunter Online рассказывают о последних дополнениях к GDC Europe 2013, Gamasutra , «Движок рендеринга консоли C++ в Adobe Flash с использованием Actionscript/Stage3D и AGAL для графических эффектов, таких как рендеринг океана»