Как включить информацию о цвете вершин в файлы .OBJ?

25

В файлах .obj, которые я экспортирую, отсутствуют данные о цветах вершин. Есть ли способ включить информацию о цвете в файл .obj? Если нет, каковы альтернативы?

Мина Сэми
источник

Ответы:

9

Blender может экспортировать PLY-файлы (.ply), которые основаны на тексте, очень легко разбираются и содержат цвета вершин. Сложный путь состоит в том, чтобы изменить код экспортера OBJ так, чтобы он включал цвета вершин (таким образом нарушая совместимость obj).

Равашоль
источник
8
Неправильный путь , чтобы изменить OBJ экспортера. Используйте правильный инструмент для работы; если вы хотите цвета вершин, Wavefront OBJ, очевидно, не тот инструмент, который вы хотите использовать (или злоупотреблять).
Мартин Сойка
6
Почему это неправильно? Если он просто использует экспортер OBJ, чтобы сделать его самому, я действительно не вижу, как это «неправильно». Неправильный путь не делает никакой работы, потому что это всегда неправильный путь к кому-то.
Равачол
Формат .obj использует файлы .mtl для хранения информации о материале, но, насколько мне известно, поддерживает только один материал для каждого лица. Кроме того, .obj - это одна из
немногих
3
Это неправильно, потому что OBJ является фиксированной спецификацией. Как только вы начинаете изменять экспортер для выполнения дополнительных задач , он больше не является экспортером OBJ, это что-то другое. Оттуда он может превратиться в любого многоголового зверя. Тем не менее, хороший ответ, я никогда не слышал о PLY.
Инженер
@NickWiggill PLY - не обязательно хороший выбор - возможно, вы не слышали об этом по уважительной причине. Он намного сложнее, чем OBJ, и обеспечивает большую гибкость, чем разумно использовать для статической модели. Если вам нужна дополнительная гибкость, возможно, вам следует использовать более популярный формат файлов с хорошо известными синтаксическими анализаторами, такими как COLLADA
bobobobo
18

Существует разновидность Wavefront * .obj, которая облегчает окрашивание вершин. Я знаю два приложения, которые могут экспортировать их, а именно «MeshLab» (бесплатно) и «MeshMixer» (также бесплатно из Autodesk). Цвета вершин фактически найдены только после каждого определения вершины, как показано ниже ..

(Часть * .obj)

####
#
# OBJ File Generated by Meshlab
#
####
# Object VERTEXPAINT_004_OBJ.obj
#
# Vertices: 284
# Faces: 281
#
####
mtllib ./VERTEXPAINT_004_OBJ.obj.mtl

vn 0.029683 0.730087 -0.682709
v 1220.094482 -572.500000 177.713943 0.984314 0.764706 1.000000  

# "3 vals for Vert and 3 vals for Col"

vn 0.000000 0.858139 -0.513418
v 1291.571533 -609.439636 -28.628490 0.921569 0.219608 1.000000
vn 0.303129 0.896367 -0.323480

Попробуйте использовать meshlab для генерации «Окружающей среды на основе вершин», затем откройте ее с помощью «MeshMixer».

Это должно прояснить вашу проблему. Я думаю, что раскраска вершин возвращается с появлением шейдеров. Забавно, что раскраска вершин, кажется, игнорируется, когда карты изображений были обнаружены. Теперь мы должны увидеть возвращение «Раскраски вершин»! Дайте мне знать, если это было полезно!

Жак Преториус
источник
А ну понятно. Они добавили 3 цвета для каждой вершины после определения vположения вершины. Умный способ (надеюсь) не нарушать совместимость с существующими парсерами OBJ.
бобобобо
+1 Я встретил именно эти цветные вершины в файле obj, который недавно приобрел. В соответствии с проблемой синтаксического анализа OBJ Vertex Colouring · Issue # 2083 · mrdoob / three.js , цвета имеют красный, зеленый, синий порядок, как обычно, и от 0 до 1. Известны ли вам какие-либо реальные документы по этому вопросу из любого из люди, поддерживающие это? Как насчет любого открытого исходного кода, который его реализует? Существует ли письменный стандарт для obj, который широко принят?
nealmcb
Ага - чтобы ответить на один из моих вопросов, MeshLab не только бесплатен, но и с открытым исходным кодом (GPL) и кросс-платформенный :)
nealmcb
7

Wavefront OBJ поддерживает материалы , цветовые группы которых имеют одинаковый цвет.

Материал заявления выглядит так:

newmtl redMtl
Kd 1.00 0.00 0.00
Ks 0.50 0.50 0.50
Ns 18.00

Итак, Kd - это рассеянный компонент, Ks - зеркальный.

Они будут указаны в файле .mtl, который сопровождает файл .obj. Внутри файла .obj находятся такие выражения

usemtl redMtl
f 1/5/1 30/39/2 20/29/3
f 20/29/4 30/39/5 31/41/6
f 35/48/7 26/35/8 2/6/9

Это означает, что грани, указанные там, будут использовать материал redMtl. Когда вы анализируете файл obj, он преобразуется в цвет для каждой вершины.

Если есть много разных цветов, у вас будет много разных материалов, но вы можете сделать это.

Вот видео о том, как назначить определенной группе лиц другой материал . Вы можете назначить разные материалы для каждого лица в сетке, если хотите.

bobobobo
источник
5
К сожалению, это допускает только раскраску для каждой грани, а не для окраски каждой вершины.
пушистый