OpenSceneGraph

OpenSceneGraph (OSG) je open source API pre tvorbu 3D grafických aplikácií so širokým spektrom uplatnenia od vedeckej vizualizácie, vizuálnej simulácie, cez počítačové hry až po virtuálnu realitu.

Ide o multiplatformný toolkit postavený nad OpenGL. Vývojovým jazykom je primárne C++, existujú však aj prepojenia na jazyky Java, Python a Lua.

História 
Projekt OpenSceneGraph začal pre vlastnú potrebu tvoriť Don Burns roku 1998 v prostredí operačného systému Linux. Následne v roku 1999 sa k nemu pripojil Robert Osfield, ktorý pracoval na prenesení hotových súčastí na platformu Microsoft Windows. V septembri 1999 boli zdrojové súbory uvoľnené ako open source a vznikla aj oficiálna stránka projektu. Ku koncu roka prebral Robert vedúcu úlohu a začal rozsiahly refactoring celej kódovej banky, snažiac sa o modernizáciu, zahrnutie najnovších štandardov C++ a čo možno najlepšie využitie návrhových vzorov.

V apríli 2001 vzhľadom na rozrastajúcu sa komunitu užívateľov a čoraz väčší záujem verejnosti po celom svete, Robert Osﬁeld založil OpenSceneGraph Professional Services, službu poskytujúcu školenia, dlhodobú komerčnú podporu a konzultačné služby vývojárom aplikácií postavených na OSG. Došlo tak k úplnej profesionalizácii projektu.

Prvou oficiálnou "celou" stabilnou verziou bola verzia 1.0 vydaná roku 2005. Následne roku 2007 prišla rozšírená verzia 2.0, pridávajúca okrem iného podporu viacjadrových a multi-gpu systémov, niekoľko dôležitých NodeKits a prechod k využívaniu unifikovaného multiplatformného build systému CMake. V tom čase sa tiež objavili prvé knihy a oficiálne užívateľské príručky.

Projekt rýchlo rástol a stával sa čoraz populárnejším. Pod aktuálnou stabilnou verziou (3.0.1, vydaná 31.7.2012) je už podpísaných viac ako 480 prispievateľov a oficiálny mailing list projektu obsahuje tisíce mien.

Vlastnosti 
Základom OpenSceneGraph-u je myšlienka tzv. grafu scény. Ide o dátovú štruktúru, ktorá usporadúva logickú a priestorovú štruktúru grafickej scény acyklickým grafom. Scéna je hierarchicky organizovaná do stromovej štruktúry s uzlami s rôznym počtom potomkov. Jednotlivé uzly môžu predstavovať buďto jednotlivé objekty v scéne, skupiny objektov, množiny transformácií, ktoré majú byť aplikované na potomkov alebo pridružené pomocné informácie. Listy potom predstavujú jednotlivé modely objektov, teda samotnú geometriu scény.

Vzájomné vzťahy objektov zachytené týmto usporiadaním umožňujú jednoduchú implementáciu niektorých algoritmov riešiacich viditeľnosť v scéne a optimalizáciu zobrazovania, čím sa zvyšuje výkonnosť a zjednodušuje napr. práca s priehľadnosťou a blending všeobecne.

V aktuálnej verzii ponúka knižnica okrem iného
 Robustnú platformovo nezávislú implementáciu pokročilého grafu scény
 Podpora OpenGL 1.0 – 4.2, OpenGL ES 1.0 a 2.0
 Podpora OpenGL Shading Language
 Vysokú výkonnosť
 View frustum, occlusion a small feature culling
 Level of Detail
 Najnovšie rozšírenia OpenGL
 Viacvláknové aplikácie
 State sorting, lazy state updating
 Podpora širokého spektra 2D a 3D formátov
 Podpora práce s kvalitnými antialiasovanými fontmi
 Prácu s rozsiahlymi terénmi
 Podporu pokročilých particle systémov
 Natívnu integráciu s okennými systémami hlavných platforiem a jednoduchú previazateľnosť s cross-platform GUI toolkitmi

Ďalšie smerovanie 
V ďalších verziách je zámerom vývojárov najmä rozšíriť podporu OpenGL ES, zobrazovanie tieňov a vylepšiť prácu s volumetrickými dátami. Tiež by malo dôjsť k rozšíreniu NodeKits pre prácu s 3D GUI.

