Форум Flasher.ru
Ближайшие курсы в Школе RealTime
Список интенсивных курсов: [см.]  
  
Специальные предложения: [см.]  
  
 
Блоги Правила Справка Пользователи Календарь Поиск рулит! Сообщения за день Все разделы прочитаны
 

Вернуться   Форум Flasher.ru > Блоги > skyman000

Рейтинг: 5.00. Голосов: 10.

Molehill 3D API вводный курс статей. часть 1. Что такое Molehill?

Запись от skyman000 размещена 28.05.2011 в 17:16
Обновил(-а) skyman000 28.05.2011 в 20:24

Содержание:

Molehill 3D API вводный курс статей. часть 1. Что такое Molehill?
Molehill 3D API вводный курс статей. часть 2. Усложнение задач.
Molehill 3D API вводный курс статей. часть 3. Работа с матрицами.
Molehill 3D API вводный курс статей. часть 4. Первый 3D объект с простой текстурой.

Недавно узнал что flash готовит релиз Molehill 3D API. Однако четкой документации рассказывающей о всех тонкостях этой новой технологии с начала и до конца в Интернете я так и не нашел. Кое-какая Документация есть но она разбросана по Интернету. Так что для подробного изучения этой новой технологии я решил перевести несколько статей.
Буду рад если и вам это пригодится. Все эти статьи ориентированны на таких же как я новичков в работе с шейдерами и DirectX asm.

Хочу предупредить, что раньше я никогда не работал с DirectX, OpenGL и шейдерми. Но я писал простые 3D движки на java script и AS 3 до поддержки Molehill. Так что имею представление что такое bsp деревья трассировка лучей и т.д.
Да и конечно я в курсе о появление поддержки Molehill в фреймворках типа альтернативы и Away3d однако не смотря на это мне интересней самому разобраться как все работает. А в готовых движках той же альтернативы исподники нигде не выкладываются.

В своих статьях я использовал материалы с различных сайтов в том числе русскоязычных. Вот некоторые источники:
http://www.bytearray.org/?p=2555
http://pixxxxxel.blogspot.com/2011/03/molehill_20.html
http://labs.jam3.ca/2011/03/molehill-getting-started/
Конструктивная критика и дополнения по поводу возможных неточностей в переводе только приветствуется.
Начнем.

Что такое Molehill?
“Molehill’ это кодовое название для набора API в ActionScript 3 использующих аппаратное ускорение видеокарты в среде Adobe Flash Player и Adobe AIR, что позволяет быстро рендерить сложные 3D сцены в среде Flash. Molehill будет опиратся на DirectX9 в Windows и OpenGL в MacOS и Linux. В мобильных платформах вроде Android, Molehill будет использовать OpenGL ES2. Технически, Molehill API в действительно использует программируемые шейдеры, и дает возможность использовать шейдеры вершин и фрагментные шейдеры. а так же анимацию костей, настоящий Z-буфер и многое другое.

С точки зрения производительности, Adobe Flash Player 10.1 сегодня, может рендерить тысячи полигонов без использывания z-буфера с частотой примерно 30 Hz. Но используя Molehill API разработчики могут рендерить сотни тысяч полигонов в HD разрешении используя Z-буффер с частотой примерно 60 Hz.
Как это работает.

Существующие 2.5D API во Flash Player 10.1 не устарели и никуда не исчезли они остались но не используют GPU(аппаратное) ускорение. Вы сами в праве решать в зависимости от сложности вашего проекта какие API вы будите использовать 2.5D без аппаратного ускорения или Molehill с аппаратным ускорением

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

Так как 3D-контент находится позади обычной сцены Flash, он не является частью списка отображения, Context3D и Stage3D НЕ наследуют свойств и методов класса Displayobject. Поэтому помните, что вы не можете взаимодействовать с ними как с любым DisplayObject, не можете поворачивать их, изменять режимы наложения, добавлять фильтры и не можете добавлять другие эффекты.

Следующий рисунок дает общее представление о вышесказанном.



Как вы видите 2D контент может перекрывать сверху 3D контент, но 3d никогда не сможет перекрыть 2d. Однако, мы предоставим вам необходимые API позволяющие преобразовать ваш 3D контент в формат BitmapData, если это потребуется. С точки зрения ActionScript API, как разработчик вы будите использывать два главных обьекта- Stage3D и Context3D. Вы делаете запрос Flash Player о создании экземпляра Context3D и обьект создается для вас. Что ж тут вы можете спросить, а что случится если мой GPU драйвер не совместим с Molehill API, я что получу просто черный экран?

В таком случае Flash Player всеравно создаст для вас Context3D обьект но используя уже внутреннее резервное программное обеспечение, так что вы получите тот же API но работающий на CPU. На этот крайний случай мы полагаемся на очень быстрый процессор растеризации от TransGaming Inc. который называется “SwiftShader”. Так что даже используя, программное ускорение, SwiftShader все равно будет работать в 10 раз быстрее чем сегодняшние технологии растеризации в Flash Player 10.1, так что вы получите хорошую производительность даже на программном ускорителе.


