Статьи

Babylon.js: полный JavaScript-фреймворк для создания 3D-игр с HTML5 и WebGL

Я настоящий фанат 3D-разработки. С 16 лет я проводил все свое свободное время, создавая трехмерные движки с различными технологиями (DirectX, OpenGL, Silverlight 5, чистое программное обеспечение и т. Д.).

Мое счастье было полным, когда я обнаружил, что Internet Explorer 11 имеет встроенную поддержку WebGL . Поэтому я решил снова написать новый 3D-движок, но на этот раз с использованием WebGL и моего любимого JavaScript .

Если вы новичок в 3D, я предлагаю вам прочитать эту замечательную серию блогов, написанных моим другом Дэвидом Руссетом : http://blogs.msdn.com/b/davrous/archive/2013/06/13/tutorial-series- обучения, как к записи-а-3d-мягкого двигателя с нуля-в-с-машинописи или-javascript.aspx

Так родился babylon.js, и вы можете найти несколько примеров прямо здесь: http://www.babylonjs.com .

espilitflat2009wcafeСердцеМашинагадюка

Все сцены были созданы одним из самых талантливых 3D-художников, которых я знаю: Мишелем Руссо, который по волшебству жизни также является моим коллегой в Microsoft и имеет по-настоящему крутой блог для дизайнеров: http://blogs.msdn.com/ б / designmichel /

Двигатель в настоящее время находится на ранней стадии, но я планирую быстро добавить много интересных новых функций.

Текущая версия поддерживает следующие функции (мне всегда нравился этот очень длинный и очень технический список):

  • Полный граф сцены с огнями, камерами, материалами, спрайтами, слоями и сетками
  • Полная система столкновений / ответов
  • Настраиваемый материал с поддержкой
    • Размытый
    • зеркальный
    • эмиссионный
    • Непрозрачность / Альфа
    • отражение
    • окружающий
    • До 4 одновременных огней
  • Два вида огней:
    • точка
    • направленный
  • Три вида камер:
    • Бесплатная камера (как FPS)
    • Сенсорная камера
    • Дуга повернуть камеру
  • текстуры:
    • 2D
    • Визуализация цели
    • Зеркала
    • динамический
  • Альфа-смешение
  • Альфа-тестирование
  • Билбординг / спрайты
  • Выбор сцены
  • Усечение усеченного
  • Обрезка под-сеток
  • Сглаживание
  • Система частиц
  • Движок анимации
  • Формат файла Babylon — это файл JSON, который можно создать из:
    • .OBJ
    • .FBX
    • .MXB
    • смеситель

Очевидно, что я не буду охватывать ВСЕ функции в этой статье. Действительно, это только первая из длинной серии, в которой будут рассмотрены все функции babylon.js .

О предварительном просмотре IE11: IE11 все еще находится на стадии предварительного просмотра, поэтому вы должны рассматривать его как… предварительный просмотрSourire . Некоторые шейдеры не будут работать должным образом или даже не будут отображать что-либо… так что, пожалуйста, будьте терпеливы …
Кроме того, наша платформа блога включает режим совместимости IE10, который подразумевает деактивацию WebGL (я делаю сложную работу … ^^). Таким образом, для каждого образца вы найдете картинку, на которой вы можете щелкнуть, чтобы открыть новое окно, используя совершенно новый движок рендеринга IE11.

Начало работы с babylon.js

Единственное, что вам действительно нужно, чтобы раскрыть всю мощь babylon.js, — это небольшой файл js (без сжатия менее 200 КБ): http://www.babylonjs.com/babylon.zip

Вам также необходимо добавить hand.js на свою страницу, если вы хотите беспрепятственно поддерживать сенсорные события : http://handjs.codeplex.com

Как только вы захватили этот файл, вам просто нужно импортировать его в ваш HTML-файл и создать холст (именно здесь babylon.js будет отображать сцены)

