1. Пользоваться форумом на планшетах и телефонах стало удобнее благодаря Tapatalk

Правка геометри перед экспортом (DegenerateFaces)

Тема в разделе "MAXScript", создана пользователем Castello2401, 13 апр 2014.

Модераторы: Savin Denis
  1. Castello2401

    Castello2401 Пользователь сайта

    С нами с:
    08.04.2014
    Сообщения:
    10
    Симпатии:
    0
    Баллы:
    2
    В сцене есть много EditableMesh объектов, все они должны пройти экспорт, через один плагин. При экспорте возникают ошибки, связанные с фейсами имеющие одинаковые координаты. Вот лог ошибки:
    Код:
    Node test has 8 degenerate faces at the following locations:
       -4.191406,  -36.529301,   12.339360
        3.627930,  -36.555168,   11.885740
       -3.646973,  -36.530762,   11.885740
        4.172363,  -36.557129,   12.339360
       -3.643555,  -35.501461,   11.885740
        4.175781,  -35.527828,   12.339360
        3.631348,  -35.525879,   11.885740
        3.631348,  -35.525879,   11.885740
    
    Модификатор VetrexWeld с минимальными значениями помогает, но при этом иногда часть информации, геометрия искажается, что недопустимо.
    Код:
    meshop.removeDegenerateFaces <Mesh mesh>
    Тоже не помогает, в листенере на вызов этой функции ответ всегда - false.
    Вообщем задача состоит в том, чтобы исправить геометрию при минимальных её изменениях (максимальное сохранения исходных данных).
    Как я вижу реализацию - скрипт перебирает все объекты сцены (EditMesh), перебирает все координаты вершин(фейсов?) находит повторения (точно так-же как мой экспортер) и "раздигает" одинаковые координаты с минимальными значениями (+/-0,00001). Этого хватит, чтобы объект прошел экспорт, но при этом не потерпел каких либо внешних изменений. Помогите пожалуйста с написанием такого скрипта.
     
  2. Savin Denis vip

    Savin Denis Moderator Команда форума

    С нами с:
    05.05.2005
    Сообщения:
    1.633
    Симпатии:
    0
    Баллы:
    210
    Сравнение совпадения координат точек необходимо провести только:
    1) Между точек одного фейса ? (реально)
    2) Между всех точек одного меша ? (максскрипт будет долго думать, и есть шанс звалить(или повесить) макс на больших сетках )
    3) Между точек всех мешей в сцене ? (на максскрипте, практически не реально если только на совсем легких сценах)
     
  3. Castello2401

    Castello2401 Пользователь сайта

    С нами с:
    08.04.2014
    Сообщения:
    10
    Симпатии:
    0
    Баллы:
    2
    Пересмотрел геометрию, да, между точек одного фейса. Там в основном фейс который со стороны обычно выглядит как треугольник, похож на сплошную линию, т.е. одна из трех координат вершин имеет == координаты с одной из оставшихся двух вершин. Вот подобное и надо исправить путем "раздвигания" координат одинаковых точек фейса, ну и соответственно перебрать такой функцией все фейсы, всех объектов сцены.
     
  4. Savin Denis vip

    Savin Denis Moderator Команда форума

    С нами с:
    05.05.2005
    Сообщения:
    1.633
    Симпатии:
    0
    Баллы:
    210
    Вот как вариант удаляем все фэйсы с очень маленькой площадью:

    Код:
    obj = $
    meshop.deleteFaces obj (for f  =1 to obj.numfaces where  meshop.getFaceArea obj #{f} < 0.0001 collect f)
    update obj	
    
    дальше , если не устраивает, сможешь сам у найденных феэсов потвикать точки.
     
  5. Castello2401

    Castello2401 Пользователь сайта

    С нами с:
    08.04.2014
    Сообщения:
    10
    Симпатии:
    0
    Баллы:
    2
    Проверил такой вариант на стандартном чайнике, на него экспортер ругался по со след координатам:
    Код:
       -3.935883,   -4.171432,    0.000000
       -3.935883,   -4.171432,    0.000000
    ...
       -3.935883,   -4.171432,   48.785187
       -3.935883,   -4.171432,   48.785187
    ....
    
    Экспорт прошел нормально (без ошибок на плохие фейсы), но со следующими издержками:
    Код:
    8 tverts are orphaned
    Но направление куда двигаться уже примерно понятно, удалять фейсы не вариант, т.к. из-за этого могут возникать другие проблемы, да и вообще не эстетичный вариант решения проблемы. Нужно раздвигать точки, будем пробовать, спасибо за наводку в определении плохих фейсов.
     
Модераторы: Savin Denis

Поделиться этой страницей