Az elmúlt napokban a fizikai engine (PhysX) terhelésével / terhelhetőségének növelésével foglalkoztam vagyis hogyan lehet több száz dinamikus fizikai objektumot szerepeltetni egy jelenetben.
A jelenetben statikus trimeshek - melyek egy összetett belső tér részei voltak - és dinamikus konvex testek szerepeltek ez utóbbiak száma 400-600 között mozgott. A cél a láthatóan nem mozgó objektumok kiszűrése és inaktiválása volt.
Első gondolatként az API beépített függvényeit nézi át az ember és meg is találja az IsSleeping (vagy hozzá hasonló) utasításokat. Ezek azonban a gyakorlatban legtöbbször nem válnak be több ok miatt is. Számos paraméter befolyásolja - amelyek jelentésével tisztában kell lennünk pl. küszöbértékektől, az altatás típusától, a szimuláció léptetése - és szinte mindig az tapasztalható, hogy hiába tűnik mozdulatlannak a tárgy azonban mégsem kerül altatásra.
Második próbálkozásként próbáljuk figyelni a sebességeket (lineáris és anguláris) ill. ezek csökkenését. Itt már jelentkezhet az a probléma, hogy bár az anguláris sebesség zérus a test még tovább akarna forogni, mert csak pillanatnyilag került egyensúlyi helyzetbe. Ezt a helyzetet elhanyagolva sem sikerül azonban a kívánt hatást elérni.
Harmadik lehetőség lehet az elmozdulás és anguláris sebesség vizsgálata. Az elmozdulás vizsgálata már közelebb visz minket a lehetséges megoldáshoz, de az anguláris sebesség még most összezavarja a képet.
Negyedik lehetőségként tehát adott, hogy az elmozdulást kell vizsgálnunk, de hogyan vizsgáljuk az orientációt. Lehet vizsgálni az orientációt kvaternió formájában azonban érdemesebb kihasználni, hogy az API-tól lekérdezhető ugyanez világ koordinátában lévő mátrixként is.
Ennek segítségével az elmozdulást és elforgatást egyetlen vizsgálatba lehet sűríteni és az eredmény magáért beszél: csak azon tárgyak lesznek aktívak, amelyek láthatóan mozognak. Ebből következik, hogy az engine sok, egymástól független tárggyal terhelhetővé válik hiszen feleslegesen tárgyakat nem vonunk be a szimulációba.
És még mielőtt arra gondolnánk, hogy ez a vizsgálat mennyire lehet költséges vegyük figyelembe, hogy jóval olcsóbb, mintha felesleges objektumok terhelnék a fizikai engine-t.