Zkušenosti s vývojem 3D prezentace v Silverlight

 

Silverlight prozatím nepodporuje žádný nízkoúrovňový přístup k grafické kartě ani vysokoúrovňové API pro zobrazení 3d modelů. Dnešní běžné procesory jsou však natolik výkonné, že není problém zobrazovat relativně složité 3d modely i bez podpory grafické karty. Silverlight pro toto vytváří ideální podmínky, díky použití .NET a kompilaci MSIL do nativního kódu, umožňuje dosáhnou výpočetního výkonu blížícího se nativním aplikacím.

Z pohledu programátora je absence hardwarové karty velice zajímavá, je to malý krok do minulosti, díky omezenému výkonu řešíte podobné problémy jako tvůrci starých počítačových her, které jsou nám velkou inspirací. Jste donuceni podvádět, snažit se vytvořit reálnou iluzi.

imageExistuje několik opensource projektů zaměřených na zobrazování 3d objektů v Silverlight. Nejpokročilejsím je asi Balder (https://balder.codeplex.com/). Dálším známým je Kit3D (https://kit3d.codeplex.com/).

Silverlight nabízí i částečnou podporu hardwarové akcelerace, od verze 2.0 je možné použít na obrázek perspektivní transformaci, která je akcelerována. Tato vlastnost jde použít i pro zobrazení 3d modelů a projekt Kit3D toho extenzivně využívá. U detailních modelů je nutná režie pro tuto metodu příliš velká a i přes hardwarovou akceleraci je pomalejší než softwarová imagerasterizace, kterou používá Balder. Akceleraci lze však perfektně využít pro zabrazení plochy, nebo jednoduchého modelu s detailní texturou, je ideální pro zobrazení skyboxu. Skybox je metoda vypůjčená právě z počítačových her. Okolní prostředí je tvořeno krychlí s texturou, která je vykreslena vždy tak, aby střed kamery byl ve středu krychle, uživatel nemá šanci postřehnout hranu krychle, protože se hýbe s ním.image

Pokud se potýkáme s omezeným výkonem, je velmi důležité vytvořit uživatelské prostředí které by přes to reagovalo přijatelně rychle.

Na příklad: pokud uživatel imageotáčí modelem vypínáme anti-aliasing a používáme rychlejší filtrování textur, aby pohyb byl plynulejší, naopak pokud se model zastaví, můžeme ho vykreslit jak nejlépe dokážeme bez ohledu na rychlost. Zároveň je však zbytečné kreslit ten samý obrázek znovu a znovu a zatěžovat zbytečně procesor, proto je vykreslování přerušeno, když se model nehýbe. Zbývá více výkonu pro ovládací prvky.

Na rychlost vykreslení modelu má velký vliv to, jak je uspořádaný a rozdělený, pouhým správným seřazením jeho částí a vykreslováním směrem od kamery lze dosáhnout překvapivých výsledků.

Autorem textu je Petr Novague

Filip