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/