PDA

Просмотр полной версии : Растеризация для увеличения производительности


Akopalipsis
06.01.2014, 23:30
Всегда с жадностью вчитывался в статьи и темы посвящённые растру и ждал время..
Сейчас оно наступает и мне нужно брать направление, но самостоятельно сложно, по этому я хочу спросить несколько вопросов, посвящённые теме.
Первое что меня интересует - приходится ли в реальных условиях, прибегать к самостоятельному рендерингу в bitmap? Спрашиваю так по тому, что есть Starling и возможно все им и пользуются, плюс у него доступ к cpu,
которым, на сколько мне известно, не кто больше из 2D не обладает ( если я не прав, то скажите, что ещё есть ).
Вторым пунктом у меня это эффекты, которые рисуются вектором ( классом Graphics ), которым замены вроде нет. У меня по этому вопросу очень большая прореха. Вроде читал, что если рисовать эти эффекты в битмапу, то производительность возрастает, но когда вдумываюсь, то получается, что я нарисовал эффект, на который уже потратил мощьность для вычисления и потом ещё его в битмапу.. это ещё плюс производительности.
Остановлюсь пока на этом, так как для начала нужно в этом разобраться.

dark256
07.01.2014, 03:42
Мало чего понял....
В ряде случаев графика в растре - быстрее. В других случаях - лучше битмап.
Соотв оно рисуется сразу либо так, либо эдак...

samana
07.01.2014, 04:08
получается, что я нарисовал эффект, на который уже потратил мощьность для вычисления и потом ещё его в битмапу.. это ещё плюс производительности.
Но ведь если вы сделаете из вашего вектора с эффектами - битмап, то компьютеру больше не придётся при рендере вырисовывать всё это заново каждый раз. По этому лучше один раз потратить мощность на создание растровой картинки, чем тратить постоянно, пересчитывая вектора и наложенные фильтры.
Конечно ситуации разные бывают, смотря что вам нужно.

Akopalipsis
07.01.2014, 14:34
Спасибо Вам за то, что взялись мне объяснять, теперь я просто так не отстану :)
В ряде случаев графика в растре - быстрее. В других случаях - лучше битмап.
А можно немного подробнее, про растровую графику я догадываюсь, наверное имеется ввиду - не программно рисовать, а загружать jpg, png, хотя это то наверное битмап.. Но вот про битмап не понимаю. Что имеется ввиду - загружать в формате bmp или ещё что-то? И в каких случаях одно предпочтительней другого?
то компьютеру больше не придётся при рендере вырисовывать всё это заново каждый раз
Теперь кажется понял, если оставить в векторе, то каждый кадр все рисуется с самого начала, а если перерисовать в битмапу... а битмапу FP не перерисовывает каждый кадр с вектора? Или он её кеширует и берёт из кеша?
И ещё пару вопросов- с точки зрения "правильности", все отдельные растровые изображения или перерисованные в битмапу вектора, лучше рисовать в одну битмап?
И если у меня так же есть какое-то кол-во картинок или вектора и мне нужно его перемещать, то лучше будет изменять координаты перерисовки в общую битмапу чем двигать сам перерисовываемый источник?
И ещё, если мне надо вращать и искажать, то чем будет более целесообразно манипулировать - первоисточником ( он может быть как растром так и вектором ) или опять так перерисовывать исходя из расчетов искажения? И при искажении вектора лучше будет искажать уже битмапу в которую он перерисован?

samana
07.01.2014, 15:37
Когда вы делаете draw объекта, то по сути это скриншот, который уже не имеет никакого отношения к тому объекту, который он изобразил. Вы можете и удалить векторный вариант, но ведь картинка (битмап) останется, так как это отдельный объект уже. А нарисовать на экране растровую картинку, где уже известны все пиксели - намного быстрее, чем создать векторную фигуру по формулам и внутренне перевести её в раст, чтобы опять же отобразить на экране. Ведь любой вектор переводится в раст, перед отображением, так как монитор это такие же клеточки.

Akopalipsis
07.01.2014, 18:27
samana Спасибо! Пока вроде все понятно, если что спрошу :)

Hauts
08.01.2014, 11:02
Akopalipsis, у меня в блоге единственная запись — может полезно будет.

А вообще нужно отталкиваться от задачи.

Первое что меня интересует - приходится ли в реальных условиях, прибегать к самостоятельному рендерингу в bitmap?

