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 Ambienti Visuali Game engine API Driver Insieme di routine che controlla direttamente la scheda grafica Basso livello Hardware-dependent Specifico per ogni SO Di solito implementati da costruttori hardware
API per la programmazione grafica Ambienti Visuali Game engine API Driver Application Program Interface 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 Forniscono: IDE Ambienti Visuali Game engine API Driver 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 Visual programming Possibilità di scripting ad alto livello Game engine API Possibilità di implementare facilmente applicazioni medio-bassa difficoltà Target allargato anche a non-programmatori Driver 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) Khronos Group Specifiche open Implementazione possibile da chiunque Cross-platform Binding per numerosi linguaggi Utilizzo per tutti gli ambiti applicativi della grafica in tempo reale 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 Utilizza Canvas di HTML5 Tramite interfaccia DOM (Document Object Model) senza utilizzo plugin Attuali specifiche 1.0 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 Ripetitività di chiamate per cambiare parametri Necessità implementazione librerie e/o funzioni per ogni altra necessità 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 www.opengl.org 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 Webgl http://www.w3.org/tr/html5-diff/ 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/