Я знаю Blender много лет, использую Unity для своих игр, но полный новичок в WebGL. Однако, будущее именно за этой технологией, и неплохо было бы разобраться с ее использованием. К сожалению, экспортер Unity для WebGL пока не рабочий и нужен иной инструмент.

Я не люблю изобретать велосипед и предпочитаю готовые решения. Найденный ранее Blend4Web выглядит очень заманчиво (интеграция с Blender, качественный экспортер и т.д.), но ведь существует немало других библиотек и платформ для работы с WebGL.

Извечный вопрос: что выбрать новичку? Я поработал с платформами Blend4Web и Three.js. Что из этого вышло — читайте дальше.
image


Базовые знания:
  • Blend4Web тесно интегрирован с Blender, поэтому требуется установленный и настроенный соответствующим образом пакет Blender.
  • Three.js — программная библиотека. Умеет импортировать сцены и объекты из того же Blender. Для этого также нужно установить специальный плагин в редактор.

Я не буду подробно рассматривать процесс настройки обеих платформ, но коснусь одного важного момента. Так как системы предназначены исключительно для создания приложений WebGL, то для тестирования их необходимо поднимать локальный сервер. В случае с Blend4Web, после развертывания SDK, вы уже получите рабочий сервер по адресу: localhost:6687 (порт можно изменить в настройках). Для Three.js такой сервер придется устанавливать отдельно. Например, использовать WampServer или выбрать подходящий из папки Utils (SDK Three.js).

Впрочем можно поступить проще и настроить браузер для загрузки локальных данных. Только учтите, что с таким веб-обозревателем не стоит выходить в реальный Интернет.

Работа с Three.js


Думаете — привычный “Hello World”? А вот и нет, специализированное “hello”, но только с точки зрения 3D. В первую очередь меня интересует практическое применение и удобство использования. Поэтому я попробовал сделать самое примитивное — стандартную сцену с объектами, камерой, освещением и простой анимацией.

Кроме того, на изучение и работу с каждой платформой предполагалось затратить не более 3 часов (для чистоты эксперимента). Этакий марафон с нуля.

Начальный выбор пал на Three.js. Итак стартую…

Все начинается с документации. Она у движка лаконична и имеет индивидуальные небольшие примеры почти для каждой функции. В SDK находится большое количество практических проектов.

Сначала рассмотрим заготовку HTML:

<html>
<head>
<title>Test</title>
    <script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.3/jquery.min.js"></script>
    <script type="text/javascript" src="three.js"></script>
</head>

<body>
    <div>
        <div id="webGL-container" >
    </div>
    <script type="text/javascript" src="main.js"></script>
</body>
</html>

Эта универсальная заготовка и ничего интересного здесь нет. Библиотека Three.js подключается в строке . Имеется более компактный вариант three.min.js. Однако, я решил остановится на полной версии. Исполняемый код вынесен в отдельный файл main.js. Именно в нем я собираюсь хранить код работы с движком.

Создание кода для Three.js начинается с объявления сцены, камеры и рендера:

var scene = new THREE.Scene();
var camera = new THREE.PerspectiveCamera( 75, window.innerWidth/window.innerHeight, 0.1, 1000 );
var renderer = new THREE.WebGLRenderer();

После этого можно приступить к созданию объектов. В моем случае я остановился на обычном кубе.

var geometry = new THREE.BoxGeometry( 1, 1, 1 );
var material = new THREE.MeshBasicMaterial( { color: 0xffffff } );
var cube = new THREE.Mesh( geometry, material );

Создал геометрию, настроил цвет, смешал и вот он Куб. Ах, да, еще нужно добавить его в сцену командой scene.add( cube );

Теперь с этим объектом можно делать что угодно. Например, повернуть его немного по одной из оси.

cube.rotation.z += 0.1;

Точно также необходимо сместить камеру, ведь по умолчанию она создается в координатах (0,0,0), как и куб.

camera.position.z = 5;

И последний завершающий штрих — это инициализация и вызов рендера. Целиком базовый код тестовый сцены выглядит следующим образом:

$(function() {
var scene = new THREE.Scene();
var camera = new THREE.PerspectiveCamera( 45, window.innerWidth/window.innerHeight, 0.1, 1000 );
var renderer = new THREE.WebGLRenderer();

renderer.setSize (window.innerWidth,window.innerHeight);
renderer.setClearColor (0x000000);

var geometry = new THREE.BoxGeometry( 1, 1, 1 );
var material = new THREE.MeshBasicMaterial( { color: 0xffffff } );
var cube = new THREE.Mesh( geometry, material );

scene.add( cube );
camera.position.z = 5;
cube.rotation.z += 0.1;

$("#webGL-container").append (renderer.domElement);
renderer.render(scene, camera);
});

Кое-какие моменты в коде я не объяснил, но важно другое, осознание того, что для объявления примитивного куба в сцене использовалось аж 4 строки. Это навеяло грустные размышления о полноценных моделях с текстурами, анимацией.

После знакомства с документацией примерно стали понятны возможности Three.js. Несколько видов камеры, полноценные типы освещения, поддержка материалов, текстур, анимации, сценические эффекты — вполне внушающий доверия список. В основном все это богатство добавляется в сцену указанным ранее способом. Например, лампу можно создать и разместить следующим образом:

var light = new THREE.PointLight(0xffffff);
light.position.set(-100,200,100);
scene.add(light);

Как инди-разработчик игр я понимал, что отсутствие редактора ставит крест на использовании этой библиотеки, по крайне мере для меня. Но люди же работают с ней и делают прикольные вещи! И покопавшись на сайте разработчиков, я нашел две интересные утилиты: плагин под Blender и некий редактор, заточенный исключительно под Three.js.

Первым делом я попробовал поработать с плагином. Помните какая была поставлена задача? Создать сцену с объектами, камерой и светом.

Допустим, это должен быть куб, лежащий на плоскости. Действительно, нет проблем нарисовать все это с помощью функций движка, а параметры размещения, ротации, масштаба перенести с того же Blender, предварительно создав в нем эту сцену. Но представим на минуту типичный игровой уровень, состоящий из сотен объектов, и станет тошно.

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

Эпопея началась с попытки загрузки всего одной модели. Нет никаких нареканий к работе экспортера в JSON. Код генерируется интуитивно понятно и сложных настроек там нет. Но внедрить его в движок оказалось непросто.

API Three.js содержит более десятка загрузчиков для различных объектов. Естественно, я выбрал универсальный THREE.JSONLoader. Этому способствовала официальная документация и большое количество уроков, которые я просмотрел. Вот только ни черта это не работало!

//инициализация
var loader = new THREE.JSONLoader(); 
loader.load( "plane.json", createScene1 ); 

//обработка после загрузки объекта
function createScene1( geometry, materials ) {
mesh = new THREE.Mesh( geometry, new THREE.MeshFaceMaterial( materials ) );
    scene.add( mesh );
}

Я экспериментировал с разными настройками экспортера, пробовал иные конструкции загрузчика, почерпнутые из уроков в сети Интернет, альтернативные функции — результата ноль. Консоль упорно мне твердила: “Некорректный JSON ”, а экран показывал девственно чистый вид.

Как вы думаете, где была загвоздка? Смешно сказать — в отсутствии света. Да, это дурацкая ошибка человека, привыкшего работать в полноценных редакторах. В том же Blender или Unity, удаление источников света позволяло видеть объекты в сцене, тут же чистый программный код. Но вот отсутствие в официальных туториалах такой вроде бы явной особенности, попортило немало моей крови. Кстати, ошибка “Некорректный JSON ” так и не пропала. Ну да ладно, перехожу к загрузке сцены.

Собственно — это самое главное, что меня интересовало. Возможность настроить и расставить объекты в Blender, перегнать их в JSON и управлять ими в коде. Поиск в сети Интернет вывел меня на функцию THREE.SceneLoader. Вроде то, что нужно!

Вот только в официальной справке по API подобной функции не нашлось. Дальнейшие поиски в сети принесли информацию, что данная функция была удалена за ненадобностью. Это был крутой облом…

