Сел, наконец, на новый год, пилить что-то отличное от работы.
Пилить решено было на двигле "
Three.js". Долго выбирал между тремя вариантами: "допиливать дальше свойдвижок", PlayCanvas и Three.js, но в итоге выбор был сделан в пользу последнего, т.к. у второго слишком ональные, на мой взгляд, ограничения, хоть двиг и выглядит самым доработанным. Вариант "свойдвижок" несовместим с понятием "зарабатывать деньги" (я не хочу 4 года писать движок, а не игру). В Трижс, судя по примерам, как мне показалось, есть всё, что мне надо. На фотореал графоний я всё равно не рассчитываю (одному человеку без бабла на аутсорс не вытянуть всё равно соответствующий арт, нужно чтобы игра цепляла другими приколами, да и WebGL не место для него ящитаю). Кроме того, Трижс — один из самых старых и популярных двигов на ВебГЛ, он продолжает развиваться, у него довольно большое коммьюнити, где можно попросить помощь, что немаловажно. Минусы — в нём до сих пор много вещей не допилено, типичная ситуация с опенсорс: баг исправляет тот, кого он больше всех трахает. Такой-то выбор из трёх стульев.
Вариант "Юнити" не рассматривался, т.к. в нём дерьмовая поддержка WebGL и есть основания полагать, что её по объективным причинам там не будет никогда (не в ближайшие годы == никогда). А так конечно Юнити очень хорош, всем устраивает. Жаль, что он не смог в вебгл.
Другие ВебГЛ движки не рассматривались, т.к. либо нет нужных фич, либо маленькое коммьюнити/недавно появились, мне не надо так, чтобы через год поддержка двигла загнулась, и я бы остался с проектом на нём на руках, и крутись как хочешь. Тогда бы это превратилось в свойдвижок, только бы это был движокваси и сиди как хочешь с ним.
Первые впечатления от Three.js были весьма неплохие, несмотря на ряд странностей (которые можно завраппить и забыть о них), я всего за пару дней сделал сцену которую хотел для нужных мне экспериментов и достиг желаемого результата. Если даже вспоминать, как я залезал на Юнити, матюков было почти столько же, что есть показатель хороший.
Наконец, демке моей настала пора "одеться" в графику, и тут поджидал неприятный сюрприз. А именно: движок поддерживает до чёрта форматов моделей, но мне нужно экспортить модели из Макса, обязательна поддержка риггинга (ну а куда без него блин). Большинство поддерживаемых форматов про риггинг нихера не знают. Единственный более-менее нормальный вариант, на который я рассчитывал — FBX. Есть даже экземпл, где бежит человечек, загруженный из FBX и машет ручками. Но, как оказалось, FBX загружается весьма условно. Во-первых, поддерживается только ASCII-версия формата, что сразу раздувает даже простеньку модель на мегабайты. В принципе, это можно было бы пережить, мне много не надо. Также нет поддержки материалов (тут тоже мне многого не надо, тупо чтобы текстурки вручную не накидывать на модель меня устроит). И — самое главное — модель, экспортнутая из Макса в FBX, распидорасилась в кашу после того, как я попытался к ней применить анимацию. Поковыряв немного, я понял, что при загрузке накосяпорили ещё и с иерархией, в-общем, считай, поддержки FBX всё равно что нет. На другие форматы с риггингом экспортёров из Макса нет, да и доверия они не внушают (какие-то форматы, либо Вася Пупкин решил научить Three.js загружать модельки из его любимой игры про онемэ, либо форматы от каких-то левых проектов, тоже "на сдачу" с неясными перспективами).
В-общем, как ни прискорбно, пришлось всё-таки изобретать велосипед. Но велосипед у меня уже был вполне "на ходу". Когда я давно делал свойдвижок, я делал и формат моделей для него и экспортёр из Макса. Всё это добро неплохо сохранилось и поддерживало всё, что мне нужно, кроме материалов. Формат не держал материалы потому что я их не сподобился сделать в своёмдвижке, планировался одновременный ввод в эксплуатацию. Но — скелетка в наличии, это самое главное. Сегодня за полдня примерно зафигачил лоадер в Three.js пока что только статики.
На скрине — результат работы лоадера. То есть в принципе сработал как надо, чему я очень рад.
Осталось разобраться как в двигле работать со скелеткой, в принципе, есть
пример её создания прямо в движке, так что не так всё плохо.
Ещё материалы допилить (тупо 1 меш = 1 текстура), это, полагаю, уже довольно просто.
Потом даже можно будет пойти в коммьюнити с моим лоадером, предложить включить, т.к. это будет единственный человеческий пайплайн из 3Д Макса в Трижс, ну, и бинарный, к тому же.
Ну а вообще, скрин говно, многа букаф, скоро снова работать, всё тлен