# Blend4Web

Blend4Web est un framework libre et open source pour réaliser et publier des infographies 3D interactives dans un navigateur web.

## Vue d'ensemble

Le framework Blend4Web tire profit de Blender pour éditer les scènes en 3D. Le rendu du contenu se base sur les technologies WebGL, Web Audio et autres standards du Web, sans avoir besoin de plugins.
Blend4Web est sous une licence double: il est distribué sous la licence libre et open source GPLv3 et une licence non-libre ; le code source est hébergé sur GitHub.
Une scène 3D peut être préparée sur Blender et ensuite exportée via un fichier JSON et un fichier binaire pour les charger dans une application web. La scène peut être aussi exportée dans un seul fichier indépendant HTML, dans lequel les données exportées, le web player, le GUI et le moteur en lui-même sont compressés. L'option HTML est considérée comme la plus simple façon d'utiliser Blend4Web. Le fichier résultant, d'une taille signalée minimum de 1 Mb, peut être intégré dans une page web en utilisant un élément iframe HTML standard. Les applications Blend4Web peuvent être déployées sur les réseaux sociaux notoires comme Facebook.
L'outil Blend4Web se compose de bibliothèques JavaScript, d'un Blender et d'un ensemble d'outils pour régler les paramètres de la scène 3D, déboguer et optimiser.
Le développement de Blend4Web a commencé en 2010 par une entreprise, Triumph, basée à Moscou. L'outil a été diffusé publiquement le 28 mars 2014.

## Fonctions

Le framework possède des composants typiques qu'on peut trouver dans les moteurs de jeu : système d'effets audio 3D, moteur physique (une branche de Bullet porté sur JavaScript, un système d'animation et une couche d’abstraction pour de la programmation logique de jeu.
Jusqu'à 8 types d'animations peuvent être assignés à un seul objet comprenant de l'animation par squelette et de l'animation par déformation (métamorphose) par vertex. La vitesse et la direction de l'animation (lecture arrière ou avant), comme les paramètres du système de particules (taille, vélocité initiale et nombre) peuvent être changés grâce à l'API.
Dans les fonctionnalités supportées se trouve le chargement et déchargement dynamique des scènes, la simulation de diffusion de surface (subsurface scattering) et l'illumination par image (IBL).
Des options prêtes à l'emploi existent pour créer des environnements extérieurs comme l’interaction vent-feuillage, l'eau, les effets d'atmosphère et la simulation de lumière naturelle. Un des exemples montrant ces effets est la démonstration technique "The Farm", qui contient aussi des PNJ animés et la capacité de marcher, interagir avec des objets et conduire un véhicule en vue à la première personne.
En se basant sur l'API multi-navigateur de WebGL, Blend4Web fonctionne sur la majorité des navigateurs web, même ceux sur mobile. Il existe cependant des mises en garde pour les navigateurs web supportant WebGL expérimentalement comme Internet Explorer.
Les fonctionnalités avancées incluent du draw call batching, de la détection de surface cachée, de la simulation physique en threading et de la simulation d'océan.
Dans la version 14.09, Blend4Web introduit la possibilité d'ajouter des interactions dans la scène 3D en utilisant un outil de langage de programmation visuel$^,$. L'outil est proche de l'éditeur logique du BGE : il utilise des blocs logiques intégrés dans Blender. Il permet de jouer des pistes d'animation autorisées par l'artiste quand l'utilisateur interagit avec l'objet 3D prédéfini.
Depuis la version 15.03, Blend4Web supporte les éléments HTML attachés (comme les fenêtres d'informations) sur les object 3D ("annotations") et la copie d'objets lors de l’exécution ("instanciation").
Parmi les effets en post-traitement, les fonctionnalités suivantes sont supportées : lueur (glow), bloom, profondeur de champ, god rays, flou cinétique et screen space ambient occlusion.

## Intégration à Blender

Le plugin Blender est écrit en Python et C et peut être compilé sur les plateformes Linux x86/x64, OS X, x64 et Microsoft Windows.
Un profil spécifique de Blender peut être activé dans les paramètres du plugin. Quand ce profil est activé, l'interface de Blender change pour ne révéler que les paramètres pertinents pour Blend4Web.
Blend4Web supporte un ensemble de fonctionnalités spécifique à Blender comme l'éditeur nodal de matériaux (un outil de programmation visuel pour les shaders) et le système de particules. Il existe un support basique de l'éditeur d'animation non-linéaire de Blender (NLA) pour créer de simples scénario.
Blend4Web est basé essentiellement sur le moteur de rendu temp-réel GLSL, qui est recommandé pour permettre l’édition WYSIWYG.

## Comparaison avec les produits de même catégorie
### Blender Game Engine

Comme le moteur de jeu de Blender, Blend4Web charge et lit directement les informations qui sont extraites de la scène Blender, sans avoir besoin d'un éditeur intermédiaire. En étant un framework web, sa cible sont les navigateurs web tandis que l’exécutable BGE doit être lancé hors ligne$^,$. Blend4Web fournit sa propre API JavaScript qui est différent de l'API basé sur Python du BGE. Une approche "développement web" est proposé au lieu d'une combinaison de briques logiques et programmation par script Python utilisé dans le BGE.

### Unity

Unity a, depuis la version 5, une option pour exporter en WebGL. Une enquête a été conduite par un développeur Unity pour comparer les deux moteurs. Deux présentations web interactives d'un réacteur à double flux ont été créées en utilisant Unity et Blend4Web. Bien que l'auteur a remarqué que les deux moteurs produisaient des visuels de qualité similaire, la build Unity WebGL était d'une taille totale de 142 Mb (sans compression) pour 1.8 Mb (sans compression) pour la version HTML exporté par Blend4Web.
Selon la feuille de route du développement WebGL, Unity n'a pas prévu un support mobile, un système d'audio 3D et un support de textures vidéos dans un futur proche$^,$.

### Three.js

La bibliothèque populaire WebGL, Three.js demande de la programmation pour de simples tâches, ainsi que plus de compétences de la part de l'utilisateur et donc a une courbe d'apprentissage très lente. Dans Blend4Web, la plupart du travail de préparation d'une présentation en ligne peut être réalisé sans l'aide de programmation$^,$.

## Utilisations notoires

La NASA a développé une application web interactive appelé "Experience Curiosity" pour célébrer le 3e anniversaire de atterrissage du rover Curiosity sur Mars. This Blend4Web-based app. L'application permet de contrôler le rover, ses caméras, son bras articulé et de reproduire les événements importants de la mission Mars Science Laboratory$^,$. L'application a été présentée au début de la section WebGL au SIGGRAPH 2015. Puis, elle a été porté sur Verge3D pour Blender en 2018, en apportant plusieurs améliorations de performances et quelques corrections de bogues.