<! DOCTYPE html>
<html xmlns = "http://www.w3.org/1999/xhtml">
<Голова>
    <title> Использование babylon.js - тестовая страница </ title>
    <script src = "babylon.js"> </ script>
    <Стиль>
        html, body {
            ширина: 100%;
            высота: 100%;
            отступы: 0;
            поле: 0;
            переполнение: скрытое;
        }
        #renderCanvas {
            ширина: 100%;
            высота: 100%;
        }
    </ Стиль>
</ HEAD>
<Тело>
    <canvas id = "renderCanvas"> </ canvas>
</ Body>
</ Html>

Babylon.js построен вокруг основного объекта: двигателя. Этот объект позволит вам создать сцену, в которую вы сможете добавлять сетки (трехмерные объекты), источники света, камеры и материалы:

<Скрипт>
    var canvas = document.getElementById ("renderCanvas");
    var engine = new BABYLON.Engine (canvas, true);
</ Скрипт>

Вы можете проверить, поддерживается ли WebGL в текущем браузере, используя следующий код:

<Скрипт>
    if (BABYLON.Engine.isSupported ()) {
        var canvas = document.getElementById ("renderCanvas");
        var engine = new BABYLON.Engine (canvas, true);
    }
</ Скрипт>

Двигатель является центром между babylon.js и WebGL . Он отвечает за отправку заказов в WebGL и создание внутренних объектов, связанных с WebGL .

Как только движок создан, вы можете создать сцену:

var scene = new BABYLON.Scene (engine);

Сцена может рассматриваться как контейнер для всех объектов, которые работают вместе для создания трехмерного изображения. С помощью сцены вы можете создать свет, камеру и сетку (в данном случае сферу):

var camera = new BABYLON.FreeCamera («Камера», новый BABYLON.Vector3 (0, 0, -10), сцена);
var light0 = new BABYLON.PointLight ("Omni0", новый BABYLON.Vector3 (0, 100, 100), сцена);
переменная сфера = BABYLON.Mesh.createSphere ("Сфера", 16, 3, сцена);

Babylon.js поддерживает различные виды камер, источников света и сеток. Я вернусь к ним в этой статье.

Возможно, вы заметили использование BABYLON.Vector3 для определения 3D-позиции. Действительно, babylon.js поставляется с полной математикой, которая может обрабатывать векторы, матрицы, цвета, лучи и кватернионы.

Обратите внимание, что babylon.js использует левую систему координат:

образ

Последнее, что вам нужно сделать, это зарегистрировать цикл рендеринга:

// Визуализация цикла
var renderLoop = function () {
    // Начать новый кадр
    engine.beginFrame ();

    scene.render ();

    // Настоящее время
    engine.endFrame ();

    // Зарегистрируем новый кадр
    BABYLON.Tools.QueueNewFrame (renderLoop);
};

BABYLON.Tools.QueueNewFrame (renderLoop);

Используя QueueNewFrame (который является просто вызовом requestAnimationFrame, если поддерживается, или setTimeout else), вы попросите образбраузер вызвать ваш renderLoop как можно скорее. Сам RenderLoop основан на 4 частях:

  • engine.beginFrame : это обязательный вызов для определения начала нового кадра.
  • scene.render : просит сцену визуализировать все сущности, которыми она владеет
  • engine.endFrame : закрывает текущий кадр и представляет его на холсте
  • QueueNewFrame : регистрирует новый кадр для рендеринга

Если вы хотите добавить немного больше в реальном времени, вы можете добавить функцию для scene.beforeRender и использовать ее для анимации сферы:

var alpha = 0;
phere.scaling.x = 0,5;
phere.scaling.z = 1,5;
scene.beforeRender = function () {
    phere.rotation.x = альфа;
    phere.rotation.y = альфа;

    альфа + = 0,01;
};

В результате получается следующее (если ваш браузер не поддерживает WebGL, вы увидите замечательный белый прямоугольник на белом Sourire):

Для IE11 Preview, вы можете нажать здесь:образ

материалы

