Форум Flasher.ru

Форум Flasher.ru (http://www.flasher.ru/forum/index.php)
-   Общие вопросы о Flash (не затрагивающие ActionScript) (http://www.flasher.ru/forum/forumdisplay.php?f=60)
-   -   Растеризация для увеличения производительности (http://www.flasher.ru/forum/showthread.php?t=206002)

Akopalipsis 06.01.2014 23:30

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

dark256 07.01.2014 03:42

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

samana 07.01.2014 04:08

Цитата:

Сообщение от Akopalipsis (Сообщение 1156619)
получается, что я нарисовал эффект, на который уже потратил мощьность для вычисления и потом ещё его в битмапу.. это ещё плюс производительности.

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

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/...le-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 Спасибо за объяснение!


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

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