A vegyes valóság teljesítményének ismertetése

Ez a cikk bevezetést nyújt az alkalmazás teljesítményének Mixed Reality megértésébe. A felhasználói élmény nagy mértékben csökkenhet, ha az alkalmazás nem optimális képkocka-sebességgel fut. Hologramok instabilnak tűnik, és a környezet fejkövetése pontatlan lesz, ami rossz felhasználói élményt eredményezhet. A teljesítményt a vegyes valóságon való fejlesztés első osztályú funkciójaként kell tekinteni, nem pedig egy lengyel feladatban.

Nemrég kiadottunk egy Quality Fundamentals (Minőségi alapok) nevű alkalmazást, amely a két alkalmazás gyakori teljesítmény-, tervezési és környezeti problémáit és HoloLens foglalkozik. Ez az alkalmazás remek vizuális bemutató az alábbi tartalmakhoz.

Az egyes célplatformok nagy teljesítményre vonatkozó képkocka-értékeit az alábbiakban soroljuk fel.

Platform Célkeret sebessége
HoloLens 60 PERC
Windows Mixed Reality Ultra Pc 90 FT
Windows Mixed Reality Pc 60 PERC

Az alábbi keretrendszer a cél képkocka-sebességek eléréséhez ajánlott eljárásokat ismerteti. A Unity-környezetben a képkocka-sebesség mérésére és javítására vonatkozó tippekért javasoljuk, hogy olvassa el a Unity teljesítményével kapcsolatos javaslatokat.

A teljesítménnyel kapcsolatos szűk keresztmetszetek ismertetése

Ha az alkalmazás képkocka-rátával rendelkezik, az első lépés az, hogy elemezze és megértse az alkalmazás számításigényes helyét. A jelenet rendereléséért két elsődleges processzor felelős: a CPU és a GPU, amelyek az alkalmazás különböző aspektusait Mixed Reality kezelik. A szűk keresztmetszetek három fő helye a következő:

  1. Alkalmazásszál – CPU - Felelős az alkalmazáslogikáért, beleértve a bemenetek feldolgozását, animációkat, fizikai adatokat és más alkalmazáslogikát.
  2. Render Thread – CPU to GPU – Felelős a rajzolási hívások GPU-hoz való beküldéséért. Ha az alkalmazás egy objektumot, például egy kockát vagy modellt szeretne renderelni, ez a szál kérést küld a GPU-nak a műveletek végrehajtásához.
  3. GPU – A leggyakrabban az alkalmazás grafikus folyamatának kezelésével alakítja át a 3D-adatokat (modelleket, textúraokat stb.) képpontokké. Végső soron egy 2D-s képet hoz létre, amely elküld az eszköz képernyőjére.

A képkocka élettartama

Általában HoloLens alkalmazások GPU-kötést fognak tartalmazni, de nem mindig. Az alábbi eszközökkel és technikákkal megértheti, hogy az adott alkalmazás hol van szűk keresztmetszetben.

Az alkalmazás elemzése

Számos eszközzel megértheti a teljesítményprofilt és a lehetséges szűk keresztmetszeteket a vegyes valóság alkalmazásában.

Az alábbiakban néhány gyakori eszközt olvashat, amelyek segítségével részletes profilkészítési információkat gyűjthet az alkalmazásról:

Profil létrehozása bármilyen környezetben

Az egyik módszer annak megállapítására, hogy az alkalmazás GPU-hoz vagy CPU-hoz kötött- e, hogy csökkenti a renderelési célkimenet felbontását. A kiszámított képpontok számának csökkentésével csökkentheti a GPU-terhelést. Az eszköz kisebb textúra lesz renderelve, majd a minta felfelé jelennek meg a végső kép megjelenítéséhez.

A renderelési felbontás csökkentésével, ha:

  1. Az alkalmazás képkocka-rátának növekedése, akkor valószínűleg GPU-kötéssel dolgozik
  2. Az alkalmazás képkocka-sebessége változatlan, akkor valószínűleg processzorhoz kötött

Megjegyzés

A Unity lehetővé teszi, hogy az XRSettings.renderViewportScale tulajdonság segítségével futtatáskor egyszerűen módosítsa az alkalmazás renderelési célfeloldását. Az eszközön megjelenő végső kép felbontása rögzített. A platform mintát fog venni az alacsonyabb felbontású kimenetből, hogy nagyobb felbontású képet készítsen a megjelenítéshez.

UnityEngine.XR.XRSettings.renderScale = 0.7f;

Az alkalmazás fejlesztése

Processzorteljesítményre vonatkozó javaslatok

A legtöbb munka a CPU vegyes valóságú alkalmazásában általában magában foglalja a jelenet "szimulációját" és az alkalmazáslogika feldolgozását. Az optimalizálás a következő területeket célozza meg:

  • Animációk
  • Fizika
  • Memóriafoglalások
  • Összetett algoritmusok (pl. inverz kinematika, útvonalkeresés)

GPU-teljesítményre vonatkozó javaslatok

A sávszélesség és a kitöltési sebesség ismertetése

