Экспорт 3D моделей из Blender в игровые движки. Часть 6. Как добавить 3d модель в unity, Unreal Engine, UDK, CryEngine, Amazon Lumberyard.

В данной части статьи мы закончим рассматривать вопрос, как добавить 3d модель в unity. Данная часть статьи посвящена выставлению масштаба модели в Unity3D и Blender. Познакомимся с конвертерами fbx формата и импортерами/экспортерами fbx.

Экспорт 3D моделей из Blender в игровые движки. Часть 1. Экспорт из Blender в Unity 3D моделей. Как перенести 3d модель в Unity3D, Unreal Engine, UDK, CryEngine, Amazon Lumberyard.

Экспорт 3D моделей из Blender в игровые движки. Unreal Engine, UDK, CryEngine, Amazon Lumberyard, Unity3d импорт моделей. Часть 2.

Экспорт 3D моделей из Blender в игровые движки. Как экспортировать из blender в Unity 3d, Unreal Engine, UDK, CryEngine, Amazon Lumberyard. Часть 3. Ориентация 3D модели в пространстве. Локальные оси.

Экспорт 3D моделей из Blender для игровых движков. Импорт моделей в Unity из Blender. Часть 4. Origin, Pivot Point, центр 3D модели.

Экспорт 3D моделей из Blender в Unity3D, Unreal Engine, UDK, CryEngine, Amazon Lumberyard. Часть 5. Blender экспорт текстуры и материалов.

 

Масштаб в Blender и в Unity3D

Как добавить 3d модель в Unity мы узнали из предыдущих серий статьи. Еще одним немаловажным параметром при экспорте 3Д модели из Blender’а в формате fbx является значение коэффициента масштаба модели в окне настройки экспорта. От версии к версии, от билда к билду импортированная в Unity 3D модель в формате FBX подхватывает коэффициент масштаба то равным единице, как и положено (и как выставлено в настройках экспорта модели в Blender’е), то равным 0.01, что при добавлении 3D модели на сцену в Unity приводит к установлению значений для масштаба равным 100 для каждой оси (так Unity 3D компенсирует параметр File Scale, чтобы модель не смотрелась на сцене так, будто ее перенесли туда из фильма “Джек – покоритель великанов”). Так Unity компенсирует коэффициент масштаба при экспорте (0.01×100 =1), придавая 3D модели ее реальный размер.

как добавить 3d модель в unity
На рисунке показана импортированная в Unity3D модель в формате FBX из Blender, для которой был неправильно установлен Scale Factor, равный 0.01, что привело к уменьшению модели, что, в свою очередь было компенсировано средствами движка Unitry3D, т.е. масштаб модели был выставлен равным 100

Если вы не знаете ответа на вопрос, как добавить 3d модель в unity с правильным масштабом, то есть несколько способов решения данной проблемы. Не помогает здесь ни описанный сброс масштаба в Blender’е, ни изменение в нем же единиц измерения. А почему бы не оставить 3D модели на сцене в Unity масштаб равным 100, ведь, иногда масштаб модели изменяют даже в процессе игры. Все дело в том, что для масштабированных составных 3D объектов (а также для моделей имеющих различные коэффициенты масштаба) не работает динамический батчинг, что приводит к росту drawcall’ов, так что прибегать к изменению масштаба 3D модели в игре (особенно динамическому, когда вы в течение некоторого времени постепенно уменьшается 3D модель кодом скрипта) нужно только в тех случаях, когда это необходимо.

Если вы столкнулись с подобным казусом с масштабом при экспорте-импорте 3D модели, то исправить данную проблему можно как в Blender, так и в Unity3d.

Вы можете изменить значение параметра «Scale factor» в Unity, выставив его равным 100. Делать это лучше до того, как вы поместите эти 3D модели на сцену, поскольку на сцене они станут в 100 раз больше и вам придется уменьшать еще и масштаб каждого размещенного объекта на сцене вручную.

Существует также автоматический способ выставления Scale factor для импортируемых 3D моделей через использование скрипта.

В папке Editor создайте C# скрипт MeshImporterScale и скопируйте в него следующий код:

где 100F – значение Scale factor для импортируемой 3D модели.

Обратите внимание, что данный скрипт не изменяет Scale фактор ранее импортированных 3D моделей! Он будет работать только для тех 3D моделей, что будут импортированы в Unity3D после создания данного скрипта.

