Ответы пользователя по тегу Unity
  • Возможно-ли сделать проект 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 комментарий
  • Черные точки на скайбокс Unity3D?

    @DrSpritz
    Здравствуйте!

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

    Что бы исправить эту ошибку, необходимо убрать альфа канал из текстур. Это сделать можно 3мя способами.
    1) Воспользоваться кнопкой "Fix Now", которая располагается в инспекторе, на экране редактирования материала, чтобы попасть на этот экран, необходимо выделить материал скайбокса, это можно сделать в окне "Project" или другими доступными способами.
    5b1d767275864ffb8af769739a3d48c9.png

    2) В ручном режиме изменить настройки импорта текстур, используемых в скайбоксе. Для этого в окне "Project", Вам необходимо выделить текстуру, в окне инспектора в поле "Texture Type" выставить "Advanced" и в нижней части окна настроек импорта в поле "Format" выставить формат без альфа канала, например "RGB 16". Сам формат выбирается в соответствии с Вашей платформой под которую Вы пишите свое приложение, но тема выбора формата компрессии текстур, достойна отдельного вопроса =)
    984b67de96784a5c8887230f816a56b4.png

    3) Удаление альфа канала на уровне файла текстуры, для этого необходимо иметь навыки работы с графическими редакторами (Photoshop, GIMP и п.р.).

    Надеюсь что я смог Вам помочь!
    Ответ написан
    Комментировать
  • Не пропускает AddForce в Unity?

    @DrSpritz
    Вероятнее всего Вы работаете в юнити 5.x, а гайды, которые Вы смотрели, ориентированы на Unity 4.x.
    Дело в том, что раньше в Unity 4.x rigidbody/rigidbody2d были представлены в виде свойства описанного в MonoBehaviour, содержащего готовую ссылку на компонент Rigidbody (если конечно такой имелся текущем GameObject). В Unity 5.x это свойство убрали из MonoBehaviour и теперь, Вам необходимо будет получить доступ к компоненту Rigidbody2d самостоятельно.
    Ответ написан
    Комментировать