Az Unreal Engine 5 bejelentésének margójára
Május közepén bemutatásra került az első technológiai demo az Unreal Engine 5-ről. Ha valaki nem mozogna otthonosan a videójátékok világában, az Unreal Engine egy úgynevezett 3D motor, még pontosabban egy 3D keretrendszer, melynek segítségével készítenek a játékfejlesztők különböző játékokat. Az Unreal Engine negyedik verziója fut például olyan népszerű játékok alatt, mint a Tekken 7, a Gears 5 vagy éppen a Fortnite.
A technológiai demóban egy lányt látunk, aki a dokumentumfilmeket meghazudtoló realitással megjelenő barlangon halad keresztül, közben pedig az Engine fejlesztői arról beszélnek, hogy a világítást és az egyes elemek árnyékolását hogyan oldották meg.
A bemutató közepén a lány elér egy szoborhoz, a fejlesztők közben elmondják, hogy már nem szükséges lebutítani a különböző 3D modelleket ahhoz, hogy egy játék világában megjeleníthetők legyenek, és ezzel gyakorlatilag olyan szintű realizmust tudnak biztosítani, mint a filmek.
A szobor körbejárásakor elhangzik egy mondat, miszerint a szobor több, mint 33.000.000 háromszögből áll. Mit is jelent ez pontosan? A 3D objektumok mind a filmekben, mind a videójátékokban háromszögekből épülnek fel, vagyis amikor látunk egy gömböt magunk előtt az igazából nem egy gömb, hanem többszáz (vagy többezer) háromszögből kialakított gömbhöz hasonlító felület. Természetesen minél több háromszöget használunk, annál realisztikusabb lesz a felületünk.
A következő jelenetben a demo hőse továbbmegy egy terembe, ahol közel 500 példány található ugyanabból a szoborból, ami összesen 16.000.000.000 (vagyis tizenhat milliárd!) háromszöget jelent... Ezen a ponton jutott eszembe, amikor az egyik fejlesztői képzésen, junior fejlesztőként az oktató visszaküldte az elkészített alkalmazásom kódját azzal a megjegyzéssel, hogy működik, de sok felesleges kódot tartalmaz. Mai napig emlékszem, hogy ez mennyire felháborított. Nem mindegy mennyi kód van benne? Működik és kész…
Ma már tudom, hogy hát, bizony nagyon nem mindegy mennyi kód van benne. Gondoljunk csak bele, hogy jelen esetben mit eredményezne, ha a fejlesztők egy fölösleges kódsort vagy függvényhívást hagytak volna a kódban egy háromszög megrajzolásánál. Tegyük fel, hogy egy fölösleges kódhívás nem több, mint 0,000.0001 másodpercet vesz igénybe. Elenyésző, nem? Mégis, kit zavarna ennyi idő elvesztése? Na, most 16.000.000.000 háromszög megjelenítésénél ez az elenyésző hiba 1600 másodperces várakozást okozna, vagyis fél órát kellene várnunk egyetlen képkocka megjelenítésére…
Hajlamosak vagyunk azt hinni, hogy a mai korlátlannak tűnő hardvererőforrások mellett a kódoptimalizálás és a kód refaktorálás nem fontos, azonban ez közel sem igaz. Épp a rendelkezésre álló erőforrások miatt fontos, hogy a kódunk optimálisan fusson, mivel egy-egy fölösleges hívás eltüntetésével többszörösére növelhetjük a kódunk hatékonyságát.