Решение проблемы с масштабом в Blender

Давайте посмотрим, как добавить 3d модель в unity с правильным масштабом в Blender. Если же решать проблему в Blender, то стоит отметить, что выставление масштаба для всей сцены в Blender никак не повлияет на коэффициент экспорта и вам все равно придется выставлять Scale factor равным ста.

Можно также работать в Blender’е в масштабе 1:100, что не очень удобно, значит нужно найти другой способ, как добавить 3d модель в Unity в масштабе 1 к 1.

А можно пойти другим путем и выставить коэффициент масштабирования равным ста в параметрах экспорта в Blender.

как добавить 3d модель в unity
На рисунке показано выставление масштаба для экспорта в Blender.

После импорта файла FBX в Unity3D значение File Scale, как и положено, равноединице.

как добавить 3d модель в unity
На рисунке показана импортированная в Unity 3D модель в формате FBX с выставленным в Blender’е масштабом при экспорте равным 100.

Но при добавлении 3D модели на сцену необходимо сбрасывать масштаб (который в этом случае Unity3D автоматически выставляет равным 10000) на единицу.

как добавить 3d модель в unity
На рисунке показана 3D модель, при переносе которой на сцену, Unity3D автоматически выставил компенсационный масштаб равным 10000. Синим кружком обведен город в нормальном масштабе (1:1).

Также вы можете изменить коэффициент экспорта в файле export_fbx.py, отвечающем за экспорт в Blender в формате FBX 6.1 ASCII. Данный файл находится в установочной директории Blender’а, по умолчанию (для 64-битной OS MS Windows) – в папке  “Program FilesBlender FoundationBlender2.75scriptsaddonsio_scene_fbx”. Найдите строчку

Property: «UnitScaleFactor», «double», «»,1

И замените последнюю цифру на 100, так чтобы получилось:

Property: «UnitScaleFactor», «double», «»,100.

Хотя в меню экспорта в Blender’е это никак не отразится и цифра 100 не появится вместо 1 для Scale, но при экспорте сцены или 3D модели из Blender в формате FBX 6.1 ASCII коэффициент File Scale в Unity3D будет теперь равен 1.

Если вы не хотите лезть в код питоновских скриптов Blender Вы также можете изменить значение для данного параметра уже в созданном файле FBX в формате FBX 6.1 ASCII. В файле FBX найдите ту же самую строчку и измените значение на то, что вам требуется, например, с 1 – на 100.

Для бинарного FBX-формата (FBX 7.4 binary) откройте в той же папке файл скрипта на питоне export_fbx_bin.py и найдите  строчки

scale_factor = scene_data.settings.global_scale / units_blender_to_fbx_factor(scene)

и

scale_factor = scene_data.settings.global_scale * units_blender_to_fbx_factor(scene)

и замените их на

scale_factor = 100*scene_data.settings.global_scale / units_blender_to_fbx_factor(scene)

и

scale_factor = 100*scene_data.settings.global_scale * units_blender_to_fbx_factor(scene)

соответственно.

В параметрах экспорта в Blender данные изменения никак не отразятся, зато в Unity File Scale Будет равен Единице (1).

В каком формате и как добавить 3d модель в Unity

И в завершении статьи хочется отметить, что вы можете выбрать одну из двух доступных версий, в которой можете экспортировать свою 3D модель: FBX 7.4 binary или FBX 6.1 ASCII. Я предпочитаю первый вариант и, за исключением бага Unity3D или Blender, связанным с File Scale, пока еще не сталкивался с проблемами, ни при экспорте отдельного меша, ни при экспорте анимаций, ни при экспорте анимаций вместе с мешем. Еще одной причиной, почему мной была выбрана версия FBX 7.4 binary, является тот факт, что Blender — вообще странная зверушка, поскольку экспортировать в ASCII умеет, а импортировать в себя же свой экспортированный файл в этой версии FBX — нет. Чукча — не читатель, чукча — писатель! 🙂

 

p.s. программы и плагины для конвертирования FBX-файлов:

FBX Addon

FBX® 2013.3 Converter

Bos FBX Importer/Exporter

p.p.s. Спецификация формата FBX

FBX binary file format specification

FBX File Structure

Autodesk FBX SDK Programmer’s Guide

 

Автор: Максим Голдобин
goldmaxval@gmail.com

Добавить комментарий