Amikor a GPU-ra renderel egy keretet, az alkalmazást vagy a memória sávszélessége, vagy a kitöltési sebesség köti össze.

  • A memória sávszélessége az olvasási és írási sebesség, amit a GPU képes a memóriából
    • A sávszélesség-korlátozások azonosításához csökkentse a textúra minőségét, és ellenőrizze, hogy javult-e a képkocka-sebesség.
    • A Unityben módosítsa a Textúraminőséget az Edit > (Szerkesztés) Project Gépház Quality > (Minőség) Gépház.
  • A kitöltési sebesség a GPU által másodpercenként rajzolható képpontokat jelenti.
    • A kitöltési sebesség korlátozásának azonosításához csökkentse a megjelenítési felbontást, és ellenőrizze, hogy javult-e a képkocka-sebesség.
    • A Unityben használja az XRSettings.renderViewportScale tulajdonságot

A memória sávszélessége általában a következő optimalizálásokat foglalja magában:

  1. Alacsonyabb textúrafelbontások
  2. Kevesebb textúra használata (normals, specular és így tovább)

A kitöltési sebesség célja a végső renderelt képponthoz kiszámítható műveletek számának csökkentése, beleértve a következőket:

  1. Renderelni/feldolgoznira használható objektumok száma
  2. Műveletek száma árnyékolónként
  3. A gpu-fázisok száma a végső eredményig (geometriai árnyékolók, utófeldolgozási hatások és így tovább)
  4. Renderelendő képpontok száma (megjelenítési felbontás)

Sokszögek számának csökkentése

A nagyobb sokszögszám több műveletet eredményez a GPU esetében, így a sokszögek számának csökkentése csökkenti a renderelési időt. A geometria árnyékolását más tényezők is költségesnek határozzák meg, de a sokszög száma a legegyszerűbb metrika annak meghatározásához, hogy mennyi munka kell egy jelenet rendereléséhez.

Korlát túllépte a korlátot

Magas áttűnés akkor fordul elő, ha több objektum jelenik meg, de nem jelenik meg a képernyőn, mert egy eltolást törlő objektum elrejti őket. Imagine egy olyan fal, amely mögött objektumok vannak. Az összes geometria renderelésre lenne feldolgozva, de csak az átlátszatlan falat kell renderelni, ami szükségtelen műveleteket okoz.

Shader

Az árnyékolók kis méretű programok, amelyek a GPU-ban futnak, és két fontos lépést is végre kell tenni a renderelés során:

  1. Annak meghatározása, hogy mely csúcsokat kell rajzolni, és hogy hol vannak a képernyőtérben (a csúcspont árnyékolója)
    • A csúcs árnyékoló minden hálóban csúcsonként van végrehajtva.
  2. Az egyes képpontok színének meghatározása (a Képpont árnyékoló)
    • A képpontonkénti árnyékolót a rendszer képpontonként végrehajtja, és a geometria rendereli a cél renderelési textúra felé.

Az árnyékolók általában számos átalakítást és megvilágítási számítást végeznek. Bár az összetett megvilágítási modellek, árnyékok és más műveletek kiváló eredményeket hozhatnak, ára van. Az árnyékolókban kiszámított műveletek számának csökkentése nagy mértékben csökkentheti a GPU keretenkénti használatát.

A Shader kódolási javaslatai
  • Amikor csak lehetséges, használjon bilineáris szűrést
  • Rendezze át a kifejezéseket úgy, hogy a MAD belső értékeket használják szorzás és összeadás egyidejűleg
  • A lehető legnagyobb előreszámítás a CPU-on, és állandókként való bérlete az anyagnak
  • A műveletek képpontárnyalóról csúcsértékárnyalóra való áthelyezésének előnyben való előnyben való működése
    • A csúcsok száma általában sokkal kisebb, mint a képpontok száma (720p 921 600 képpont, 1080p 2 073 600 képpont és így tovább)

GPU-szakaszok eltávolítása

Az utófeldolgozási hatások költségesek lehetnek, és növelik az alkalmazás kitöltési sebességét, beleértve az olyan aliasolási technikákat, mint az MSAA. A HoloLens javasoljuk, hogy kerülje ezeket a technikákat és további árnyékoló szakaszokat, például a geometriát, a vázat és a számítási árnyékolókat.

Memória – javaslatok

A túlzott memóriafoglalási és -elosztási műveletek inkonzisztens teljesítményt, lefagyott képkockákat és más, hátrányos viselkedést eredményezhetnek. A Unityben való fejlesztéskor különösen fontos a memóriával kapcsolatos szempontokat figyelembe venni, mivel a memóriakezelést a szemétgyűjtő vezérli.

Objektumkészletezés

Az objektumkészletezés egy népszerű technika, amely csökkenti az objektumok folyamatos lefoglalásának és kiosztásának költségeit. Ez az azonos objektumok nagy készletének allokálására, valamint az inaktív, rendelkezésre álló példányok a készletből való újrahasználására történik az objektumok folyamatos ki- és megsemmisítése helyett. Az objektumkészletek nagyszerűen használhatók újrafelhasználható összetevőkhöz, amelyek élettartama változó az alkalmazások során.

Lásd még