[Работа с 3D-графикой] Хитрости работы с MeshLab: устранение ошибок в 3D моделях

Автор Сообщение
news_bot ®

Стаж: 6 лет 9 месяцев
Сообщений: 27286

Создавать темы news_bot ® написал(а)
20-Фев-2021 22:31

MeshLab является довольно популярной программой для манипуляции и визуализации трехмерных моделей, предоставляющий широкий набор инструментов. Он среди прочего предоставляет возможности по восстановлению и устранению проблем и ошибок в 3D моделях. О некоторых таких возможностях я бы хотел рассказать в статье. Кого заинтересовало, прошу под кат.Довольно популярной проблемой при работе с 3D моделями является возникновение отверстий (holes, gaps). Такие проблемы возникают из-за несовершенной процедуры реконструкции сцены или недостаточной точности и качества 3D камер типа Microsoft Kinect.Мы можем восстановить поврежденные поверхности моделей и закрыть дыры в программе Meshlab. Meshlab включает специальный фильтр для задачи закрытия отверстий в 3D моделях.В начале откроем Meshlab и импортируем модель: File > Import Mesh.Здесь показан пример модели с отверстием
Применим фильтр. Откроем в верхнем меню Filters > Remeshing, Simplification … > Close Holes
Откроется диалог настройки параметров
Введем значение для параметра Max size to be closed и нажмем Apply. В моем случае хороший результат дало значение 210.Результат применения фильтра
Выглядит неплохо, не правда ли?Как мы видим не нужно писать специальный скрипт для закрытия отверстий. Все работает "из коробки".Решение проблемы с дубликат вершины в моделиПосле применения фильтра Close Holes при экспорте модели в obj файл могут возникнуть вершины-дубликаты, т.е. вершины с одинаковыми координатами. Это может привести к некорректной обработке модели при использовании библиотек типа OpenMesh.Давайте создадим obj файл со следующим содержимым:v 0 0 0
v 1 0 0
v 0 1 0
v 1 1 0
f 0 1 2
f 1 2 3
Создадим скрипт test_duplicates.py с использованием библиотеки OpenMesh (туториалы по ней можно посмотреть здесь)
import openmesh as om
import numpy as np
mesh_3 = om.read_trimesh('duplicate_vert_test.obj')
print('Test duplicate vertices')
for i, vh in enumerate(mesh_3.vertices()):
    print('Vertices adjacent to vertex ', i)
    for vh_n in mesh_3.vv(vh):
        print(vh_n.idx())
Запустим его
Vertices adjacent to vertex  0
2
1
Vertices adjacent to vertex  1
0
2
Vertices adjacent to vertex  2
1
0
Vertices adjacent to vertex  3
Vertices adjacent to vertex  4
Добавим дубликат вершиныv 0 0 0
v 1 0 0
v 0 1 0
v 1 1 0
v 1 0 0
f 0 1 2
f 4 2 3
Здесь мы добавили еще одну вершину с координатами 1 0 0.Запустим скрипт еще раз
Vertices adjacent to vertex  0
Vertices adjacent to vertex  1
3
2
Vertices adjacent to vertex  2
1
3
Vertices adjacent to vertex  3
2
1
Vertices adjacent to vertex  4
Сейчас мы видим, что для вершины 0 нет соседних вершин, зато для вершины 3 появились две соседние вершины 2 и 1. Кажется, что вершина 4 перетянула к себе всех соседей вершины 0, с которой имеет одинаковые координаты.Попробуем удалить дубликаты вершин на модели из примера выше. Импортируем модель
Здесь мы видим множество цветных граней.Применим специальный фильтр для удаления дубликатов вершинFilters -> Cleaning and Repairing -> Remove duplicate Vertices
Результат применения фильтра
Если мы применим фильтр на нашей первоначальной простой модели после экспорта модели мы получим obj файл следующего содержания vn 0.000000 -nan(ind) 0.000000
v 0.000000 0.000000 0.000000
vn 0.000000 0.000000 -0.785398
v 1.000000 0.000000 0.000000
vn 0.000000 0.000000 -0.785398
v 0.000000 1.000000 0.000000
vn 0.000000 0.000000 -1.570796
v 1.000000 1.000000 0.000000
# 4 vertices, 0 vertices normals
f 4//4 2//2 3//3
# 1 faces, 0 coords texture
На этом все. Удачи в использовании MeshLab для манипуляции с 3D моделями и до новых встреч.
===========
Источник:
habr.com
===========

Похожие новости: Теги для поиска: #_rabota_s_3dgrafikoj (Работа с 3D-графикой), #_mesh, #_3d_graphics, #_3d_model, #_repair, #_ustranenie_oshibok (устранение ошибок), #_3dmodelirovanie (3d-моделирование), #_rabota_s_3dgrafikoj (
Работа с 3D-графикой
)
Профиль  ЛС 
Показать сообщения:     

Вы не можете начинать темы
Вы не можете отвечать на сообщения
Вы не можете редактировать свои сообщения
Вы не можете удалять свои сообщения
Вы не можете голосовать в опросах
Вы не можете прикреплять файлы к сообщениям
Вы не можете скачивать файлы

Текущее время: 22-Ноя 10:46
Часовой пояс: UTC + 5