пятница, 15 мая 2015 г.

Wavefront Mtl в Assimp

Assimp - весьма популярная библиотека импорта трехмерных моделей из файлов различных форматов.
Однако если присмотреться повнимательнее - она позволяет не только загружать модели, но и сохранять их. Другое дело, что сохранение моделей документировано заметно хуже, чем загрузка, и с ним придется повозиться и поискать примеры. Но разобраться вполне реально, поэтому я не буду останавливаться на этом вопросе.

Понадобилось мне, собственно, следующее:
- Загрузить 3D-модель из какого-нибудь формата (например, Wavefront OBJ, но необязательно)
- Некоторым образом ее преобразовать (удалить часть полигонов, части полигонов присвоить другие материалы)
- Сохранить модель (в Wavefront OBJ)

Пока моей задачей была работа с геометрией, а материал на всю модель был один, все шло отлично. А вот затем, с материалами, не заладилось: в файл все, вроде бы, сохраняется нормально, но при последующей загрузке тем же моим приложением, с использованием, опять же, Assimp, материалы загружаются некорректно. Либо все превращаются в JoinedMaterial_#63 (не обязательно именно 63, цифра может быть другая), либо сохраняют названия, но становятся одинаково серыми.

Приглядевшись, я обнаружила следующее: если в исходном файле материалов строки, описывающие цвет материала, начинались с Ka, Kd, Ks (с больших букв K), то в свежесохраненных файлах - с ka, kd, ks (то есть с маленьких). Кроме того, по непонятной причине в сохраненных файлах отсутствует строчка, описывающая коэффициент зеркального отражения. Я скачала исходники последней стабильной версии библиотеки, посмотрела в код: так и есть, проблема со строчными/заглавными буквами на месте. Вот в чем проблема с коэффициентом отражения - с ходу не поняла.

Но самое, на мой взгляд, удивительное в этой ситуации то, что я так и не смогла ничего конкретного по этому поводу найти в интернете. То ли мало кому доводилось сохранять в Wavefront OBJ с помощью Assimp, то ли те, кому доводилось, молча вносили небольшую поправку в исходники и пересобирали библиотеку, то ли я искать не умею...

Комментариев нет:

Отправить комментарий