Компьютерная графика
на домашней странице Михаила Мартыновского aka MikeMS

Чтобы импорт из obj не глючил

Рецепт
01.11.2009 г.

Сегодня я расскажу вам о небольшой проблемке, с которой я в который раз столкнулся работая в 3ds Max и о её решении. Речь пойдёт о корявом импорте-экспорте в широко распространённый формат obj.

Проблема появилась несколько лет назад, если не ошибаюсь с 2009-й версии 3ds Max, когда «Автостолы» заменили IO-plugin в этот распространённый формат, хотя это только догадки - причина вызывающая этот баг может быть и в чём-то ином. Итак о сути: при экспорте модельки в этот формат, а затем при её импорте обратно, «слетает» параметр отвечающий за нумерацию вершин образующих полигоны на объекте.

Вы могли столкнуться с этим работая например с Z-Brush — после переброса 1-го сабдива модели в макс, корректировки её там, а затем обратной переброски в Браш, вы могли замечать что модель «ломается», хотя кол-во вершин и их нумерация остались прежними. Или например используя UVLayout при переброске модели обратно в 3ds Max — текстура на объекте приобретает совершенно неудобоваримый вид. В целом, не имеет значения в какой программе вы совершали промежуточную работу с моделью, проблема в 3ds Max. Незнаю, некоторые говорят что такой проблемы не возникает если ставить в опциях экспорта тип Faces в Quads или Triangles, я это не проверял, хотя вполне возможно при Triangles такой проблемы не будет. Однако такой вариант нам не катит, ибо редко когда нам нужна модель вся из треугольников, да и состоящая только из одних квадов - тоже не всегда подойдёт.

Итак, перейдём же наконец к решению этого неудобства, которое возможно покажется вам шаманством или танцем с бубном, однако оно работает! ))) Решение в том, чтобы сразу после импорта модели из obj обратно в 3ds Max (в опциях лучше сразу поставить «Import as Editable Poly» чтобы потом перед шаманством самому этого не делать) накинуть на неё модификатор TurnToMesh а потом TurnToPoly, после этого можно сколлапсить стек. Или произвести конвертацию модели в EditableMesh, а потом обратно в EditablePoly (или можно накинуть на объект модификатор TurnToMesh, а потом TurnToPoly). Кстати, многие сторонние программы не любят когда вы скармливаете им obj с оптимизаций вершин, так что настоятельно рекомендую отключать оптимизации в настройкам экспорта 3d Max.

В некоторых ситуациях (удобно при переносе развёртки) можно воспользоваться написанным мною скриптом Transfer UV.

Если вы нашли иные способы решения данной проблемы, было бы здорово поделиться ими! Пишите в комменты или мне на почту!