Упростите очень сложную/детальную 3D-модель для мобильных приложений

тл;др;

Как разработчику программного обеспечения, получившему очень детализированную 3D-модель, быстро и легко оптимизировать ее для мобильных приложений, чтобы он мог сосредоточить свое время и энергию на разработке логики приложения?

Я думаю, что это довольно распространенный вариант использования, и, возможно, где-то уже есть инструмент для этого.

Длинная история

У меня есть 3D-модель (коллада) машины. Эта модель, созданная командой инженеров машины, содержит множество мельчайших деталей, необходимых для создания аппаратной части машины.

Теперь я разрабатываю мобильное приложение с Unity, которое должно отображать эту машину вместе с 10 другими машинами в одной сцене. Что мне нравится в доступных моделях, так это то, что они выглядят точно так же, как настоящие. При этом внутреннее наполнение меня не интересует, мне достаточно внешней оболочки. Я не взаимодействую с командой 3D-моделирования (допустим, я скачал модель из какого-то архива) и, следовательно, не могу попросить их внести какие-либо изменения для меня. Модель - это все, что у меня есть. Я сам по себе.

Есть две проблемы, с которыми я сталкиваюсь

  • Как избавиться от интерьеров моделей?
  • Как избавиться от деталей высокого разрешения во внешней оболочке, которые человеческий глаз не может обнаружить в мобильном телефоне?

Чтобы дать представление о масштабе, реальное оборудование и, следовательно, модель могут быть размером до 100 футов (30 м), в то время как они никогда не будут занимать более 5-дюймового HD-дисплея. Размер моделей варьируется от 50 МБ до 400 МБ. Таким образом, вся сцена может занимать до 2 ГБ. Каждая модель имеет около 300 тысяч лиц.

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

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

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

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

  • Обнаружение полигонов, недоступных напрямую из каких-либо внешних рейкастов. Если требуется, я могу определить набор (14 может быть достаточно) точек для начала raycast, в основном местоположения камеры.
  • Удалить эти полигоны
  • Обнаружение полигонов с размерами меньше порога
  • Удалить эти полигоны

person Jugal Thakkar    schedule 17.09.2015    source источник


Ответы (2)


Модели Blender to Unity могут иметь небольшие проблемы, если вы не экспортируете их правильно. Как это сделать, не входит в мою компетенцию, так как я тоже разработчик и лично предпочитаю 3DSMax.

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

Если вы хотите удалить мелкие детали снаружи, сделайте то же самое... просто выберите полигоны и удалите их. Я бы не рекомендовал использовать встроенный инструмент, потому что большинство из них, как правило, берут весь объект и делают его менее полигональным или более полигональным в зависимости от того, какой инструмент вы используете.

В конце концов, в следующий раз просто попытайтесь войти в программу, как программист я тоже не люблю использовать программное обеспечение для 3D-моделирования, но это часть работы, поэтому приложите некоторые усилия и просто изучите инструменты. Работы меньше, чем кажется.

Редактировать: Что касается инструментов, о которых вы просите, их на самом деле не существует, вы обычно не берете высокополигональную модель и не меняете ее на низкополигональную модель для мобильной игры. Вместо этого вы обычно нанимаете 3D-художника для создания низкополигональной модели. То, что у вас нет никакой связи с командой, немного странно, но пусть будет так. Я бы порекомендовал либо связаться с ними, либо, как я сказал ранее, приложить усилия и изучить 3D-программу, то, что вы хотите сделать, буквально звучит как просто щелкнуть, перетащить, выбрать, а затем нажать «Удалить», чтобы удалить некоторые полигоны, которые вы хотите сделать. все равно бы не увидел.

-Ларс

person LAKster    schedule 17.09.2015
comment
Спасибо, Ларс. Причина, по которой у меня нет связи с командой разработчиков моделей, заключается в том, что эти модели, возможно, были созданы давным-давно, и все, что у нас сейчас есть, это модель, возможно, сама команда ушла дальше. Модели не находятся в активной разработке, а взяты из своего рода архива. - person Jugal Thakkar; 17.09.2015
comment
Я не могу переварить тот факт, что ручной процесс - единственный способ. Я чувствую, что с сегодняшними технологиями это будет простая автоматизация. Шаги, как я вижу, всего 2. Обнаружить полигоны, которые не доступны напрямую из каких-либо внешних рейкастов, или обнаружить те, которые доступны, и принять обратное. Полностью удалите эти полигоны. Второй шаг — удалить все полигоны меньше заданного размера. - person Jugal Thakkar; 17.09.2015
comment
ЛАКстер прав, это не так просто. Удаление невидимых частей можно выполнить с помощью скрипта Python в Blender. Но удалить все полигоны меньшего размера.. — это то, что делает модификатор decimate. Несколько лет назад мне пришлось выполнить эту работу, и я написал пост в блоге. В ответ один из читателей порекомендовал MeshLab, на который, возможно, стоит обратить внимание. - person Kay; 17.09.2015

с vcglib

vcglib может вам подойти, вы можете увидеть пример для упрощения 3D-файла слоя. И его можно применять для многих других форматов 3D-файлов, таких как stl, obj... Поскольку vcglib — это библиотека C++, вы можете написать простую для использования эту библиотеку, чтобы упростить вашу модель stl. Этот метод работает на ОС без X, например на сервере Ubuntu. Вы можете обратиться к моему вопросу Не удалось упростить 3D-модели с помощью vcglib, утверждение `0' не удалось о том, как использовать vcglib для упростить 3D-файл слоя.

с помощью meshlabserver

Если вы хотите выполнить автоматическое упрощение в ОС с X, Windows или Mac OS, это очень просто, вы можете обратиться к серверу meshlab, meshlab также основан на vcglib. Вы можете запустить такую ​​команду, где PLYmesher_script.mlx — это файл фильтра, вы можете написать этот файл или сгенерировать его с помощью meshlab, см. здесь.

meshlabserver -i ./option-0000.ply -o ./meshed.ply -m vc vn -s scripts/PLYmesher_script.mlx
person LF00    schedule 13.10.2017