Наша сфера немного грустна своим простым серым цветом. Настало время поговорить о материалах. Материал для babylon.js — это объект, который определяет, как выглядит сетка.

Babylon.js имеет объект с именем StandardMaterial, который поддерживает следующие свойства:

  • diffuseColor и
    diffuseTexture : определяют базовый цвет сетки
  • ambientColor и
    ambientTexture : Определить окружающий цвет сетки (может быть использован для легких карт, например)
  • specularColor и
    specularTexture : определяют зеркальный цвет сетки
  • emissiveColor и
    emissiveTexture : определяют цвет, излучаемый сеткой (цвет, который объект имеет без света)
  • opacityTexture : определить прозрачность сетки
  • mirrorTexture : определить цвет отражения, получаемый сеткой (может быть текстурой или динамическим зеркалом
    Sourire)
  • альфа : определить глобальную прозрачность сетки

свойства цвета определяют уникальный цвет, где свойства текстуры используют растровое изображение для определения цветов

Итак, давайте добавим немного цвета в нашу сферу:

// Материал
var material = new BABYLON.StandardMaterial ("по умолчанию", сцена);
material.diffuseTexture = new BABYLON.Texture ("kosh.jpg", сцена);
material.emissiveColor = new BABYLON.Color3 (0,3, 0,3, 0,3);
сфера.материал = материал;

И результат (еще раз, с WebGL, он должен быть белым…):

Для IE11 Preview, вы можете нажать здесь:
образ

StandardMaterial очень универсален и есть тонны доступных комбинаций. Например, давайте изменим текстуру, используемую diffuseTexture, на текстуру, которая содержит альфа-значения:

var material = new BABYLON.StandardMaterial ("по умолчанию", сцена);
material.diffuseTexture = new BABYLON.Texture("tree.png", scene);
material.diffuseTexture.hasAlpha = true;
material.emissiveColor = new BABYLON.Color3(0.3, 0.3, 0.3);
material.backFaceCulling = false;
sphere.material = material;

And the result:


образ

Please note that in this case, we have to indicate that the texture contains useful alpha values (has Alpha = true). We also need to deactivate the back face culling system (which remove the faces that are not toward us) to see back faces.

Lights, cameras and meshes

Lights

Babylon.js lets you create two kind of lights:

  • pointLight (like the sun for instance) which emits lights in every direction from a specific position
  • directionalLight which emits lights from the infinite towards a specific direction

Creating them is easy:

var omni = new BABYLON.PointLight("Omni0", new BABYLON.Vector3(10, 0, 0), scene);
var dir = new BABYLON.DirectionalLight("Dir0", new BABYLON.Vector3(1, -1, 0), scene);

You can create as much lights as you want but beware: the StandardMaterial can only take in account up to 4 lights simultaneously.

Lights have three main properties:

  • diffuse: Diffuse color
  • specular: Specular color
  • position/direction

Cameras

Babylon.js supports 3 kind of cameras:

  • freeCamera is a FPS like camera where you control the camera with the cursors keys and the mouse
  • touchCamera is a camera controlled with touch events (it requireshand.jsto work)
  • arcRotateCamera is a camera that rotates around a given pivot. It can be controlled with the mouse or touch events (and it also requires hand.js to work)

You can create as much cameras as you want but only one camera can be active at a time

var camera = new BABYLON.ArcRotateCamera("Camera1", 0, 0.8, 10, BABYLON.Vector3.Zero(), scene);
var camera2 = new BABYLON.FreeCamera("Camera2", new BABYLON.Vector3(0, 0, -10), scene);
var camera3 = new BABYLON.TouchCamera("Camera3", new BABYLON.Vector3(0, 0, -10), scene);

scene.activeCamera = camera;

All the cameras can automatically handle inputs for you by calling attachControl function on the canvas. And you can revoke the control by using detachControl function:

camera.attachControl(canvas);

Meshes

Creation

