Хождение по мукам или как разместить 3D в онлайн
“О, это просто”, - скажите вы. “Да это просто!”, - посчитал я и оказался не прав. Кажется в наше время полно всевозможных платформ и библиотек WebGL, а также специализированных сервисов - разместить на сайте 3D несложно. Но на практике все оказалась совсем не так.
Все началось с появления на горизонте интересного проекта, несложного в исполнении, но массивного объемом. Задач предлагалось несколько:
- cоздать объекты с текстурами;
- предоставить готовые модели с плеером для простой интеграции в веб-страницу.
Первоначальный план мой был таков: модели делаю в Blender, а обвертку вокруг них в Unity. Все дело экспортирую в WebPlayer и начинаю считать денежки. Никаких проблем не предполагалось, опыт работы с обеими программами большой, практика достаточная. Короче, садись и работай, но грянул гром…
“Какой веб-плеер?! В хроме не показывает, в firefox под вопросом. Нет, хочу шоб работало везде и без плагинов!”. Примерно такими словами стимулировал меня заказчик на подвиги.
Везде и без плагинов - это WebGL. Здесь “кроссплатформенный” Unity, увы, не помощник. Уж больно у него сырой экспортер. Вот так вопрос перегона моделей в WebGL (и не забудьте с плеером!) стал приоритетным.
Сроки горят, время на изучение множества библиотек и платформ просто нет и надо было сделать выбор. Я недавно нашел в сети Интернет замечательный плагин Blend4Web. Полная интеграция с Blender, все что делаешь в редакторе - получаешь на выходе в WebGL. Однако, есть одна проблема, для коммерческого использования нужно платить денежки. Вопрос, а захочет ли заказчик расстаться с некой суммой для легального использования Blend4Web? У меня уверенности в этом не было и поэтому перешел к рассмотрению других кандидатов.
Я развил бурную деятельность и стал расспрашивать народ на форумах: “Ау, кто и чем перегоняет из Blender в WebGL?”. В ответ тишина, ощущение, как в лесу - аукаешься, а слышишь только свое же эхо. Неужели никто не сталкивался с такой задачей?
Попытка #1
Начал я с three.js. А что? Отзывы в интернете положительные, библиотека свободная, уроков полным-полно, да и перегнать из Blender нет проблем. Вооружившись туториалами, я приступил к изучению платформы. Поначалу все шло хорошо, не считая некоторых мелких проблем. В уроке для начинающих (простой крутящийся кубик) не было указано о необходимости источника света в сцене. В итоге была полная темнота на экране и нервный тик у вашего покорного слуги.
Дальше - круче. Научившись перегонять модель в JSON, я попробовал сделать это со всей сценой (ну лень мне программно расставлять все нужные объекты!). Итог - ноль. По какой-то причине из API движка благополучно удалили функцию, отвечающую за полную загрузку. Это стало последней каплей, и я просто послал three.js.
Попытка #2
Снабженный печальным опытом работы со сторонней библиотекой, я решил найти нечто более адаптированное к Blender. Тут, весьма кстати, всплыли подсказки на одном из форумов, где мой “глас вопиющего в пустыне” был услышан. Мне порекомендовали обратить внимание на Simlab Composer.
Воодушевленный надеждой, а также нетерпеливыми вопросами заказчика (“И где?!”), я ринулся на покорение Simlab Composer. Первой мне попалась страница Features. Фичи были прикольные и среди них я с радостью нашел то, что нужно. Но следующая страница сайта Compare&Buy повергла меня в уныние. 300 зеленых за полную версию! К тому же я не нашел плагина под Blender (всяких maya, max, solidworks и т.д. А где Blender? Дискриминация какая-то). Тогда на кой черт мне сдалась эта тулза...
Решил я наконец-то обратить внимание на онлайн-сервис Sketchfab. Вкратце - это популярнейший ресурс, где художники могут выкладывать свои модели и получать их обратно в обертке с плеером. Достаточно удобная вещь и имеется экспортер для Blender. Принцип работы следующий: экспортируете модель, заливаете на сервер и вот она уже там, в общем списке других. Для размещения на своем сайте достаточно скопировать специальный код и разместить во фрейме. Многие моделеры используют этот ресурс для своего портфолио.
Но вот беда. Модели на сайте выкладываются в общий доступ. И по сути, любой желающий может разместить их у себя. Заказчика такое положение вещей абсолютно не устраивало, да и физически размещать контент он желал бы на своем сервере. В идеале можно было бы приобрести план Business за 348 у.е. и разговор уже пошел о вливании денег в проект (да, да заказчик созрел до этого шага). Но умные люди в его штате (подозреваю, что бухгалтера) подсчитали экономическую невыгоду. Таким образом, идея использовать Sketchfab с треском провалилась…
Finita la commedia
А что в итоге, спросите вы? А в итоге мы вернулись к Blend4Web. Коль заказчик решил вкладывать деньги в проект, так почему бы и не в Blend4Web. С этим выбором мы выиграли оба. Он получил няшестый плеер (так и сказал, особо ему понравились кнопочки расшаривания в соцсетях :), единую лицензию без ограничения времени и какие-то перспективы со вставкой 3D элементов в страницы (я не знаю подробностей, то ли логотипы 3D, то ли кнопки).
А я получил возможность работать в Blender и не париться с перегоном сцены (да, да, всей сцены целиком) в WebGL.
Выиграла и общая картинка. Благодаря возможностям Blender и полной поддержки его визуальной мощи платформой Blend4Web, удалось существенно улучшить окружение, поиграться со светом.
В общем, доволен заказчик, доволен и я. Надеюсь, когда откроется сей ресурс, будут довольны и посетители.
Постскриптум
Для каждой задачи - свой инструмент. Я создаю игры при помощи Unity. Это великолепный движок для мобильных платформ и PC, но совершенно неготовый к работе с WebGL. У меня есть интерес к этой технологии, все же за ней будущее. И я благодарен воле случая, благодаря которому познакомился с Blend4Web. Да, сейчас эта платформа больше ориентированна на быстрое создание 3D для сайтов (презентации всякие, трехмерные фишки и т.д.). Однако, благодаря своему стремительному развитию (релизы каждый месяц), я надеюсь, она дорастет и до игр.
Ведь можно поиграться с ней и бесплатно, безо всяких триалов и floating-платежей. Следите за моим блогом, а постараюсь держать вас в курсе своих изысканий с этой платформой.