# Blend4Web

Blend4Web ist ein Open-Source-Framework, mit dessen Hilfe sich interaktive 3D-Grafiken zur Darstellung in Webbrowsern erstellen lassen.

## Übersicht

Blend4Web ist ein Framework, das die 3D-Grafiksoftware Blender erweitert, um die dort erstellten 3D-Inhalte auf Webseiten auszugeben. Die Ausgabe erfolgt in WebGL, WebAudio und anderen Webstandards, was es ermöglicht, die Inhalte ohne die Nutzung von Browser-Plugins wiederzugeben.
Blend4Web ist unter einem dualen Lizenzmodell veröffentlicht. Es existiert eine kommerzielle Lizenzierung und eine Open-Source-Lizenzierung nach GPLv3. Der Quelltext wird auf GitHub gehostet.
Die erstellten 3D-Szenen können auf zwei Arten bereitgestellt werden. Als ein Paar von JSON und Binär Dateien zur Einbindung in eine Webanwendung oder als HTML-Datei, in welche der ausführbare Code und die Benutzeroberfläche des Web-Players gepackt werden. Die HTML-Option ist wohl der einfachere Weg mit Blend4Web zu arbeiten, da die resultierende Datei über das Standard-Element Iframe beliebig auf einer Webseite platziert werden kann. So zum Beispiel auch in sozialen Netzwerken wie Facebook und VKontakte.
Der Werkzeugkasten der mit Blend4Web zur Verfügung steht beinhaltet neben dem Blender-Plugin noch JavaScript-Bibliotheken sowie Werkzeuge zur Einstellung der Szenen-Parameter, zum Debuggen und zur Optimierung.
Blend4Web wird seit 2010 von der Moskauer Gesellschaft Triumph LLC entwickelt. Die erste veröffentlichte Version erschien am 28. März 2014.

## Funktionen

Das Framework enthält Komponenten, wie sie auch in reinen Game-Engines zu finden sind. So zum Beispiel positionierbare Audioquellen, eine Physik-Engine (Javascript Portierung eines Bullet Fork), ein Animations-System und eine Abstraktionsschicht zur Programmierung einer Spielelogik.
Jedem Objekt können bis zu 8 unterschiedliche Animationen zugewiesen werden, darunter auch Armature- und Vertexanimationen. Die Geschwindigkeit und Abspielrichtung einer Animation sowie die Parameter von Partikelsystemen können direkt über die API beeinflusst werden.
Neben anderen Techniken wird das dynamische Laden und Entladen unterstützt, sowie die Simulation von Sub-Surface-Scattering und die bildbasierte Beleuchtung (IBL).
Zur Darstellung von Außen-Szenarien stellt Blend4Web einige bereits vorgefertigte Effekte zur Verfügung. Diese beinhalten Wind-Laub-Interaktion, die Simulation von Wasser, Atmosphäre und Sonnenlicht. Beispielhaft werden diese Effekte in der Technologiedemonstration „The Farm“ präsentiert. „The Farm“ demonstriert auch die Möglichkeiten der Bewegung und Interaktion mit Gegenständen und Nicht-Spieler-Charakteren sowie das Fahren von Fahrzeugen im First-Person-Mode.
Da Blend4Web auf der Cross-Browser WebGL-API basiert, ist es auf der Mehrzahl (inklusive mobiler) Webbrowser lauffähig. Einige Einschränkungen existieren in Browsern mit lediglich experimenteller WebGL-Unterstützung wie dem Internet Explorer.
Anspruchsvollere Techniken umfassen das Draw-Call-Batching, die Hidden-Surface-Determination, Threaded-Physics-Simulation und Ozeansimulationen.
Mit Version 14.09 wurde zur Interaktionsprogrammierung ein visuelles Tool eingeführt, das an den Logic-Editor des BGE (Blender-Game-Engine) angelehnt ist. Es ermöglicht dem Autor logische Blöcke einem Objekt zuzuordnen, welche dann bei einer User-Interaktion abgespielt werden.
Ab Version 15.03 unterstützt Blend4Web das Verknüpfen von HTML-Elementen (wie Informationsfenster) mit 3D-Objekten und die Instanziierung zur Laufzeit.
Unter den Effekten auf der Grundlage der Nachbearbeitung werden leuchtende Oberfläche (englisch glow), Beleuchtung mit hellem Licht (bloom), die Tiefenschärfe der Kamera, Twilight-Strahlen, die Bewegungsunschärfe und die gegenseitige Verschattung (SSAO) unterstützt.
Die folgenden Post-Processing Effekte unterstützt Blend4Web: Glow, Bloom, Schärfentiefe, Strahlenbüschel (God-Rays), Bewegungsunschärfe, und Screen Space Ambient Occlusion.
Seit 2015 werden Ausgabegeräte zur Darstellung von virtueller Realität unterstützt. Im Speziellen existiert eine Unterstützung für das Head-Mounted Display Oculus Rift über die experimentelle WebVR-API.