Вариант с расстановкой объектов в Blender и переноса ручками в код я отмел сразу. Продуктивность такого подхода сомнительна. К тому же, пришлось бы учитывать несоответствие систем координат Blender и Three.js. Так что я решил посмотреть предлагаемый разработчиками Three.js редактор. Он доступен по ссылке на официальном сайте.

Итак, что мы имеем. Запускаемый в браузере трехмерный редактор позволяет импортировать модели, расставлять их и выполнять настройку. Обратно можно экспортировать отдельный объект, сцену в виде JSON и цельного приложения с оберткой в HTML. Изучать редактор я не стал, так как до этого не нашел функции загрузки сцены JSON в свой проект. Кроме того, два часа ночи сигнализировало, что время отведенное на Three.js явно закончилось.

Рабочий код тестового приложения, если кому интересно. Экспериментальные конструкции удалил:

$(function() {
var container,scene,camera,render,cube;

init();
render();

function init() { 
container = document.getElementById( 'webGL-container' );
camera = new THREE.PerspectiveCamera( 40, window.innerWidth / window.innerHeight, 1, 10000 );
camera.position.z = 10;

scene = new THREE.Scene();

light = new THREE.DirectionalLight( 0xffffff );
light.position.set( 0, 0, 1 ).normalize();
scene.add( light );

var loader = new THREE.JSONLoader();
loader.load( "cube.json", createScene1 );

renderer = new THREE.WebGLRenderer( { antialias: true } );
renderer.setPixelRatio( window.devicePixelRatio );
renderer.setSize( window.innerWidth, window.innerHeight );
container.appendChild( renderer.domElement );                
}
    
function createScene1( geometry, materials ) {
cube = new THREE.Mesh( geometry, new THREE.MeshFaceMaterial( materials ) );
    scene.add( cube );
}
            
            
function render() { 
    requestAnimationFrame( render );
    cube.rotation.y +=0.01; //вращение куба
    renderer.render( scene, camera );
}
});


Работа с Blend4Web


Я уже рассматривал Blend4Web с точки зрения дизайнера и мне было любопытно, а что может предложить эта платформа программисту. Здесь, по сравнению с Three.js, наоборот опасаешься слишком тесной интеграции с редактором и тем самым урезании возможности программирования.

Blend4Web предлагает всю часть визуальной работы выполнять в Blender: настраивать сцену, создавать модели и расставлять их, управлять физикой или частицами. Поэтому такой проблемы, как с Three.js, и в помине нет. Но вот получить сложное приложение только визуальными средствами не удастся.

Задача остается все той же — создание простой сцены с несколькими объектами, камерой, источником света. Плюс несложная анимация одного объекта программным путем. И, разумеется, ограничение времени работы 3 часами. Вот и посмотрим, насколько удобной и полной окажется документация, интуитивна работа с API. Поехали…

На официальном сайте имеются четкие указания о расположении файлов проекта в папках SDK. Так проекты Blender хранятся в папке SDK/Blender/ProjectName, а ресурсы и собственно результат экспорта в SDK/Deploy/Assets/ProjectName. Первоначально это выглядит снобизмом и не понимаешь смысла столь жестких требований, но со временем доходит, зачем это нужно.

После установки SDK, автоматически поднимается сервер и становится доступным по адресу localhost:6687. На стартовой странице предлагается документация и примеры, но главное — сервер можно использовать для тестирования своих приложений.

Я создал несложную сцену в Blender с указанными ранее объектами и сохранил все данные, как требует справка SDK. Первый сюрприз поджидал при попытке экспорта в JSON. В настройках экспортера есть опция Run in Viewer и если ее включить, то после экспорта результат немедленно откроется в браузере в специальном просмотрщике. В нем окончательно можно проверить свою сцену и даже выполнить настройку всех параметров объектов или окружения.

Итак, результат экспорта — это два файла: json и bin. Последний содержит массивы данных по моделям. Теперь настало время создать запускаемый файл.