— Условия же разные бывают.

Мне приходится. Но только на этапе разработки. То есть на каждом старте приложения происходит отрисовка текстур в битмапдаты и создание текстурных атласов, так намного быстрее тестировать, добавлять / изменять графику. В момент, когда я решу, что графика полностью готова — я запущу приложение с флагом для сохранения текстур: как только все отрисуются (все битмапдаты), я получу архив с пнгэшками. Их и буду использовать в релиз-версии приложения, без отрисовок и т.п.

И ещё пару вопросов- с точки зрения "правильности", все отдельные растровые изображения или перерисованные в битмапу вектора, лучше рисовать в одну битмап?

Есть отличная статья про это, там объясняется: http://gamespoweredby.com/blog/2013/12/recommendations-for-adobe-air-mobile-developers/

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

И ещё, если мне надо вращать и искажать, то чем будет более целесообразно манипулировать - первоисточником ( он может быть как растром так и вектором ) или опять так перерисовывать исходя из расчетов искажения? И при искажении вектора лучше будет искажать уже битмапу в которую он перерисован?

Мне кажется, что в большинстве случаев достаточно будет искажать старлинг-дисплей-обжект, но не изменять его текстурку или что-то заново отрисовывать.

P.S.: на сколько мне известно, не кто больше

Akopalipsis
08.01.2014, 22:47
Hauts Большое Спасибо! Вашу статью в блоге я уже давно прочёл, за что Вам ещё отдельное Спасибо!
Чтобы разбавить спокойный вечер, спрошу вот что - я всегда хотел спросить, да и вот в этой теме впервые спросил, есть ли аналоги Starling.
Когда я его чуть-чуть смотрел, мне он показался очень грамотным и полноценным,но чересчур Starling'овым. Все в нем должно быть его, родное,
а значит не какого собственного творчества. И вот я узнаю о Genome2D, смотрю его доки и у меня появился другой вопрос - не получится ли так, что недостаток опыта, который скажется на грамотности построения логики, тех же компонентов, событий и прочего, что сведёт всю его первозданность и скорость, на нет? На сколько он сложен и предрасположен к собственному творчеству? Какое у Вас о нем мнение?

Hauts
09.01.2014, 10:50
Akopalipsis, я с Genome2D не работал.

Причина в том, что я считаю, что проблемы нужно решать по мере поступления. И пока я не сталкивался с теми проблемами производительности или архитектуры старлинга, которые не мог бы решить, вследствие чего, пришлось бы переходить на Genome2D.

Если меня не устраивает скорость — я анализирую, пробую и исправляю. И, как мне подсказывает опыт, — в подавляющем большинстве случаев проблемы на моей стороне (неправильная организация DO, логические ошибки и т.д.).

А вообще — я же прекрасно понимаю, что если я сталкиваюсь с трудностями или непониманием причин, то, скорее всего, виноват в этом я. Над старлингом работает куча очень крутых спецов своего дела. Несравненно умнее и опытнее меня. Поэтому и "грешить" на старлинг, если я написал g-код, не имеет смысла, пока не перепробую все, что только придумаю для решения ситуации.

В общем, наверное, совет: не хватайтесь за всё сразу. Начните со старлинга. Придумайте какую-нибудь тестовую игрушку и реализуйте её до той степени готовности, пока она вам самому не начнёт нравиться.

К примеру, тот же биллиард. Вид сверху, пошаговые удары. Там и математика, и рендеринг. Если стараться сделать хорошо — уверяю, столкнетесь с кучей совсем неочевидных проблем. Решив которые, вероятно, прокачаете скилл.

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

— Вопросы подобного характера, по своей сути не подразумевают однозначного ответа. Но проще считать, что "да", именно вашими ошибками вы погубите производительность. Тогда и добавится еще один пункт "правил" разработки — "пишите грамотно, качественно и столько раз, пока не добьётесь цели".

На сколько он сложен и предрасположен к собственному творчеству?
— Вопрос аналогичного характера, как и предыдущий. Думаю, что вы с трудом найдете такую задачу, решение которой с Genome2D будет чрезмерно сложным, а вот её же решение на нативных дисплейобджектах будет вполне простым. "Сложным" — имею в виду с точки зрения возможностей / архитектуры. Так-то почти любая более-менее осмысленная задача составляет сложность.

Akopalipsis
09.01.2014, 14:32
Hauts Спасибо за объяснение!