## Blender Integration

Das Add-on für Blender ist in Python bzw. C geschrieben und kann auf den Plattformen Linux-x32/64, macOS x64 und MS Windows x32/64 kompiliert werden.
In den Add-on Einstellungen kann ein spezielles Profil aktiviert werden, das die Benutzeroberfläche von Blender den speziellen Anforderungen von Blend4Web anpasst.
Blend4Web unterstützt einige Blender-spezifische Techniken, wie den Node-basierten Material-Editor und das Partikelsystem. Es existiert eine grundlegende Unterstützung für den Blender-NLA-Editor mit dem sich einfache Szenarien erstellen lassen.
Blend4Web basiert im Wesentlichen auf Blenders Real-Time GLSL-Render-Engine. Um einen WYSIWYG-Workflow zu erhalten, wird empfohlen, diesen auch in Blender zu aktivieren.

## Vergleichbare Software
### Blender Game Engine

Wie die Blender Game Engine (BGE) benötigt Blend4Web zur Darstellung der Inhalte keine weitere Software. Während die BGE aber eine ausführbare Datei zur Offline-Wiedergabe erzeugt, zielt Blend4Web auf die Wiedergabe im Webbrowser ab. So verfügt Blend4Web über eine Javascript-API, während die BGE eine Python-API anbietet.

### Unity

Ab Version 5 bietet Unity die Möglichkeit an, Inhalte in WebGL auszugeben. Bei einem, von einem Unity Spiele-Entwickler durchgeführten Vergleichstest anhand einer Turbofan-Triebwerks-Präsentation, kam dieser zu dem Schluss, dass die Engines eine vergleichbare visuelle Qualität liefern. Ein Unterschied zeigte sich aber in der Größe der von den Engines erzeugten Dateien. Während Unity WebGL-Daten mit 142 MB (unkomprimiert) erzeugte, war die von Blend4Web erzeugte HTML-Datei mit 1,8 MB (unkomprimiert) wesentlich kompakter.
Laut der Unity-WebGL-Roadmap plant Unity in nächster Zukunft keine Unterstützung für Mobilgeräte, positionierbare Audioquellen oder Videotexturen.

### Three.js

Die beliebte WebGL-Library Three.js erfordert bereits für relativ einfache Aufgaben Programmierkenntnisse und weist dadurch (für Nichtprogrammierer) eine relativ flache Lernkurve auf. In Blend4Web erfolgt ein Großteil des Erstellungsprozesses ohne die Notwendigkeit von Programmierkenntnissen.

## Anwendungen

Zum dritten Geburtstag der Landung des Curiosity Rovers auf dem Mars entwickelte die NASA die auf Blend4Web basierende Anwendung Experience Curiosity. Die Anwendung ermöglicht es den Rover mit seinen Kameras und seinem Roboterarm auf der Marsoberfläche zu steuern. Weiter kann man einige Aufgaben der Mars Science Laboratory Mission nachempfinden. Präsentiert wurde die Anwendung zum Start des WebGL Blocks auf der SIGGRAPH 2015.