Ответы пользователя по тегу Blender
  • Возможно-ли сделать проект Unity 3D который запускается из командной строки, получает динамический контент, рендерит, сохраняет JPG и завершается?

    @DrSpritz
    В принципе это возможно. Используя unity можно собрать приложение, которое будет в себе содержать готовую сцену с выставленным освещением, окружением, камерами и подготовленной базой из составляющих компонентов мебели. Unity может собрать для Linux headless-приложение, которое можно будет запустить на сервере и в качестве параметров запуска передать конфигурацию мебели в виде пути к файлу JSON или XML, ну и какие-нибудь данные для сохранения результата работы, это может быть имя файла или путь к каталогу куда сохранять рендеры. Как только приложение инициализируется, оно автоматом начнет процесс сбора и рендеринга Вашей мебели и сохранит его результат на основании указанной при запуске информации. Также можно встроить callback, который по окончанию работы приложения дернет веб-сервер и скажет ему что рендер для такой-то моедли готов и лежит там-то.

    "Узкие места"

    1) У меня есть некоторые сомнения в том, что в таком сетапе Вы сможете получить фотореалистичную картинку за одну секунду, поскольку каждый запрос на рендер от юзера, будет порождать новый процесс на сервере, что требует времени, да и расходование памяти и вычислительных мощностей сервера будет нерациональным.
    В качестве решения, я бы запускал это приложение в качестве "демона" и управлял бы этим процессом используя сокеты. В этом случае все будет работать в десятки раз быстрее, и экономичнее, да и к тому же такой вариант масштабируемый, поскольку Вы можете поднять пул таких "демонов" и организовать очередь, все это позволит еще экономичнее использовать ресурсы ваших железок. Также использование сокетов для управления процесса не ограничивает Вас рамками одного физического сервера и позволяет создать целую ферму из серверов для рендера "шкафчиков". Что-то я немного расфантазировался :)

    2) Я не знаю как Ubuntu server будет рендерить, возможно необходимо будет установить какие-то дополнительные компоненты, так же я не знаю как будут использоваться ресурсы CPU для рендеринга, поскольку Unity это все таки real-time рендеринг и основная нагрузка ложится на видеоадаптер.
    В качестве решения, я точно могу сказать что такой вариант будет работать на обычной десктопной машине с вменяемым видеоадапетром

    3) Зашивать базу в приложение тоже не очень хороший вариант, поскольку администрировать такую базу будет неудобно и каждое внесение в нее изменений будет требовать ребилд приложения и его обновление на сервере.
    В качестве решения, я бы вынес все модели из приложения путем их экспорта в assetbundle и сложил бы их куда-нить, откуда приложение их бы подтягивало. Можно запилить для него backend, который позволит администратору контента удобно работать с наполнением базы, а так же будет выдавать модельки приложению. Это незначительно увеличит скорость рендера, поскольку при первом обращении модель будет сначала загружаться в приложение (ну и кэшироваться,) ну а при повторном обращении разумеется брать уже с кэша, что уменьшит время загрузки.

    Проведите исследование, я думаю все должно работать =)

    UPD

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