Jazyk Cg od NVIDIE: nová éra v programování grafických efektů

Programovat grafické efekty na úrovni hardwaru není žádný med a vývojáři her jistě mnohokrát zatoužili po jazyku vyšší úrovně, který by umožnil snadnější psaní pixel a vertex shaderů. NVIDIA jim nyní vychází vstříc a zdá se, že ve svém jazyce Cg přináší grafickému světu nový a pevný standard.

Historie se opakuje
Když se objevily první mikroprocesory, neexistovaly pro ně žádné jazyky vyšší úrovně (Pascal, C, Basic apod.). Prvním programovacím prostředkem, na němž se muselo teprve vybudovat všechno ostatní, byl tzv. assembler – jazyk, který má převelice blízko k vlastnímu strojovému kódu daného procesoru (strojovým kódem rozumíme elementární instrukce ve formě čísel, které procesor umí přímo vykonat). Pod každým příkazem vyššího programovacího jazyka se obvykle skrývá velké množství (desítky, stovky, ale i tisíce) jednotlivých strojových instrukcí procesoru. Dnešní nástroje, jejichž pomocí vznikají typické aplikační programy a hry, poskytují vývojářům možnosti na hony vzdálené primitivnosti strojového kódu.

Programovat v assembleru není žádný med a dělá se to v podstatě jen tehdy, když není pro daný procesor žádný vyšší jazyk k dispozici, nebo když je potřeba docílit maximální rychlosti programu. Proto bylo jen otázkou času, kdy se objeví něco komfortnějšího i pro grafické procesory (GPU) s programovatelnými enginy. První vlaštovka právě přilétá, je (nic překvapivého) z dílny agilní NVIDIE, ale bude použitelná na všech grafických čipech kompatibilních s DirectX 8.

Tři tisková prohlášení
Minulý týden přišla NVIDIA se třemi separátními zprávami, které položily solidní základnu pro nástup nové éry programování. V první z nich představila vlastní jazyk Cg – C pro grafiku, jehož účelem je podstatně zjednodušit tvorbu zvláštních efektů na moderních grafických kartách. Syntakticky je, jak už název napovídá, Cg velmi podobné klasickému Céčku – většina datových typů je stejná, stejně se deklarují i proměnné a funkce atd. Výhody vyššího jazyka nad dosud používaným assemblerem jsou zřejmé – kromě jiných můžeme jmenovat rychlejší a efektivnější vývoj a ladění, optimalizaci prováděnou kompilátorem a přenositelnost programu na větší množství hardwarových Cg aneb grafické Céčko od NVIDIEplatforem. Cg vznikalo v úzké spolupráci s Microsoftem – je kompatibilní s jeho jazykem High Level Shading Language (ohlášen na Game Developers Conference 2002 v dubnu tohoto roku), který bude podporován rozhraním DirectX 9.0.

Na následujícím obrázku vidíte grafické efekty, kterých lze docílit pomocí shaderů.

 Zatímco první tisková zpráva se týkala věci abstraktní, tedy specifikace jazyka, druhé oznámení se již týkalo konkrétního produktu: kompilátoru jazyka Cg. Tento kompilátor je ústředním bodem vývojového prostředí NVIDIA Cg Toolkit 1.0, jehož veřejnou betaverzi si lze zdarma stáhnout ze stránek NVIDIE (je k dispozici pro Windows a Linux). Pro neprogramátory: kompilátor je program, který ze zdrojového kódu (typicky textový soubor) vytvoří cílový kód – v případě kompilátoru jazyka Cg (CgC) se jedná o výstup v assembleru pro grafický čip. CgC podporuje tyto významné platformy: Windows (DirectX 8, DirectX 9, OpenGL), Linux (OpenGL), Mac OS X (OpenGL) a Xbox. NVIDIA zřídila speciální stránku http://www.cgshaders.org, která se má stát oblíbeným návštěvním místem všech tvůrců pixelvertex shaderů – měli by zde najít volně použitelná dílka jiných autorů (a případně sami přispět), články na související témata a soutěže o zajímavé ceny.

Ve třetí tiskové zprávě se NVIDIA chlubí, a s největší pravděpodobností oprávněně, širokou podporou, které se jejím výše popsaným iniciativám dostává u vývojářů her a jiných grafických aplikací. Mnoho významných osobností se vyjádřilo o jazyku Cg a jeho kompilátoru od NVIDIE velmi pochvalně; specifikace Cg se vyvíjela již od druhé polovinyCg aneb grafické Céčko od NVIDIE roku 2001, NVIDIA oslovila stovky vývojářů a ti přispěli ke konečné podobě jazyka svými připomínkami a návrhy. Z herních firem, které podporují Cg, můžeme jmenovat například Bethesdu, Bioware, Blizzard, Codemasters, Core Design, Croteam, Electronic Arts, Ensemble Studios, Fox Interactive, Ion Storm, Lionhead, Lithtech, Massive, Maxis, Novalogic, Relic, Sony nebo Valve. Cg se však uplatní i v „seriózních“ grafických aplikacích firem jako je Alias|Wavefront Maya, Discreet 3DS MAX, SOFTIMAGE|XSI nebo NewTek LightWave 3D.

Základ byl položen
NVIDIA učinila další významný krok, aby upevnila pozici světového grafického lídra – a toto není (jen) reklamní slogan, ale evidentní fakt. Grafické procesory dozrály do stadia, kdy si již zaslouží programovací prostředek vyšší úrovně, a NVIDIA nezaváhala a dodala ho. Zavádí tak v jazyku Cg standard, který se jistě prosadí, a jeho specifikaci si NVIDIA podrží pevně ve svých rukách. Ostatní výrobci grafických čipů se tak buď budou muset smířit s tím, že jejich produkty jsou ve většině případů programovány „konkurenčním jazykem“, nebo se pokusí vytvořit nějaký gPascal či něco podobného. Nemusí však mít strach, že by kompilátor Cg generoval pro jejich čipy nějak nevýhodný kód – a pokud by jim to tak náhodou připadalo, nic jim nebrání vytvořit vlastní překladač Cg, který bude perfektně optimalizovat právě na míru jejich hardwaru.