Первый вопрос, который меня озадачил — это не как писать, а куда сохранять скрипты и HTML. Так как разработчики Blend4Web призывают использовать определенные папки для проекта, то и логично было бы предположить, что и для программных частей предусмотрено свое место. Подтверждения этому я не нашел и просто создал файлы в папке с Deploy/Assets/ProjectName.

По традиции я вынес исполняемый код в отдельный скрипт. В связи с этим обертка HTML выглядит следующим образом:

<!DOCTYPE html>
<html>
<head>
    <script type="text/javascript" src="b4w.full.min.js"></script>
    <script type="text/javascript" src="main.js"></script>
    <style>
        body {
            margin: 0;
            overflow: hidden;
        }

        #container_id {
            position: absolute;
            width: 100%;
            height: 100%;
        }

    </style>
</head>

<body>
    <div id="container_id"></div>
</body>

</html>

В HTML ничего интересного нет, поэтому перейдем к main.js. Инициализация движка и загрузка сцены осуществляется в несколько этапов. Сначала подключаем необходимые модули:

var app = b4w.require("app");
var data = b4w.require("data");

Затем выполняем инициализацию:
app.init({
canvas_container_id: "container_id",
physics_enabled: false,
autoresize: true,
callback: load_cb
});

По названию аргументов, я думаю, понятно, что делает функция init. После инициализации происходит вызов функции load_cb. В ней можно разместить загрузку JSON.

function load_cb() {
    data.load("test.json", loaded_cb);
}

Последняя функция в тестовом скрипте — это loaded_cb, которая вызывается после загрузки сцены. Здесь создается логика приложения.

function loaded_cb() {
//что-то там
//например можно включить управление камерой в сцене
    app.enable_controls();
    app.enable_camera_controls();
}

Загрузка сцены в Blend4Web оказалась делом очень простым. Все, что я включил в Blender — движок корректно отобразил. Нет проблем с расстановкой объектов, включением теней, настройкой мешей и т.д. Но вот как дело обстоит с доступом к отдельным объектам? Понятное дело, что можно сделать анимации в Blender и запускать их программно. Я уверен в этом, хотя и не искал. Но мне нужно простое вращение вокруг оси, по принципу выполненному для Three.js (cube.rotation.y +=0.01).

Сделать это оказалось сложнее, чем я рассчитывал. API Blend4Web имеет функцию, позволяющую вызывать пользовательские процедуры каждый кадр, и с этой стороны все в порядке. Однако я не нашел возможности непосредственного вращения по осям. Можно использовать только кватернионы. В связи с этим код получился несколько громоздким:

function render () {
var Cube = scene.get_object_by_name("Cube");
var _angle = 0.05;
var _vec4;
var obj_quat = transform.get_rotation(Cube, _vec4);
quat.rotateY(obj_quat, _angle, obj_quat);
transform.set_rotation_v(Cube, obj_quat);
}

Небольшие итоги


Я поставил перед собой простую и четкую задачу — изучить возможности обеих платформ на примере стандартной сцены. Условия были одинаковые, а вот результат оказался не однозначный.

Three.js — это популярная библиотека, для которой написано множество уроков, в том числе и на Хабре. Однако, базовые функции создавались мною со скрипом. Баснословное время потрачено на простейшую загрузку модели в сцену. Могли бы, наверное, в официальный туториал внести информацию об обязательных источниках света. Ну, хотя бы, для таких “крутых” программеров, как я.

Самое главное — я привык работать с комфортом и видеть то, что делаю. Мне нужен редактор для подготовки сцены и совсем не интересны проблемы, связанные с перегоном данных для движка. Я сел делать игру, а не ковыряться с неработающими базовыми функциями. Время — деньги, а Three.js отнял его предостаточно.

Ситуация с Blend4Web выглядит гораздо лучше, но не все так блестяще.

Вся подготовка сцены осуществляется в полноценном редакторе и даже не задумываешься, как движок будет все это воспринимать — это его задача, а не разработчика. Однако, всплыли проблемы, связанные с непосредственным программированием.