Для того чтоб узнать точно поддерживает ли ваша видео карта аппаратное ускорение Molehill
Скачайте этот файл
http://zp.amsnet.pl/cdragan/software/DumpCaps.exe
при запуске в директории с файлом появляется файл devcaps.txt
найдите в этом файле 2 строки
VERTEX_SHADER_VERSION и PIXEL_SHADER_VERSION
Нас интересуют последние 4 цифры напротив этих двух строк
Если они равны или больше 0200 значит вы счастливый обладатель карты с полной поддержкой Molehill
(у меня лично карта Molehill не поддерживает =/ )


Вся красота “Molehill” API заключается в том что вам не нужно беспокоится о том что происходит внутри программы. Вам как разработчику будет все равно какие технологии будет использывать ваша программа - DirectX, OpenGL или SwiftShader. Вам не надо думать о том что 3D API для OpenGL на стационарных пк отличается от OpenGL ES 2 на мобильных платформах. Теперь для вас как для разработчика Molehill все привязано к одному API.

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

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

На следующем рисунке показана разница между двумя типами шейдеров:



Как было сказано выше Molehill не использует фиксированных функций растеризации так что разработчики могут создавать свои собственные шейдеры и полностью контролировать процесс растеризации. Что ж давайте детально рассмотрим создание шейдеров в Molehill.

Чтоб проиллюстрировать эту идею, рассмотрим простой пример низкоуровневого программирования шейдеров для рисования одного полигона. Здесь мы будем работать на уровне пикселей с Molehill.

Примечание: Для компиляции AGAL байт-кода
скачайте AGALMiniAssembler тут.
http://www.bytearray.org/wp-content/...embler/com.zip

Разъяснение некоторых определений используемых в контексте MoleHill:

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

Context3D
Обьект Stage3D содержит Обьект Context3D. думайте об этом та же как о … Bitmap и BitmapData. Все работы выполняемые с BitmapData похожи схожи с работами над Context3D.

VertextBuffer3D
Обьект Context3D содержит объекты VertexBuffer3D. В сущьности объект VertexBuffer3D это просто набор точек в пространстве иногда с указанием цвета для каждой точки. VertexBuffer3D содержит массив типа Vector.<Number> который определяет позицию каждой точки фигуры и ее цвет. (подробности ниже)

IndexBuffer3D
Буфер индексов (IndexBuffer3D) содержит массив типа Vector.<uint> который показывает в какой последовательности надо рисовать треугольники используя Буфер вершин (VertexBuffer3D). Другими словами буфер индексов проводит линии между разбросанными точками в буфере вершин и рисует треугольники.

Program3D
Program3D это программа которая работает с буфером вершин (VertexBuffer3D) и изменяет его если надо. Program3D содержит в себе две программы шейдеров позволяющие менять позицию каждой вершины и ее цвет на сцене. Эти две маленькие программки называются шейдер вершин (VertexShader) и шейдер фрагментов (FragmentShader).

VertexShader
Шейдер вершин это маленькая программка написанная на языке AGAL которая будет изменять положение вершин наших треугольников. Например если вы хотите масштабировать повернуть или переместить ваши треугольники вам следует использовать шейдер вершин что бы сделать это.

FragmentShader
Шейдер фрагментов это другая маленькая программка написанная на том же AGAL которая будет изменять цвет пикселей внутри наших полигонов. Например если вы хотите что бы ващи полигоны имели оттенок красного вы можете написать небольшой шейдер фрагментов для этого.

AGAL
AGAL очень низкоуровневый язык предназначенный для написания ваших шейдеров вершин и фрагментов. Этот язык самое сердце MoleHill.

Диаграмма показывающая связь всех частей


Когда вы будете использовать Molehill в ваших проектах вам необходимо будет разбить процесс создания 3D на 2 этапа:
1. Настройка параметров 3D сцены
2. Покадровая отрисовка изображения

На этапе настройки параметров 3D сцены мы делаем следующие шаги:
1. Получаем ссылку на обьект Context3D из ссылки на обьект Stage3D
2. Задаем настройки обьекта Context3D
3. Создаем буффер вершин
4. Создаем буффер индексов
5. Загружаем в видео память наш буфер вершин
6. Загружаем в видео память наш буфер индексов
7. Пишем и компилим шейдер вершин
8. Пишем и компилим шейдер фрагментов
9. Загружаем два этих шейдера в видео карту
10. Создаем цикл при событии ENTER_FRAME который будет покадрово отрисовывать изображение

Цикл отрисовки изображения:
1. Очищаем содержимое кадра Context3D
2. Указываем программу шейдеров Program3D которой мы будем пользоваться в этом кадре
3. Устанавливаем формат данных в буфере вершин
4. Меняем позиции вершин если надо
5. Рисуем треугольники
6. Показываем их на экране