Meshes are the only entities that you can effectively see. They have tons of properties and can be created from basic shapes or from a list of vertices and faces.

Basic shapes are:

  • Cube
  • Sphere
  • Plane
var box = BABYLON.Mesh.createBox("Box", 0.8, scene);
var sphere = BABYLON.Mesh.createSphere("Sphere", 16, 3, scene);
var plane = BABYLON.Mesh.createPlane("plane", 3, scene);

You can also create a mesh from a list of vertices and faces:

var plane = new BABYLON.Mesh("plane", [3, 3, 2], scene);

var indices = [];
var vertices = [];

// Vertices
var halfSize = 0.5;
vertices.push(-halfSize, -halfSize, 0, 0, 1.0, 0, 0.0, 0.0);
vertices.push(halfSize, -halfSize, 0, 0, 1.0, 0, 1.0, 0.0);
vertices.push(halfSize, halfSize, 0, 0, 1.0, 0, 1.0, 1.0);
vertices.push(-halfSize, halfSize, 0, 0, 1.0, 0, 0.0, 1.0);

// Indices
indices.push(0);
indices.push(1);
indices.push(2);

indices.push(0);
indices.push(2);
indices.push(3);

plane.setVertices(vertices, 1);
plane.setIndices(indices);

return plane;

You have to create a blank new mesh and call setVertices and setIndices.

When you create a blank mesh, you have to give a description of every vertex. In this case, the value is [3, 3, 2] which means that a vertex is composed of 3 parts: the first one is based on 3 floats, the second one is based on 3 floats and the last one on 2 floats (position[3], normal[3] and texture coordinates[2])

To define where the mesh is, you can use the position/rotation/scaling properties:

plane.position = new BABYLON.Vector3(0, 7, 0);
plane.rotation.z = 0.1;
plane.scaling.x = 2;

Meshes hierarchy

You can create meshes hierarchies by setting the parent property of a mesh. By doing this you create a link between two meshes. This link implies that all parent transformations (position/rotation/scaling) will be combined with the child’s transformations.

For instance, with the following code:

var box = BABYLON.Mesh.createBox("Box", 1.0, scene);
box.position = new BABYLON.Vector3(0, 2, 2);
box.parent = sphere;

You will get the following result (based obviously on the previous scene we created, where I removed the scaling of the sphere for clarity):


образ

Activation and visibility

You can control the visibility and the activation of meshes according to following rules:

  • StandardMaterial can control the opacity of an object with
    • alpha property to control alpha blending (transparency) per mesh
    • alpha channel of the diffuseTexture: this will cause babylon.js to activate alpha testing which means it will discard all pixel with alpha value < 0.5
    • opacityTexture to define alpha blending per pixel (and not for the whole mesh like alpha property)
  • visibility property to control the transparency per mesh directly (without using a material)
  • isVisible property to activate the rendering of the mesh. The mesh is kept into the scene for others operations (collisions, picking, etc.). This property is not transmitted to children
  • setEnabled function to deactivate completely a mesh and all its descendants.

Collisions

One of the great feature of babylon.js is certainly its complete and really simple to use collisions system. By settings a small set of options, you will be able to reproduce a first person shooterSourire

There are three levels of options to set. First of all you have to activate the collisions globally on the scene and define the gravity:

 scene.collisionsEnabled = true;
 scene.gravity = new BABYLON.Vector3(0, -9, 0);

Then you have to configure the camera you want to use for collisions:

camera.checkCollisions = true;
camera.applyGravity = true;
camera.ellipsoid = new BABYLON.Vector3(0.5, 1, 0.5);

The collisions engine considers the camera like an ellipsoid (a kind of capsule). In this case the camera is like a big ellipsoid measuring 1mx2mx1m (the ellipsoid property defines the radius of the ellipsoid).

You can also create a flying camera by not applying gravity.

Finally you have to define which meshes can collide:

plane.checkCollisions = true;
sphere.checkCollisions = true;