Много времени ушло на первоначальное чтение документации по части работы с SDK. Все же хотелось сделать так, как советуют разработчики. Например, они предлагают использовать специальный скрипт Python для сборки готового приложения. С его помощью можно упаковать данные, собрать в кучу разбросанные файлы и т.д. Выглядело заманчиво, но у меня не пошло. Выскочили ошибки в скрипте Питона, которые я даже не стал рассматривать.

Документация Three.js изобилует множеством маленьких примеров. К сожалению, для Blend4Web их нет. Поэтому приходилось листать уроки и смотреть обширные листинги. Взял немного с одной страницы, еще чуть-чуть с другой. В итоге написал код, который с успехом мог бы быть уже в примерах документации SDK. Да, есть такое приложение в SDK — Code Snippets, демонстрирующее различные возможности платформы с показом исходников. Но хотелось бы именно маленьких и простых примеров. Как двигать объект, как вращать модель, как привязать выполнение функции к обновлению кадра и т.д. Так, для вращения объекта я взял кусок кода из примера игры на официальном сайте. Но может быть есть более оптимальный вариант вращения, нежели через непосредственное изменение кватернионов? В итоге я использовал только то, что нашел.

И все равно, с Blend4Web чувствуешь себя комфортнее. Эта платформа гораздо дружелюбнее к пользователю, нежели рассмотренный оппонент.

Сцена Three.js
Сцена Blend4Web

