Introduzione a API e game engine per la programmazione grafica
Transcript
Introduzione a API e game engine per la programmazione grafica
Introduzione a API e game engine per la programmazione grafica OpenGL e WebGL Davide Gadia Corso di Programmazione Grafica per il Tempo Reale Laurea Magistrale in Informatica per la Comunicazione a.a. 2013/2014 Outline • Differenze tra driver, API, game engine • Introduzione alle API per la programmazione grafica • Differenze tra Direct3D e OpenGL • Evoluzione pipeline OpengL • “Varianti” di OpenGL Programmazione Grafica: da basso a alto livello Ambienti Visuali Game engine API Driver Driver grafici • Insieme di routine che controlla Ambienti Visuali Game engine direttamente la scheda grafica • Basso livello ! ! API Driver Hardware-dependent Specifico per ogni SO • Di solito implementati da costruttori hardware API per la programmazione grafica • Application Program Interface Ambienti Visuali Game engine API Driver • Librerie di livello + alto ! Set di procedure dedicate (solo) al rendering grafico in tempo reale ! Maggiore astrazione nella implementazione e comunicazione con hardware grafico (e i suoi driver) ! Direct3D ! OpenGL Game engine • Ambienti di sviluppo completi Ambienti Visuali Game engine API Driver • Forniscono: ! IDE ! Motore di rendering ! Librerie per gestione I/O, modelli, fisica, AI … ! Tool di supporto per gestione asset e scenari ! ….. • Maggiore astrazione: ! ! ! Forte riusabilità e ottimizzazione sviluppo Indipendenza da piattaforma hardware Supporto per più API • Esempi: ! Unreal Engine 3 ! Ogre3D ! Panda3D Ambienti visuali • Riduzione scrittura codice ! Applicazione costruita tramite blocchi visuali ! ! Ambienti Visuali Game engine API Possibilità di scripting ad alto livello • Possibilità di implementare facilmente applicazioni medio-bassa difficoltà ! Driver Visual programming Target allargato anche a non-programmatori ! Designer, ecc • Esempi: ! Quartz Composer (OSX) ! Vvvv (Windows) ! Puredata/GEM (cross-platform) Direct3D o OpengL? • Sono i 2 maggiori competitors • Nascono con approcci diversi • Allo stato attuale, hanno all'incirca lo stesso livello di funzionalità e performance Direct3D • API proprietarie di Microsoft ! Parte di DirectX (che comprende API per suono, I/O, ecc) ! Solo sviluppo applicazioni Windows (desktop, mobile, Xbox) ! Nate esplicitamente per implementazione videogiochi su hardware consumer-level ! Prime versioni molto criticate, ma da versione 9 situazione migliorata ! E anche apprezzamento sviluppatori • Con introduzione pipeline programmabile ! HLSL (High Level Shading Language) OpenGL • Open Graphics Library ! mantenuta da OpenGL Architectural Review Board (ARB) ! ! Specifiche open ! ! ! ! Implementazione possibile da chiunque Cross-platform Binding per numerosi linguaggi Utilizzo per tutti gli ambiti applicativi della grafica in tempo reale ! ! ! Khronos Group Di fatto, era lo standard per gli applicativi e ambiti professionali Eredità di IrisGL, API proprietaria di SGI, da cui OpenGL derivano Solo rendering, servono librerie di terze parti per gestione di tutto il resto • Con introduzione pipeline programmabile ! GLSL (OpenGL Shading Language) Evoluzione Direct3D e OpenGL: differenze • Specifiche Direct3D decise unicamente da Microsoft ! No accesso a specifiche da terze parti ! Storicamente, questo ha portato a una API dall'evoluzione più regolare ! Ma più chiusa • OpenGL caratterizzata da supporto estensioni: ! Terze parti potevano implementare nuove funzioni non previste dallo standard ! Meccanismo di esposizione delle estenzioni alla API principali ! Possibile confusione: ! ! ! Funzioni implementate solo da un costruttore Funzioni implementate con nomi diversi da più costruttori Estensioni periodicamente valutate ed eventualmente inserite nelle nuove versioni delle specifiche Pipeline OpenGL: deprecation model • Introdotto nelle specifiche 3.0 ! Metodo usato per rimuovere funzionalità ! Necessità di semplificare e ottimizzare la pipeline ! Nonostante il rischio di intaccare in alcuni casi la retrocompatibilità (backward compatibility) Pipeline OpenGL: deprecation model • Utilizzo struttura dati context ! Contiene shaders e altri dati • Full context: ! Inclusione di tutte le funzionalità delle specifiche correnti ! Anche quelle deprecate • Forward compatible context ! ! Inclusione solo delle funzionalità non deprecate Situazione simile a versioni future delle specifiche Pipeline OpenGL: context profiles • Introduzione profili ai contesti introdotti in 3.0 ! Possibilità di ulteriore controllo delle funzionalità dei contesti • Full context: ! Core profile: ! ! Inclusione di tutte le funzionalità della specifica corrente Compatible profile: ! Inclusione di tutte le funzionalità di tutte le specifiche passate e presenti • Forward compatible context ! Core profile: ! ! Inclusione solo delle funzionalità non deprecate della specifica corrente Compatible profile: ! Non supportato Applicazione OpenGL in sintesi • Sinteticamente, ogni applicazione OpenGL effettua i seguenti passi: ! ! ! Crea gli shader Crea buffer objects e carica i dati nei buffer “Collega” i dati nei buffer objects alle variabili degli shader Altre versioni di OpenGL • “Fork” delle specifiche principali ! OpenGL ES ! WebGL OpenGL ES • OpenGL for Embedded Systems ! Smartphone, tablet, consolle portatili ! Attuale versione 3.0 ! ! Agosto 2012 Pipeline basata sulle specifiche OpenGL 3.3 ! ! Senza Geometry shader Pipeline programmabile ! GLSL ES (un sottoinsieme del linguaggio GLSL) WebGL • OpenGL ES per il Web ! API Javascript per grafica in tempo reale all'interno dei browser ! ! ! ! Attuali specifiche 1.0 ! ! ! Utilizza Canvas di HTML5 Tramite interfaccia DOM (Document Object Model) senza utilizzo plugin Marzo 2011 Ricalcano quasi completamente specifiche 2.0 delle OpenGL ES Draft specifiche 2.0 ! ! Settembre 2013 Funzionalità adeguate a quelle presenti in OpenGL ES 3.0 HTML5 • Prima idea 2004 • Primo Draft 2008 • Working draft Dicembre 2012 • Stable Recommendation prevista per 2014 • Punti principali: ! Retrocompatibilità ! Modularità ! Abbandono elementi markup superati da potenzialità CSS ! Enfasi su importanza scripting DOM ! Integrazione elementi grafici e multimediali senza plugin ! Introduzione numerose API per lo sviluppo di applicazioni Web HTML5 API HTML5 Canvas e WebGL • Applicazioni OpenGL richiedono la creazione di un rendering context ! Una finestra ! ! di solito creata tramite una chiamata ad una API di sistema O tramite librerie specifiche per GUI • WebGl usa Canvas come contesto ! Regioni renderizzabili definite all'interno di codice HTML ! API Javascript possono accedere e renderizzare la Canvas WebGL in ambiente Windows • Windows non supporta direttamente WebGL • ANGLE project ! Almost Native Graphics Layer Engine ! Chrome e Firefox ! Traduzione chiamate API OpenGL ES in chiamate Direct3D Implementazione WebGL • Programmare in OpenGL/WebGL non facile ! Basso livello, solo chiamate per rendering ! ! Necessità implementazione librerie e/o funzioni per ogni altra necessità ! ! Ripetitività di chiamate per cambiare parametri Creare una finestra, gestire input, ecc.. Oppure è necessario utilizzare altre librerie • Non immediato/veloce riuscire a concentrarsi sul contenuto/obiettivo dell'applicazione Implementazione WebGL • Utilizzo framework di (più) alto livello ! Maggiori funzionalità a disposizione nello stesso ambiente ! Classi permettono di astrarre dai dettagli di basso livello ! Integrazione di librerie per fisica ecc • Concentrazione sul contenuto • Si perde però la piena consapevolezza di “cosa sta succedendo” Implementazione WebGL • Framework per sviluppo WebGL ! Molte proposte http://www.khronos.org/webgl/wiki/User_Contributions Alcuni progetti più “robusti”, altri in fase preliminare Costante: documentazione scarsa! ! Apprendimento + legato ad esempi ! ! ! Cenni ai game engine • Game engine: SW per la implementazione di videogame Estensibile Flessibile Modulare Fornisca le varie funzionalità previste nello sviluppo di un videogame Serva come base per lo sviluppo di diversi tipi di videogame senza bisogno di grosse modifiche Cenni ai game engine • Game engine costituito da un insieme di sub-engine/tool per lo sviluppo e la gestione delle risorse Cenni ai game engine • Al variare del tipo di videogame, maggiore importanza di uno/più sub-engine rispetto agli altri: Videogame corsa auto: physics engine MMPORG: network layer • Di conseguenza: game engine sviluppati per famiglie di videogame specifici Cenni ai game engine • Sviluppo game engine include sempre più tool ad alto livello per la gestione di asset, livelli ecc – Aumento velocità produzione – Piccole produzioni – Prototipazione • Asset manager Gestione/caricamento/ecc delle risorse necessarie per il videogame/livello Modelli Texture Suoni Ecc... • Level editor Tool dedicato per la progettazione (visuale e/o tramite scripting e pannelli di configurazione) di un livello di gioco/mappa Cenni ai game engine • Nascita game engine sempre più ad alto livello Es: Unity Gestione caricamento e modifica modelli tramite GUI visuali Gestione ad alto livello grafo della scena Inserimento di shader, game logic, ecc da insiemi di default IDE integrata Programmazione/scripting “mirato” a necessità specifiche del progetto da sviluppare Produzione per piattaforme multiple References • Homepage OpenGL • Slide corso SIGGRAPH 2012 “Introduction to Modern OpenGL Programming” ! ! • http://elrond.informatik.tu-freiberg.de/papers/SIGGRAPH2012_1/content/courses/modern-opengl-programming.pdf Differenze HTML5 e HTML4 ! • www.opengl.org http://www.w3.org/TR/html5-diff/ Webgl ! https://www.khronos.org/registry/webgl/specs/1.0/ ! http://www.khronos.org/webgl/wiki/Main_Page http://www.khronos.org/registry/webgl/specs/latest/2.0/