Проблема с масштабированием и вращением при импорте модели 3DS Max в Unity

Я только что разработал простую 3D-модель в 3ds Max и пытаюсь импортировать ее в Unity. Но обратите внимание на одну вещь, которая для меня не имеет значения, я получил вращение на -90 градусов по оси X, и масштаб модели также не соответствует действительности.

Я не знаю, в чем причина этого, хотя я новичок в программном обеспечении 3ds max.

введите здесь описание изображения

Как показано на изображении выше, я надеюсь, вы понимаете мою точку зрения, какие настройки мне нужно выполнить в программном обеспечении 3ds max, чтобы оно импортировалось с 0 поворотом по оси X и с масштабом (1,1,1).

Дайте мне несколько предложений по этому поводу.


person Siddharth    schedule 20.09.2018    source источник


Ответы (3)


Я использовал этот плагин для Blender, и он отлично работает для меня:

Исправление Unity Rotation для Blender

Если вы не можете найти плагин для 3DS Max, вы можете попробовать написать аналогичный плагин самостоятельно или экспортировать свою модель в Blender, а затем использовать плагин.

Вот исходный код Python на случай, если ссылка устарела:

import bpy

bl_info = {
 "name": "Unity Tools",
 "author": "Karol \"Mirgar\" Głażewski",
 "version": (1, 0, 2),
 "blender": (2, 6, 5),
 "location": "3D View > Tool Shelf > Unity Tools",
 "description": "Tools to ease workflow with Unity Engine",
 "warning": "",
 "wiki_url": "",
 "tracker_url": "",
 "category": "Object"}

# fixes rotation on X axis, +X is -X in Unity compared to Blender
class UnityRotationFixerX(bpy.types.Operator):

    bl_description = "Fixes rotation of object so it will not \"lay on its face\" in Unity, +X axis is -X compared to Unity"
    bl_label = "Simple rotation fix"
    bl_idname = "object.unity_rotation_fix_x"
    bl_options = {'REGISTER', 'UNDO'}


    def FixRotationForUnity3D(self):
        bpy.ops.object.transform_apply(rotation = True)
        bpy.ops.transform.rotate(value = -1.5708, axis = (1, 0, 0), constraint_axis = (True, False, False), constraint_orientation = 'GLOBAL')

        bpy.ops.object.transform_apply(rotation = True)
        bpy.ops.transform.rotate(value = 1.5708, axis = (1, 0, 0), constraint_axis = (True, False, False), constraint_orientation = 'GLOBAL')

    @classmethod
    def poll(cls, context):
        return context.mode == 'OBJECT' and context.area.type == 'VIEW_3D'

    def execute(self, context):
        self.FixRotationForUnity3D()
        return {'FINISHED'}

# fixes rotation on X and Z axis, front is now +Y
class UnityRotationFixerXZ(bpy.types.Operator):

    bl_description = "Fixes rotation of object, +Y is now front"
    bl_label = "Full rotation fix"
    bl_idname = "object.unity_rotation_fix_xz"
    bl_options = {'REGISTER', 'UNDO'}

    def FixRotationForUnity3D(self):
        bpy.ops.object.transform_apply(rotation = True)

        bpy.ops.transform.rotate(value = -1.5708, axis = (1, 0, 0), constraint_axis = (True, False, False), constraint_orientation = 'GLOBAL')
        bpy.ops.transform.rotate(value = -3.1416, axis = (0, 1, 0), constraint_axis = (False, True, False), constraint_orientation = 'GLOBAL')

        bpy.ops.object.transform_apply(rotation = True)

        bpy.ops.transform.rotate(value = 1.5708, axis = (1, 0, 0), constraint_axis = (True, False, False), constraint_orientation = 'GLOBAL')
        bpy.ops.transform.rotate(value = 3.1416, axis = (0, 0, 1), constraint_axis = (False, False, True), constraint_orientation = 'GLOBAL')
    @classmethod
    def poll(cls, context):
        return context.mode == 'OBJECT' and context.area.type == 'VIEW_3D'

    def execute(self, context):
        self.FixRotationForUnity3D()
        return {'FINISHED'}

class UnityPanel(bpy.types.Panel):

    bl_idname = "OBJECT_PT_unity_tools"
    bl_label = "Unity Tools"
    bl_space_type = 'VIEW_3D'
    bl_region_type = 'TOOLS'
    bl_context = "objectmode"
    bl_options = {'DEFAULT_CLOSED'}

    def draw(self, context):

        layout = self.layout

        col = layout.column(align=True)
        col.label(text="Rotation:")
        col.operator("object.unity_rotation_fix_x")
        col.operator("object.unity_rotation_fix_xz")


#registers    

def register():
    bpy.utils.register_class(UnityRotationFixerX)
    bpy.utils.register_class(UnityRotationFixerXZ)
    bpy.utils.register_class(UnityPanel)

def unregister():
    bpy.utils.unregister_class(UnityRotationFixerX)
    bpy.utils.unregister_class(UnityRotationFixerXZ)
    bpy.utils.unregister_class(UnityPanel)

if __name__ == "__main__":
    register()

И инструкция по установке:

Чтобы установить этот аддон, распакуйте его в папку аддона Blender, например "C:\Program Files\Blender Foundation\Blender\2.67\scripts\addons" или используйте кнопку "Установить из файла" в пользовательских настройках на вкладке дополнений.

После установки аддон находится в категории «Объект», и после его включения к нему можно получить доступ с панели инструментов на панели «Инструменты Unity».

Обратите внимание, что полное исправление поворота по осям X и Z поменяет объект так, что он будет обращен к оси +Y вместо -Y, если вы экспортируете через fbx, не забудьте установить Forward Z и Up Y в качестве оси экспорта, когда вы используете полное исправление поворота.

person Dave    schedule 20.09.2018

Unity имеет другую ось, чем 3D Max (и Blender и т. д.), и исправить то, что Unity вращает модели по умолчанию. Просто Unity. Если это граничит с вами, вы всегда можете установить свою модель как дочернюю для пустого объекта.

person Morasiu    schedule 20.09.2018
comment
Хорошо, спасибо за ответ, но что мне нужно сделать в 3ds max? так что модель правильно импортируется в Unity - меня больше интересует это стороннее решение, чтобы это не повлияло на способ программирования. - person Siddharth; 20.09.2018
comment
Вы можете вращать его в 3D Max. Но это лишнее, лучше оставить как есть. Это официальное решение от Unity - person Morasiu; 20.09.2018

загрузить мяч в 3d max, повернуть его на -90 градусов по оси x, сбросить трансформацию и реэкспортировать. что касается масштаба,

https://docs.unity3d.com/Manual/FBXImporter-Model.html

выберите модель в инспекторе и проверьте ее свойства, в частности параметры импорта... немного посчитайте и отрегулируйте масштаб импорта.

person Technivorous    schedule 20.09.2018