образThe result is the following (use the cursors keys to move and the mouse to change your point of view by clicking and moving it. Beware not to fall off of the groundSourire):http://www.babylonjs.com/tutorials/simple5.html

Babylon.js can even handle stairs as you can see in the “Espilit demo” on the main site.

Particle systems

Particle systems are a cool toy when you play with 3D. They can easily add stunning effects on your scene (explosions, impacts, magic effects, etc.).

Creating a particle system is simple as follow:

var particleSystem = new BABYLON.ParticleSystem("particles", 4000, scene);

You have to define the maximum capacity of a particle system to allowbabylon.jsto create associatedWebGLobjects. So in this case, there will be no more than 4000 active particles simultaneously.

Particle systems are highly configurable with the help of the following set of properties:

  • particleTexture: Defines the texture associated with every particle
  • minAngularSpeed/maxAngularSpeed: The range of the angular rotation speeds of every particle
  • minSize/maxSize: The range of sizes of every particle
  • minLifeTime/maxLifeTime: The range of lifetimes for every particle
  • minEmitPower/maxEmitPower:: The range of emission powers (emission speed) of every particle
  • minEmitBox/maxEmitBox:: The box from where every particle starts (can be a point if min == max)
  • direction1/direction2: The range of directions for every particle
  • color1/color2: The range of colors for every particle
  • colorDead: The color of a dead particle (Babylon.jswill interpolate particle’s color to this color)
  • deadAlpha: The alpha of a dead particle (in a same way,babylon.jswill interpolate particle’s alpha to finish with this specific alpha)
  • textureMask: A mask used to filter which part of the texture is used for every particle
  • blendMode: Alpha blending mode (BLENDMODE_ONEONEto add current color and particle color orBLENDMODE_STANDARDto blend current color and particle color using particle’s alpha)
  • emitter:A Vector3 to define the position of the particle system. You can also used a mesh here and in this case the particle system will use the mesh position
  • emitRate: How many particles are launched on every frame.
  • manualEmitCount: Specifying a value greater or equal to zero here will disable emitRate. You are then responsible for feeding this value to control the particles count emitted.
  • updateSpeed: The global speed of the system
  • gravity:Graviy applied to particles
  • targetStopDuration:Stops the particle system after a specific duration
  • disposeOnStop: Disposes the particle system on stop (Very useful if you want to create a one shot particle system with a specifictargetStopDuration)

  Every range values are used to generate a controlled random value for every particle.

You can control a particle system by calling start/stop functions.

That’s a lot of properties, isn’t it ?SourireThe best way to understand them is to try all of them on a test scene and play with properties. For instance, the following code:

var particleSystem = new BABYLON.ParticleSystem("particles", 4000, scene);
particleSystem.particleTexture = new BABYLON.Texture("Flare.png", scene);
particleSystem.minAngularSpeed = -0.5;
particleSystem.maxAngularSpeed = 0.5;
particleSystem.minSize = 0.1;
particleSystem.maxSize = 0.5;
particleSystem.minLifeTime = 0.5;
particleSystem.maxLifeTime = 2.0;
particleSystem.minEmitPower = 0.5;
particleSystem.maxEmitPower = 1.0;
particleSystem.emitter = new BABYLON.Vector3(0, 0, 0);
particleSystem.emitRate = 500;
particleSystem.blendMode = BABYLON.ParticleSystem.BLENDMODE_ONEONE;
particleSystem.minEmitBox = new BABYLON.Vector3(0, 0, 0);
particleSystem.maxEmitBox = new BABYLON.Vector3(0, 0, 0);
particleSystem.direction1 = new BABYLON.Vector3(-1, -1, -1);
particleSystem.direction2 = new BABYLON.Vector3(1, 1, 1);
particleSystem.color1 = new BABYLON.Color4(1, 0, 0, 1);
particleSystem.color2 = new BABYLON.Color4(0, 1, 1, 1);
particleSystem.gravity = new BABYLON.Vector3(0, -5, 0);
particleSystem.disposeOnStop = true;
particleSystem.targetStopDuration = 0;
particleSystem.start();

