Подготовка модели к экспорту из 3Ds Max в Unity3d

{lang: 'ru'}

В данный момент я занимаюсь разработкой своей первой игры на Unity3d. Идея готова, заготовка готова. Но вот нормальных 3D-моделей в игре еще нет. А без красивой графики, детализированных моделей и прочих эффектов, 3D-игра деградирует в пародию на игры с приставок Nintendo и Dendy из 90-х. Оказалось, что в добавлении моделей в игру есть свои хитрости, которые стоит знать до начала экспорта.

Проблема, с которой я столкнулся знакома всем новичкам, которые впервые попытались экспортировать 3D-модель из (в моем случае) 3Ds Max’а в Unity и увидели… что модель перевернута! Это произошло потому, что Unity использует нестандартную систему координат с осью Y, направленной вверх:

Система координат. Ось Y направлена вверх.

Тогда как в классической 3D-математике вверх направлена ось Z:

Система координат. Ось Z направлена вверх.

Т.е. когда Unity пытается отобразить модель, он ожидает, что верхняя её часть находится там, куда направлена ось Y. И не важно, что у вас там, на самом деле, корма танка. После такого экспорта модель приходится поворачивать, выравнивать в самом движке, а это не очень удобно и утомительно. Чтобы этого избежать, есть два способа.

Первый, наивный: смоделировать, руководствуясь системой координат, принятой в Unity. Примерно вот так:

Танк Пантера 3Ds Max

Модель в этом случае экспортируется "прямо". Нужно только не забыть указать при экспорте, что именно ось Y смотрит вверх (для 3Ds Max в секции Axis Conversion поле Up Axis нужно установить в Y-up):


Экспорт из 3Ds Max ось Y направлена вверх

Второй способ, который, как оказалось, тоже хорошо работает — просто поставить при экспорте, что ось Z будет смотреть вверх (для 3Ds Max в секции Axis Conversion поле Up Axis нужно установить в Z-up) и оставить модель так, как она есть, не поворачивая её.

Танк 3Ds Max. Ось Z вверх

Экспорт из 3Ds Max ось Z направлена вверх

В этом случае модель тоже появится в движке повернутой в “правильном” направлении, но это еще не гарантирует, что Unity будет правильно определять, где находится передняя часть модели.

О том, как быть уверенным, что при команде rigidbody.AddForce(this.transform.forward, 10*Time.deltaTime, ForceMode.Impulse) модель начнет двигаться вперед, а не будет уподобляться крабу, я расскажу в следующем посте.


Полезная статья? Их будет больше, если вы поддержите меня!