Android Programjaim

Android, Flutter/Dart, Kotlin, Java, Unity, HarmonyOS

GLES20 Android és FBO optimalizáció jegyzet

2013. július 03. 11:27 - lacas8282

- culling mindenhol
- compressed textures (max 1024) .pkm (ETC1)
- shaderekben csínján bánni a sin,cos, stb math-al, ezt inkább CPU-val végeztetni
- shaderekben kevés sampler használat, texture2D
- shaderekben nem támogatja minden (a legtöbb) gpu a ciklusokat, ezért ezt kerüljük el
- lowp, mediump, és highp
- kevesebb TRI használat nagyobb textúráknál és FBO-nál okozhat nagyobb FPS-t
- FBO méretcsökkentése felére legalább egy 1200as device-en. (Quality.MEDIUM), ennél kisebb már csúnyán néz ki
- közelebb nyilván kevesebb lesz az FPS :) ezért ne nagyon zoomoljunk kamerával nagyon rá semmire
- kerüljük a discard használatát, performance hit
- shadow stb realtime, nem túl szép és szintén performance hit
- általában a bake-elt dolgok a jók, tehát árnyék, fény, de van ahol kell számított fény

++

  1. Draw opaque objects first.

  2. Next draw objects that require alpha testing (or in an OpenGL ES 2.0 based application, objects that require the use of discard in the fragment shader). Note that these operations have a performance penalty, as described in “Avoid Alpha Test and Discard.”

  3. Finally, draw alpha-blended objects.

++

teszt adatok:

Test device: Galaxy Note2, android 4.1+

FBO-val MEDIUM Q.-val custom shaderrel (animációk, )
- 22-27 fps 6430 tris

FBO nélkül
- 31-50 fps 6430 tris

nyilván az objektumok közelségétől/sokaságától, valamint a shaderekben lévő textúrák számától/fényektől és alkalmazásuktól is számít

plusz nyilván ez egy nem agyonoptimalizált kód, Rajawali framework

komment

Chromatic Aberration demo Rajawaliban

2013. március 29. 10:34 - lacas8282


Rajawaliztam kicsit megint, írtam egy saját kis filtert, ami nem PostProcessing-et valósít meg, hanem sima Processinget akárhány elemre.

1, Ez kb úgy néz ki, hogy normál módban kirajzolod 3D-ben azokat a dolgokat amikre nem akarsz custom filtert tenni.
2, Létrehozzuk a mProcessingFilterController osztályt, majd hozzáadjuk a ProcessingFilter-eket. A ProcessingFilter osztály egy FBOControllert használ, amibe belerakhatunk egy saját filtert. (pl egy chromatic aberration-t)
3, Ezután hozzáadjuk a processingFilter.setRenderObjects(objects); -el azokat az elemeket, amikre szeretnénk a filtert létrehozni. (Természetesen ezeket nem rajzoljuk ki a képernyőre, csak az FBO-ra)
4, Kirajzoljuk a 3D kirajzolás után az FBO-kban lévő képet (ezt ugye 2D Camera-val egy Plane-re és Blending-el)

Lehetőség van elviekben akárhány filtert létrehozni 1-1 objectre, vagy csak a shaderben több fázisban rendereljük ki. Fontos tényező, hogy a mobil eszközök nem nagyon bírják a fragment cuccokat (főleg blur, vagy light scattering megvalósítása, pláne ha a device screen size nagyobb mint 1000 pixel, ekkor ugyanis a GPU megizzad és laggolás jelentkezik) ezért a ProcessingQuality minőségét célszerű MEDIUM-ra vagy LOW-ra rakni.

https://github.com/lacasrac/switch_custom_fbo_on_rajawali

komment

Rajawali újra

2013. február 11. 12:29 - lacas8282

https://github.com/MasDennis/Rajawali

Féléve kb nem hallottam róla, azóta viszont sokat javult

Pár napja kicsit átírtam benne a VertexAnimation3D-t, mert nem egészen úgy működik, ahogy elvárná az ember. (nem volt benne frame-ek közti normális interpoláció, csak a kulcsok közti _nem_ interpoláció)

memóriát még mindig eszik kicsit, de foglaljuk össze miket tud:

-shaderezés nagyon jól megy már
-filterezés is, rögtön írtam vagy 6-ot, ami működött
-3DSMaxParser iszonyat lassú normálokkal, tehát vagy ha nem kellenek a normálok akkor vegyük ki, vagy serializeáljuk a modellt és úgy töltsük be

-ez igaz az animációkra is
-egy statikus norm modell a normal calculation-nak köszönhetően Note2-n is, 2-3 mperc mire betölt, ez tarthatatlan

-szérializálva a betöltés már 500ms, vagy közeli érték, tehát elérhető egy 5-10szeres gyorsulás

-live wallpaper: az animációkat állítsuk le háttérben, mert cpu-t eszik


komment
süti beállítások módosítása