Produces the following rendering (click and move the mouse on the canvas to use the arcRotateCamera):

Sprites and layers

Babylon.js is designed to extract the full power of WebGL for your apps and games. And even if you want to create a 2D game, babylon.js can help you by providing a support for sprites and 2D layers.

Please note than you can also define the billboardMode property of a mesh to align it with the camera to simulate a 2D object: plane.billboardMode = BABYLON.Mesh.BILLBOARDMODE_ALL

A sprite is defined by a texture containing all its animation states:

образ

The current state (the current cell displayed) is defined using the cellIndex property. You can then manipulate it by code or use the playAnimation function to let babylon.js control the cellIndex property.

Sprites working on the same texture are gathered around a SpriteManager to optimize resources usage:

var spriteManager = new BABYLON.SpriteManager("MonsterA", "MonsterARun.png", 100, 64, scene);
for (var index = 0; index < 100; index++) {
    var sprite = new BABYLON.Sprite("toto", spriteManager);
    sprite.position.y = 0;
    sprite.position.z = Math.random() * 10 - 5;
    sprite.position.x = Math.random() * 10 - 5;
    sprite.invertU = (Math.random() < 0.5);

    sprite.playAnimation(0, 9, true, 100);
}

Please note the usage of invertU for inverting horizontally the texture.

The previous code produced the following rendering:

In addition to sprites, babylon.js also supports 2D layers in order to let you add backgrounds or foregrounds:

 var background0 = new BABYLON.Layer("back0", "Layer0_0.png", scene);
 var background1 = new BABYLON.Layer("back1", "Layer1_0.png", scene);
 var foreground = new BABYLON.Layer("fore0", "Layer2_0.png", scene, false);

The last boolean defines if the layer is background (or not).

The resulting render is the following:

Animations

There are two ways of animating properties in babylon.js: You can do it by yourself using JavaScript (see previous samples) or you can use the animations engine.

The animations engine is based on objects called Animation(!!). An Animation is defined by various properties and a collection of keys. Every key represents the value of the Animation at a given time. Once an Animationis created you can add it to the animations property of a given object:

// Animations
var animation = new BABYLON.Animation("anim0", "scaling.x", 30, BABYLON.Animation.ANIMATIONTYPE_FLOAT, 
                                                                BABYLON.Animation.ANIMATIONLOOPMODE_CYCLE);

var keys = [];
keys.push({
    frame: 0,
    value: 1
});

keys.push({
    frame: 50,
    value: 0.2
});

keys.push({
    frame: 100,
    value: 1
});

animation.setKeys(keys);

box.animations.push(animation);

Animations can work on types:

  • float (BABYLON.Animation.ANIMATIONTYPE_FLOAT)
  • Vector3 (BABYLON.Animation.ANIMATIONTYPE_VECTOR3)
  • Quaternion (BABYLON.Animation.ANIMATIONTYPE_QUATERNION)

They can have various behaviors when they hit their upper limit:

  • Use previous values and increment it (BABYLON.Animation.ANIMATIONLOOPMODE_RELATIVE)
  • Restart from initial value (BABYLON.Animation.ANIMATIONLOOPMODE_CYCLE)
  • Keep their final value (BABYLON.Animation.ANIMATIONLOOPMODE_CONSTANT)

So using the previous code and this small line will launch the animation:

scene.beginAnimation(box, 0, 100, true);

And give us the following scene:


образ

Advanced textures

Textures can obviously be based on pictures but you have the opportunity with babylon.js to use Advanced features to generate textures at runtime.

Dynamic textures

A dynamic texture uses a canvas to generate its content.

Creating and affecting a dynamic texture is simple:

var dynamicTexture = new BABYLON.DynamicTexture("dynamic texture", 512, scene, true);
dynamicTexture.hasAlpha = true;
material.diffuseTexture = dynamicTexture;