Súčasti 
Balík knižníc OSG je možné rozdeliť do niekoľkých kategórií. Základom je súbor takzvaných Core knižníc (osg, OpenThreads, osgUtil a osgDB), doplnená knižnicami a nástrojmi pre zobrazovanie, prácu s okennými systémami a GUI (osgViewer, osgGA), Nodekits, zásuvnými modulmi a exportérmi pre modelovacie nástroje (3DSMax, Maya, Blender) a zväčša komunitnými projektmi zabezpečujúcimi podporu ďalších programovacích jazykov okrem C++.

Core 
Jadro OpenSceneGraphu tvoria štyri základné moduly – osg, osgDB, osgUtil a OpenThreads.

osg zabezpečuje konštrukciu a manipuláciu scene graphu. Jej súčasťou sú triedy reprezentujúce rôzne typy uzlov grafu scény, samotnú geometriu, abstrakciu nad OpenGL stavovým strojom, geometrické transformácie a matematické triedy pre vektorové a maticové operácie v 3D priestore. Dôležitou súčasťou je aj funkcionalita pokročilej správy pamäte.

Pre prácu s najrozšírenejšími 2D a 3D súborovými formátmi, ako aj abstrakciu I/O zariadení slúži modul osgDB.

osgUtil je renderovacím backendom, starajúcim sa o prechod grafom scény, culling a transformáciu do série volaní OpenGL. Poskytuje tiež základné možností manipulácie s objektami v scéne, tzv. picking.

Platformovo nezávislé, minimálne a kompletné objektovo orientované vláknové rozhranie poskytuje knižnica OpenThreads.

osgViewer 
Knižnica osgViewer poskytuje pohodlnú a rýchlu cestu vizualizácie zostaveného scene graphu. Predstavuje tiež platformne nezávislú abstrakciu nad prácou s rôznymi okennými systémami.

NodeKits 
Súčasťou balíka OSG je aj množina takzvaných NodeKits, čo sú hotové riešenia netriviálnych, často sa objavujúcich problémov, resp. pokročilejších komponent 3D grafických aplikácií. Najdôležitejšími sú:
 osgAnimation – Práca s kostrovými modelmi, ich animácia a morphing.
 osgFX – Špeciálne efekty a postprocessing obrazu.
 osgManipulator – Interaktívne 3D ovládanie.
 osgParticle – Pokročilá práca s particle systémami.
 osgQt – Integrácia s Qt toolkitom a začlenenie prvkov QtGUI do OSG aplikácií.
 osgShadow – Framework pre techniky zobrazovania tieňov.
 osgTerrain – Zobrazovanie rozsiahlych terénov.
 osgText – Kvalitné zobrazovanie antialiasovaných fontov, TrueType a FreeType fonty.
 osgVolume – Volume rendering a práca s volumetrickými dátami.
 osgWidget – Tvorba jednoduchých užívateľských rozhraní.

Technológie 
OpenSceneGraph je napísaný v štandarde jazyka C++, využívajúc možnosti STL (Standard Template Library) a v čo najvyššej možnej miere uplatňujúc návrhové vzory OOP. Okrem C++ existujú prepojenia na jazyky Java (JavaOSG), Python (pyOSG), Lua (osgLua, resp. osgToy) a C#/.Net (osgDotNet).

Celá knižnica je koncipovaná modulárne s dôrazom na upraviteľnosť a jednoduchú rozšíriteľnosť.

Projekt je vystavaný nad OpenGL, v súčasnosti podporujúc možnosti OpenGL 1.0 – 4.2, ako aj OpenGL ES do verzie 2.0. Zabezpečená je tak ako kompatibilita so starším hardvérom, tak aj sprístupnenie možností poskytovaných tým najnovším.

Platformy 
OpenSceneGraph v súčasnosti podporuje vývoj pre všetky dôležité operačné systémy, medzi inými Linux, MS Windows, Mac OS X, FreeBSD, IRIX, či Solaris. Od verzie 3.0.0 je knižnica tiež dostupná pre mobilné platformy iOS a Android.

Výhody a využiteľnosť 
Knižnica OpenSceneGraph svojim užívateľom poskytuje množstvo výhod oproti práci priamo s nízkoúrovňovými grafickými rozhraniami, ako je OpenGL.

