OpenGL ES към Metal - Разлики в тесните места в производителността

Поддържам собствена персонализирана 2D библиотека - написана на Objective-C / OpenGL ES 2.0 - от известно време, за да я използвам в личните си проекти (не работа). Също така пробвах cocos2d и SpriteKit от време на време, но в крайна сметка се примирих с „преоткриване на колелото“, т.к.

  1. Забавно е,
  2. От гледна точка на знания, предпочитам да бъда човекът, който може да кодира графична библиотека, отколкото просто човек, който може да използва такава,
  3. Неограничени възможности за персонализиране.

Сега прехвърлям кодовата си база към Swift и (освен всички разлики в дизайна, които възникват при преминаване към език, където наследяването на класове е на заден план пред протоколите и т.н.) си мислех, че докато го правя, Трябва да обмисля и преминаването към Metalа. Ако не друго, в името на надеждността за бъдещето (също така, аз съм за изучаването на нови технологии и честно казано, OpenGL/OpenGL ES са ужасно претрупана торба с „наследство“ и обратна съвместимост).

Моята библиотека е проектирана около всички видове специфични за OpenGL (ES) затруднения в производителността: Използване на атласи на текстури и консолидация на мрежи за намаляване на повикванията за изтегляне, рендиране на непрозрачни спрайтове първо и полупрозрачни накрая (подредени отзад напред) и т.н.

Въпросът ми е: Кои от тези съображения все още се отнасят за Metal и кои дори не трябва да си правя труда да прилагам (защото вече не са проблем с производителността)?


person Nicolas Miari    schedule 05.11.2015    source източник


Отговори (1)


Metal е наличен само на подмножеството от IOS устройства, които поддържат OpenGLES3, така че бъдете честни, трябва да сравните Metal с GLES3.

Текстурни атласи и консолидация на мрежи:

С Metal цената на процесора за повиквания за изтегляне е по-ниска, отколкото при GLES3, и можете да паралелизирате настройката за повикване за изтегляне на множество нишки.

Така че това може да ви позволи да пропуснете атласирането и консолидирането ... но това са добри практики, така че би било още по-добре, ако запазите тези с Metal и използвате допълнителното процесорно време, за да правите повече неща!

Обърнете внимание, че с GLES3, като използвате инстанции и текстурни масиви, вие също трябва да можете да се отървете от атласирането и да поддържате нисък брой повиквания за изтегляне.

Първо изобразяване на непрозрачни спрайтове и накрая на полупрозрачни

Metal няма да промени абсолютно нищо в това, това е ограничение от отложеното изобразяване, базирано на плочки на PowerVR GPU, какъвто и драйвер да използвате, това няма да промени хардуера на GPU. И така или иначе изобразяването на непрозрачни преди полупрозрачни е препоръчителният начин да продължите, когато правите 3D, независимо дали използвате DirectX, OpenGL или Metal ...

Металът няма да помогне, ако сте обвързани със скоростта на запълване!

Като цяло Metal ще ви даде подобрения само от страна на процесора. Ако производителността ви е ограничена от скоростта на запълване (фрагментните шейдъри са твърде сложни, твърде много прозрачно надчертаване, твърде висока разделителна способност и т.н.), тогава ще получите абсолютно същия резултат в Metal и GLES3 (ако приемем, че сте оптимизирали внимателно шейдърите за всяка платформа).

person VB_overflow    schedule 06.11.2015