Once the texture is created, you can updated it when you want (for instance here every time the scene is rendered) using the getContext and update functions:

var count = 0;
scene.beforeRender = function() {
    // Dynamic
    var textureContext = dynamicTexture.getContext();
    var size = dynamicTexture.getSize();
    var text = count.toString();

    textureContext.save();
    textureContext.fillStyle = "red";
    textureContext.fillRect(0, 0, size.width, size.height);

    textureContext.font = "bold 120px Calibri";
    var textSize = textureContext.measureText(text);
    textureContext.fillStyle = "white";
    textureContext.fillText(text, (size.width - textSize.width) / 2, (size.height - 120) / 2);

    textureContext.restore();

    dynamicTexture.update();
    count++;
};

The result is the following (yes I know, I’m not a designerSourire)


образ

The getContext returns a true canvas’ context so everything you can do with a canvas is available with a dynamic texture.

Mirrors

Mirrors textures are another kind of dynamic textures. You can use them to simulate “mirrors” which mean that babylon.js will compute for you the reflection and fill the texture with the results. A Mirror texture must be set in the reflectionTexture channel of a standardMaterial:

// Mirror
var mirror = BABYLON.Mesh.createBox("Mirror", 1.0, scene);
mirror.material = new BABYLON.StandardMaterial("mirror", scene);
mirror.material.diffuseColor = new BABYLON.Color3(0.4, 0, 0);
mirror.material.reflectionTexture = new BABYLON.MirrorTexture("mirror", 512, scene, true);
mirror.material.reflectionTexture.mirrorPlane = new BABYLON.Plane(0, -1.0, 0, -2.0);
mirror.material.reflectionTexture.renderList = [box, sphere];

A mirrorTexture is created with a parameter that specify the size of the rendering buffer (512x512here). Then you have to define the reflection plane and a render list (the list of meshes to render Inside the mirror).

The result is pretty convincing:


образ

Importing scene from 3D assets

Babylon.js can load scenes from a file format called.babylon. This file format is based on JSON and contains all required data to create a complete scene.

BabylonExport

A .babylon can be created with a custom tool I developed: BabylonExport. This command line tool can generate .babylon file from various file formats:

  • .FBX
  • .OBJ
  • .MXB

BabylonExport takes 2 parameters:
BabylonExport /i:»Test scenes\Viper\Viper.obj» /o:»c:\Export\Viper»

The tool can be found here: http://www.babylonjs.com/babylonexport.zip

Warning: The tool requires XNA 4.0 runtime:http://www.microsoft.com/en-us/download/details.aspx?id=20914

Blender

You can also produce .babylonfiles with Blender. To do so, please download the exporter script right here: http://www.babylonjs.com/Blender2Babylon.zip.

To install it, please follow this small guide:

  • Unzip the file to your Blender’s plugins folder (Should beC:\Program Files\Blender Foundation\Blender\2.67\scripts\addonsfor Blender 2.67 x64).
  • Launch Blender and go to File/User Préférences/Addon and select Import-Export category. You will be able to activate Babylon.js exporter.

образ

  • Create your scene
  • Go to File/Export and select Babylon.js format. Choose a filename and you are done !

образ

You are now able to produce .babylonscene! The exporter will be able to support more and more options in the future but right now the following features are already supported:

  • Cameras
  • Lights
  • Meshes
  • Material and Multimaterials
    • Diffuse
    • Ambient
    • Opacity
    • Reflection
    • Emissive
  • Collisions (with custom UI Inside Blender)

And much more to come…

The backlog is full of cool things among which we can note:

  • Bump mapping
  • Spot lights
  • Hemispheric lights
  • Video textures
  • Bones
  • Morphing
  • Refraction
  • Fog
  • Water shader

The main goal of babylon.js is to provide you with a strong framework for simplifying 3D. Use it freely as a foundation for your games and applications.

And now go to http://www.babylonjs.com and start exploring the wonderful world of 3D rendering!