Комментарии (41)


  1. xGromMx
    16.07.2015 09:59
    +2

    www.babylonjs.com имеет экспортер из Unity doc.babylonjs.com/page.php?p=25111


    1. gfxdevrus
      16.07.2015 10:29

      Извращение =) А скелетную анимацию как делать?


      1. gfxdevrus
        16.07.2015 12:01

        Забавно они пишут списки поддерживаемого функционала:

        Name
        Geometry (Positions & normals)
        Position
        Rotation
        Scaling
        Texture coordinates (2 channels)
        Check collisions
        Receive and cast shadows
        Animations (position, rotation, scaling)

        У экспортера меша уникальные возможности: экспорт имени, позиции, поворта и маштабирования, в то время как UV-координаты текстур имеют целых два канала!


  1. gfxdevrus
    16.07.2015 10:09
    +1

    Спасибо за замечания, учтем.


    1. gfxdevrus
      16.07.2015 12:17

      Насчёт рабочей директории для файлов html/javascript/css. Для этого в SDK предусмотрено специальное место: apps_dev. Оттуда минифицированные и пригодные для заливки на сервер файлы попадают в deploy/apps. За всё отвечает скрипт project.py. Согласен, с точки зрения начинающего пользователя программировать не так просто, поэтому мы планируем существенно расширить возможности движка с точки зрения удобства создания и поддержки приложений. В наших планах не только расширение утилит командной строки, но и написание полноценного GUI для всего этого дела.


      1. Prand Автор
        16.07.2015 12:41

        О, значит я не туда запихал свои скрипты (я изначально сохранял обвертку и код в assets). Теперь понятно, почему сборщик (project.py) выдавал ошибки :)


  1. Prand Автор
    16.07.2015 10:10

    xGromMx
    О, если честно, не знал! И насколько работоспособна эта штука?
    С babylon я особо не сталкивался. Можно будет глянуть на него… А так Blend4web мне все больше нравится, полнофункциональный редактор+webgl сильно импонирует.


    1. xGromMx
      16.07.2015 10:35

      Также, в отличии от Blend4Web имеет бесплатные примеры и полностью opensource.


      1. gfxdevrus
        16.07.2015 10:48
        -1

        Также, в отличии от Blend4Web имеет бесплатные примеры

        Обманываете однако. См. наши примеры на гитхабе.

        и полностью opensource.

        Когда Юнька успела стать опенсорс? Прокладка для вавилона не считается.


        1. xGromMx
          16.07.2015 10:52

          Где вот этот пример напимер? www.blend4web.com/en/demo/capri и многие другие


          1. gfxdevrus
            16.07.2015 10:53
            -1

            Где вот этот пример напимер? www.blend4web.com/en/demo/capri и многие другие


            Не вышел еще. И на гитхабе он не поместится.


            1. xGromMx
              16.07.2015 10:57

              А мне кажется, просто вы его включили в платную версию:

              This software is distributed under the license which is suitable to use in commercial projects. Additionally, it contains source files of models and scenes and the source code of demo applications. Users may create applications without releasing the source code.


              1. gfxdevrus
                16.07.2015 10:59

                А мне кажется, просто вы его включили в платную версию:

                То-то я гляжу поисковый запрос «blend4web torrent» набирает популярность :)


                1. xGromMx
                  16.07.2015 11:00
                  +1

                  И сколько же это должен весить пример, чтобы на гитхаб не поместиться?


                  1. gfxdevrus
                    16.07.2015 11:03
                    -1

                    И сколько же это должен весить пример, чтобы на гитхаб не поместиться?

                    Коммерческий SDK у нас большой, в zip уже 2 Gb, а с тем примером и до 3-х дойдет. В основном, понятно, графика.


                    1. xGromMx
                      16.07.2015 11:05

                      На гитхаб и больше помещали…


                      1. gfxdevrus
                        16.07.2015 11:06

                        На гитхаб и больше помещали…

                        Не дождетесь :)


                        1. xGromMx
                          16.07.2015 11:08

                          Вы это про что?


                          1. gfxdevrus
                            16.07.2015 11:10
                            -3

                            Вы это про что?

                            Про задавание странных вопросов.


                            1. xGromMx
                              16.07.2015 11:12
                              +1

                              Думаю на этом разговор с вами закончен.


                              1. gfxdevrus
                                16.07.2015 11:12
                                -2

                                Думаю на этом разговор с вами закончен.

                                Всего хорошего!


                                1. domix32
                                  16.07.2015 15:08

                                  Это какая-то фишка цитировать комментарий выше полностью?


                                  1. gfxdevrus
                                    16.07.2015 16:52
                                    -1

                                    Человек выше несколько вывел меня из себя, посему получились такие короткие, но бессвязные словесные перепалки


  1. gfxdevrus
    16.07.2015 12:25

    Андрей, хотелось бы узнать ваше мнение по поводу нашего нового интерфейса (того что появился с версии 15.06)


    1. Prand Автор
      16.07.2015 12:37
      +1

      Небо и земля. Я начал знакомство с версией 15.05. Думаю, вы помните, сколько гневных выпадов было в прошлой статье по этому поводу :)

      В текущей версии (15.06) значительно, не просто косметически, а значительно (!) улучшена и упрощена работа с Blend4Web. Специальный профиль, убирающий «ненужные» функции Blender и BGE — это очень важный шаг! Плюс хочу отметить, что некоторые глобальные функции наконец-то получили автоматическое включение/выключение (типа теней).

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


      1. gfxdevrus
        16.07.2015 12:47

        Спасибо. Может быть вы знаете, в этом есть вклад и разработчиков Блендера. Они наконец-то приняли наш патч developer.blender.org/D1188, что позволило нам включить поддержку нодовых материалов в новый интерфейс. Ещё несколько патчей ожидают рассмотрения, так что нам ещё работать и работать.


        1. Prand Автор
          16.07.2015 13:47

          Может быть вы знаете, в этом есть вклад и разработчиков Блендера. Они наконец-то приняли наш патч developer.blender.org/D1188,

          Что и доказывает ценность вашей разработки и заинтересованность создателей Blender :)


      1. engine9
        16.07.2015 14:55

        Согласен, новый релиз прям действительно загляденье.


  1. Prand Автор
    16.07.2015 12:39

    Забыл приписать небольшое пожелание… Хотелось бы новых функций в API (простые Translate, Rotate безо всяких извратов с кватернионами) и примеров, побольше маленьких сниппетов в документации API.


    1. gfxdevrus
      16.07.2015 12:55

      По поводу API учтём. Документацию обязательно нужно улучшать, однако времени на всё не хватает — сейчас под эту задачу ищем технического писателя.


  1. Large
    17.07.2015 01:10

    К сожалению, экспортер Unity для WebGL пока не рабочий и нужен иной инструмент.

    Он вполне себе рабочий, за исключением пары багов которые худо-бедно можно обойти сцена выходит и по качеству и по размеру сравнимой с релизом под плагин.


    1. Prand Автор
      17.07.2015 08:55
      +1

      Нет. Это превью-версия. Тестировать, пробовать в самый раз. Продакшн невозможен. Невероятно длительный экспорт, неправильный вывод даже стандартных материалов, странная работа скриптов (в моем случае, скрипты корректно работавшие для webplayer'a отказывались работать в webgl. Использовались только стандартные функции API).

      Конечно, это только мое мнение.


      1. Large
        17.07.2015 09:59

        Сочувствую. Да из за превью лезут баги (например с тенями), но в целом все работает корректно. Некоторые люди даже полноценные игры портируют на вебжл. Все возможно — было бы желание =)

        По материалам: если пересвет или недосвет — проверьте нормали. Используйте 5.1.1 — она для вебжл подходит лучше всего.


    1. gfxdevrus
      17.07.2015 12:22

      Думаю, что проблемы у Unity носят более фундаментальный характер, чем просто «пара багов». Читая их дорожную карту приходишь к выводу о том, что недавний стремительный успех WebGL застал их в расплох, и они пребывают в растерянном состоянии. В частности, поддержка мобильных браузеров (а это уже четверть всего трафика) вообще не рассматривается в ближайшей перспективе.


      1. Large
        17.07.2015 14:48

        Для мобильных — есть приложения и это нормальный подход, серьезную сцену, а не просто куб со светом они выдерживают весьма плохо. Что касается Юнити — они готовились сильно заранее, как и продолжают делать с вебжл2 и веб-асамбли. Релиз нескольких крупных игр под вебжл на юнити (например дед триггер и асасин крид) как раз и доказывает его готовность. К тому же большие игроки дают фидбек и поддержка улучшается от версии к версии. Опять же проект серьезно финансируется, имеет рнд команду и постоянно пробует новые функции, потому говорить о том, что их застали врасплох как минимум не корректно.

        Вот если говорить про не игровое 3д для сайтов, то тут юнити пожалуй действительно тяжеловесен и лучше пользоваться простыми низкоуровневыми библиотеками типа threejs или babylon (последний не пробовал, но демки впечатляют).


        1. gfxdevrus
          17.07.2015 15:10

          Для мобильных — есть приложения и это нормальный подход

          В прошлом году Apple заставила всех переходить на новый язык программирования и графические АПИ. Сколько будем это терпеть? Да и не всякий готов устанавливать к себе на планшет или телефон приложение, на сайте гораздо все проще и быстрее.
          Что касается Юнити — они готовились сильно заранее, как и продолжают делать с вебжл2 и веб-асамбли

          Удивляет, что они не сделали нормальную поддержку WebGL 1.0, а уже нацелились на WebGL 2.0. Как бы намекает на квалификацию манагеров. Web Assembly сам по себе тупиковый путь развития, фактически видоизменные плагины, да еще надо убедить 100% браузерных вендоров в том, что им это нужно.
          Релиз нескольких крупных игр под вебжл на юнити (например дед триггер и асасин крид) как раз и доказывает его готовность.

          Первое — это не крупная игра, в второе в WebGL запихнуть невозможно, перепутали наверно с одноименной демкой вавилона?
          Опять же проект серьезно финансируется, имеет рнд команду и постоянно пробует новые функции, потому говорить о том, что их застали врасплох как минимум не корректно.

          Чем крупнее команда, и чем тяжелее груз накопленного, тем сложнее перестроиться на новые технологии. Динозавры тоже были большие.
          Вот если говорить про не игровое 3д для сайтов, то тут юнити пожалуй действительно тяжеловесен и лучше пользоваться простыми низкоуровневыми библиотеками типа threejs или babylon (последний не пробовал, но демки впечатляют).

          Blend4Web даже не рассматриваем? А напрасно, оба эти движка настолько нам уступают, что мы их даже не рассматриваем в качестве конкурентов. Мы искренне радуемся их развитию, потому что мы сами за open source.


          1. Large
            17.07.2015 15:38

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

            Нормальную сделали, на уровень «экспериментально» полностью годится, при желании все можно заставить работать. Это нормальный процесс развития, так развивается меса в линуксе. На счет веб асамбли я все-таки больше склонен верить решению крупных корпораций, поставщиков популярных браузеров, которые уже договорились и своему опыту и пониманию отличия веб есамбли от плагинов, чем вам.

            Дед триггер достаточно крупная игра по сравнению с кубом и светом, да и в принципе. race.assassinscreedpirates.com. Есть много демо мобильных игр портированных на вебжл. Работает и в хроме, и в фф, и в опере.

            В юнити много мелких команд. И навряд ли компания которая перестроилась на предоставление услуг, а не продаже движка вдруг вымрет.

            Не рассматриваем, в процесс не вписывается + мало специалистов по блендеру. Я честно говоря не вижу его ниши (для сайтов — много, для игр — мало), но мне его продвигать и не нужно, это ваша работа.


            1. gfxdevrus
              17.07.2015 18:01

              Не сомневаюсь, что технологии эти хорошие. Для Apple. С точки зрения разработчика, это полнейший зоопарк.

              Падающие браузерные вкладки говорят мне другое о готовности Unity-WebGL к развертыванию на сайтах. Web Assembly ничего не решает, даже если когда-нибудь будет реализован во всех браузерах. Для веб-разработки он как пятое колесо в телеге (см. PPAPI).

              Насчет игры «ассасин крид» вы погорячились, речь идет о довольно компактном техно-демо движка babylon.js, а не Unity. Все же сами попробуйте запустить и посмотрите.

              По поводу Блендера. Единственная причина, по которой Блендер до сих пор не так широко распространен, это пиратство. По функционалу и удобству он сравним с пропритарными аналогами.

              На счет ниши мы особо не беспокоимся — после выхода на пенсию Flash (и, возможно, Unity), сейчас наблюдается большой спрос на технологии такого рода.


              1. Large
                17.07.2015 20:34

                Не могу сказать, металом не пользуюсь, отзывы знакомых хорошие. Чем они хороши для Apple — тоже не могу сказать.

                Падающие браузерные вкладки говорят о проблемах с вашей сборкой, что-то не доготовили, что-то не оптимизировали или не выключили. Веб есамбли не коректо сравнивать с PPAPI, и к веб разработке он не имеет никакого отношения. Более того все современные движки уже умеют работать с asmjs так что веб есамбли будет внедрен естественным образом.

                Да, это не правильная ссылка, но я точно видел асасин крид на одной из юнити демок про веб. В любом случае демок хватает — их показывают на юнайт и других юнити встречах.

                Блендер довольно широко распространен, просто не все компании с ним работают. Майя — стандарт де факто многие вспомогательные инструменты разрабатывают именно под майю. Пиратство тут не при чем, просто полный цикл становится удобнее и переучивать людей никто не хочет.

                Да, благодаря веб есамбли доставка мультимедийного контента через веб упростится и многие тяжелые игры станут доступны прямо из браузера. Юнити плагин продолжает работать везде кроме хрома и хромиума, так что о его пенсии говорить рано.


        1. RunneRik
          17.07.2015 15:13

          Будьте добры, помимо Ассасин Крид и Деад Тригира (начало 2014г), покажите серьёзные проекты на Unity/Webgl…
          gfxdevrus имеет введу что вебгл у юнити сырой, было бы все нормально, разработчики не занимались бы тем, что заставляют своих игроков переходить с Хрома на Фаирфокс или Яндекс.Браузер.


          1. Large
            17.07.2015 15:41

            Посмотрите в юнити блоге. По поводу поддержки — скорей всего вы используете скрипты деплоя предложенные юнити, а не свои. Их скрипты ругаются на ИЕ10 и Опреа. При том в опере все работает как есть, а в ие10 нет аудио апи потому работает без звука.

            Проблемы конечно есть, движок сыроват, несравнимо проще деплоить под вебплеер. Но говорить что работать невозможно я бы не стал!