# Blend4Web

Blend4Web è un framework open source per creare e visualizzare applicazioni di computer grafica 3D interattive in un web browser.

## Panoramica

Il framework Blend4Web si serve di Blender per l'editing delle scene 3D. Il rendering del contenuto si basa su WebGL, Web Audio e altri standard web, senza uso di plug-ins.
Blend4Web è multilicenza: è distribuito come software open source GPLv3 o con licenza commerciale; il codice sorgente è disponibile su GitHub.
Una scena 3D può essere creata in Blender e quindi esportata in una coppia di files: un JSON e un binario da caricare in un'applicazione web. La stessa può anche essere esportata in un singolo file HTML omnicomprensivo, nel quale vengono impacchettati i dati esportati, la GUI del web player e il motore software. L'opzione HTML è considerata la modalità più semplice di utilizzo di Blend4Web. Il file ottenuto, che risulta avere 1Mb di dimensione minima, può essere inserito in una pagina web utilizzando un iframe standard HTML. Il deploy delle applicazioni basate su Blend4Web può essere effettuato su servizi di social networking popolari come Facebook.
La toolchain di Blend4Web consta delle librerie JavaScript, del plugin di Blender e di un set di strumenti per il tweak dei parametri della scena 3D, il debugging e l'ottimizzazione.
Lo sviluppo di Blend4Web è cominciato nel 2010 in una società con sede a Mosca chiamata Triumph. La prima release pubblica è avvenuta il 28 marzo 2014.

## Caratteristiche

Il framework è composto da un certo numero di moduli, tipicamente presenti nei game engines, che includono un sistema di audio posizionale, un motore della fisica, (un fork di Bullet su cui è stato effettuato un porting in javaScript), un sistema di animazioni ed un layer di astrazione per la programmazione della logica di gioco.
Per ogni singolo oggetto possono essere assegnate fino a 8 animazioni, comprese animazioni dello scheletro ed animazioni per vertice. La velocità e la direzione dell'animazione (forward/backward play) come anche i parametri dei particle systems (dimensione, velocità iniziale e numero delle particelle) possono essere modificati tramite API.
Tra le altre caratteristiche supportate c'è il caricamento dinamico della scena, il subsurface scattering, e l'illuminazione image-based.
Sono inoltre presenti alcune funzionalità pronte all'uso per il rendering di ambienti esterni estesi, come l'interazione del vento con le foglie, la simulazione dell'acqua, dell'atmosfera e della luce del sole. Un esempio che dimostra questi effetti è la tech-demo "The farm", che contiene anche alcuni NPC animati in maniera multipla e la possibilità di camminare, interagire con oggetti e guidare veicoli in modalità first-person-view.
Essendo basato sull'API cross-browser WebGL, Blend4Web viene eseguito dalla maggior parte dei browser web, inclusi i browser per dispositivi mobili. Tuttavia esistono alcune limitazioni per i browser che supportano WebGL sperimentalmente, come Internet Explorer. Ci sono anche applicazioni sviluppate per dispositivi con sistema operativo Tizen, come gli smartwatch Samsung Gear S2.
Tra le funzionalità avanzate si annoverano il draw call batching, la hidden surface determination, il simulatore fisico a thread e simulatore oceanografico.
Con la versione 14.09 Blend4Web ha introdotto la possibilità di aggiungere interattività alle scene 3D utilizzando un tool di programmazione visuale. Il tool ricorda l'editor logico BGE, infatti utilizza blocchi logici piazzati in Blender. Consente di lanciare animazioni create dall'artist quando l'utente interagisce con alcuni oggetti 3D.
Dalla versione 15.03, Blend4Web supporta l'aggancio di elementi HTML (come finestre informative) agli oggetti 3D ("annotations") e la copia run time di oggetti ("instancing").
Tra gli effetti di post-processing sono supportate le seguenti funzionalità: glow, bloom, depth of field, crepuscular rays, motion blur e lo screen space ambient occlusion.
I dispositivi di realtà virtuale sono supportati dalla fine del 2015. In particolare l'head-mounted display Oculus Rift gira sulle API sperimentali WebVR.

## Integrazione in Blender

L'add-on per Blender è scritto in Python e C e può essere compilato per Linux x86/x64, OS X x64 and MS Windows x86/x64.
Uno specifico profilo Blend4Web può essere attivato nelle impostazioni dell'add-on. Quando si attiva tale profilo l'interfaccia di Blender cambia in modo da rivelare le impostazioni relative a Blend4Web.
Blend4Web supporta un set di funzionalità specifiche di Blender come il node material editor (un tool per la programmazione visuale degli shader) e il sistema particellare. È disponibile un supporto base dell'editor delle non-linear-animation (NLA) di Blender per creare semplici scenari.
Blend4Web è essenzialmente basato sul motore di rendering real-time di Blender GLSL, e si consiglia di abilitarlo in modo da poter effettuare WYSIWYG editing.

## Confronto con software simili
### Blender Game Engine

Similarmente al Blender Game Engine (BGE), Blend4Web carica ed esegue i dati direttamente estratti dalle scene Blender, senza l'uso di editor intermedi. Poiché si tratta di un framework web, è pensato per i web browsers, mentre un eseguibile BGE deve essere lanciato offline. Blend4Web fornisce le sue proprie JavaScript API, il che è fondamentalmente diverso dalle API basate su Python di BGE. Viene proposto un approccio di sviluppo Web anziché una combinazione di blocchi logici e di scripting Python come avviene per BGE.

### Unity

Unity ha offerto un'opzione per il WebGL fin dalla versione 5. Fu portato avanti un sondaggio da parte di uno sviluppatore di videogiochi Unity per confrontare questi due motori. Furono create due presentazioni web-based di una turboventola utilizzando Blend4Web e Unity. Sebbene il realizzatore notò che entrambi i motori rivelarono una qualità visiva simile, il pacchetto WebGL Unity aveva una dimensione totale dei file di 142 Mb (non compressi) mentre il file HTML esportato di Blend4Web per la stessa scena pesava solo 1.8Mb (non compressi).
Secondo la roadmap WebGL di Unity, non vi sono piani per supportare dispositivi mobili, audio posizionale e texture video in un futuro prossimo.

### Three.js

La popolare libreria WebGL Three.js necessita di programmazione anche per semplici compiti, richiedendo inoltre maggiori competenze da parte degli utenti e offrendo una lenta curva di apprendimento. In Blend4Web, la maggior parte del lavoro di preparazione delle presentazioni online può essere effettuata senza alcuna di programmazione di codice.

## Realizzazioni rilevanti

NASA ha sviluppato un'applicazione web interattiva chiamata Experience Curiosity per celebrare il terzo anniversario dell'atterraggio su Marte del Curiosity rover. Questa applicazione Blend4Web rende possibile governare il rover, le sue telecamere ed il braccio robotico e riproduce alcuni famosi eventi della missione Mars Science Laboratory. L'applicazione è stata presentata all'apertura della sezione WebGL del SIGGRAPH 2015.