Что ж а теперь давайте рассмотрим код.
Этап настройки параметров 3D сцены заключен в функцию “onGotContext”.
Отдельную функцию приходится создавать из-за того что обьект Context3D создается не мгновенно. Требуется некоторое время для его создания. Поэтому мы ставим прослушку события Event.CONTEXT3D_CREATE которое показывает что обьект Context3D создан и пора запускать функцию “onGotContext”

Цикл отрисовки изображения проще всего привязать к событию ENTER_FRAME
что мы и сделаем в функции “onRenderLoop”.
Наслаждайтесь… Я старался написать столько комментариев, сколько это вообще возможно.

Для всех проектов я использую FlashDevelop
Подробнее о настройке Molehill в FlashDevelop изложено в этой статье
http://pixxxxxel.blogspot.com/2011/0...-molehill.html

вот исходник файла проекта
Вложения
Тип файла: rar MoleHill2.rar (5.3 Кб, 455 просмотров)
Всего комментариев 11

Комментарии

Старый 28.05.2011 20:29 Котяра вне форума
Котяра
 
Аватар для Котяра
Вот. Технические прения закончены) теперь по делу:
Очень нужные статьи. Молодец.
Старый 28.05.2011 20:36 skyman000 вне форума
skyman000
 
Аватар для skyman000
Спасиб =)
Изначально переводил для себя и сокурсника. Захотели вот игрульку 3d сделать. Но самому написать свой движок куда приятнее чем размещать ссылки на сайт той же альтернативы у себя в проекте. Так что цикл этих статей будет подводить именно к созданию своего 3D Фреймворка.

Отрывок вот из следующих статей =)

Цитата:
Проект Simple Engine

Условия и задачи
Создание простейшего фреймворка для работы с 3d контентом.
Распространение Simple Engine в виде открытого подробно комментируемого исходного кода. Simple Engine прежде всего будет предназначен для обучения новоиспеченных Molehill’меров.

Приоритетные задачи:
1. Составить код который был бы максимально понятен
2. В то же время код должен работать как можно быстрее.
Обновил(-а) skyman000 28.05.2011 в 20:39
Старый 29.05.2011 00:06 gr_crd вне форума
gr_crd
 
Аватар для gr_crd
о, Здорово!!!
очень актуально сейчас! как только закончу баловаться с drawTriangles, буду читать
Старый 29.05.2011 00:21 dimarik вне форума
dimarik
 
Аватар для dimarik
Гугол-транслате съел много запятых.
Старый 30.05.2011 17:01 tsarapkabel вне форума
tsarapkabel
 
Аватар для tsarapkabel
Основная инструкция оказалась в комментариях исходника. Спасибо за работу!
Старый 30.07.2011 02:43 Vishapakahr вне форума
Vishapakahr
а кагда будет финальный релиз для away3d ? тут так много ошибок в каждом примере приходится уберать ошибки в ручную ! http://www.freeclickgames.org/3d/Okozo2.html вот например на настройку флеш бюлдер сдк и away3d потратил много времени прежде чем сделать этот пример http://away3d.com/example/away3d_4_alpha_basics_demo_1
Старый 05.11.2012 15:07 wvxvw вне форума
wvxvw
 
Аватар для wvxvw
Пожалуйста, если не сложно, выложите исходники в чем-то другом, вместо RAR3. Нечем открыть
Старый 05.11.2012 23:33 zuxul вне форума
zuxul
wvxvw, 7zip, вроде бы, умеет открывать rar3.
Старый 05.11.2012 23:37 wvxvw вне форума
wvxvw
 
Аватар для wvxvw
Неа, ни 7z ни Gna! не могут, пока что...
Старый 06.11.2012 00:40 zuxul вне форума
zuxul
А где Вы нашли файл в rar3?
Файл "MoleHill2.rar" мой 7zip открывает.
Старый 06.11.2012 01:00 wvxvw вне форума
wvxvw
 
Аватар для wvxvw
rar3 - это все тот же rar, просто у формата тоже есть свои версии:
Код:
$ 7z x ./MoleHill2.rar 

7-Zip [64] 9.20  Copyright (c) 1999-2010 Igor Pavlov  2010-11-18
p7zip Version 9.20 (locale=en_US.UTF-8,Utf16=on,HugeFiles=on,8 CPUs)

Processing archive: ./MoleHill2.rar

Error: Can not open file as archive
А, блин, в Федоре 7z какой-то непонятно откуда, зато нашелся unrar. Все, проблема, вобщем-то решилась.
 

 


Часовой пояс GMT +4, время: 13:13.


Copyright © 1999-2008 Flasher.ru. All rights reserved.
Работает на vBulletin®. Copyright ©2000 - 2024, Jelsoft Enterprises Ltd. Перевод: zCarot
Администрация сайта не несёт ответственности за любую предоставленную посетителями информацию. Подробнее см. Правила.