Medzi tie najdôležitejšie patria:

Výkon 
Vďaka zahrnutiu pokročilých vlastností OpenGL (state sorting, vertex buffer objekty, podpora GLSL), pokročilých metód riešenia viditeľnosti v 3D scéne (view frustum, small feature, occlusion culling), či Level of Detail priamo v jadre knižnice ide o jeden z najvýkonnejších zobrazovacích nástrojov.

Produktivita 
Jadro grafu scény zapuzdruje väčšinu funkcionality OpenGL vrátane najnovších rozšírení, poskytuje optimalizáciu pri renderovaní (culling, sorting) a celý súbor doplnkových knižníc, ktoré umožňujú vytvárať veľmi rýchlo vysoko výkonné grafické aplikácie. Vývojár sa tak nemusí sústrediť na nízkoúrovňový kód.

Zavádzače databáz 
Súčasťou jadra OSG je databázová knižnica osgDB, umožňujúca jednoduchú a rýchlu prácu s množstvom multimediálnych súborových formátov. V súčasnosti sa skladá z viac ako päťdesiatich rôznych pluginov pre spracúvanie 3D databázových a obrazových formátov.

Medzi podporované 3D formáty patria napríklad COLLADA, LightWave (.lwo), Wavefront (.obj), OpenFlight (.flt), 3D Studio MAX (.3ds), DirectX (.x) a mnoho ďalších. OpenSceneGraph tiež umožňuje využitie natívneho ASCII .osg formátu.

Obrazové formáty zahŕňajú .rgb, .gif, .jpg, .png, .tiff, .pic, .bmp, .dds, .tga a quicktime.

V neposlednom rade je tiež nutné spomenúť podporu FreeType a TrueType, ako aj obrazových (.txf) fontov.

Prenositeľnosť 
Jadro knižnice je navrhnuté s dôrazom na minimalizáciu závislosti na konkrétnej platforme, spoliehajúc sa v zásade iba na štandardné C++ a OpenGL. Dôležitá je tiež nezávislosť na konkrétnom okennom systéme. Prostredníctvom osgViewer je zabezpečená natívna podpora Win32 (MS Windows), X11 (Unix-based systémy) a Carbon (OSX). Jednoducho je tiež možné knižnicu prepojiť s ďalšími okennými a GUI toolkitmi, ako sú Qt, WxWidgets, GLUT, FLTK, SDL, Cocoa a MFL.

Škálovateľnosť 
Vďaka podpore viacerých grafických kontextov a silne optimalizovaným prechodom grafom scény, ako aj rozsiahlej podpore viacvláknových aplikácií je možné OpenSceneGraph používať na širokej škále zariadení, od mobilných až po najnovšie viacjadrové, multi-gpu systémy.

Prístupnosť 
Súčasťou distribúcie OSG je aj rozsiahla zbierka príkladov a demonštračných aplikácií, názorne prezentujúcich jednotlivé pokročilé možnosti knižnice, ako aj vzorový dataset obsahujúci modely, textúry a ďalšie zdroje využiteľné pri rýchlom prototypovaní aplikácií.

Existuje tiež niekoľko kníh, od začiatočníckych až po profesionálne, rozsiahla kvalitná dokumentácia a živá komunita vývojárov a užívateľov. K dispozícii je tiež profesionálna technická podpora pre komerčné produkty.

Použitie 
OpenSceneGraph samotný neposkytuje žiadne nadstavby pre tvorbu hernej logiky, ide o vizualizačný a animačný nástroj. Pre tvorbu herných aplikácií alebo takzvaných "serious games" existuje niekoľko kompletných enginov, najznámejším z ktorých je pravdepodobne Delta3D, využívajúcich OpenSceneGraph práve ako základ pre grafický rendering.

Zaujímavými projektmi postavenými nad OSG sú napríklad Virtual Terrain Project, alebo ViewTec TerrainView. Medzi užívateľmi môžeme ďalej nájsť spoločnosti ako Boeing, NASA, FlightGear, Norcontrol a ďalšie.

Pozri aj 
 OpenGL
 Delta3D
 OGRE
 Irrlicht Engine

Referencie 

Softvér
Počítačová grafika