Render.ru

Лечение импортированной геометрии

FSV141

Активный участник
Рейтинг
13
#1
Импортировал (через OBJ) из MAX-а модель в Realsoft. Какая там сетка - не сложно догадаться. Но делать нечего. Другой такой модели нет и не предвидится. Кстати, вполне возможно, что модель вообще сделана сканером. Полигонов много - за миллион.
В финальных сценах предполагаются крупные ракурсы и в этом случае все красоты полигональных граней будут видны очень хорошо.
Если включить Phong, то вылазят артефакты НЕплоских полигонов и результат выглядит еще хуже!
Посоветйте, что делать? Как оптимизировать геометрию? Как автоматом избавиться от НЕплоских полигонов (вручную это нереально)?

Попутно предложение для разработчиков: может стоит сделать "у Фонга" регулируемый параметр порогового значения угла, когда он срабатывает? В Cinema 4D у тега Phong есть такая штука. И она частенько здорово выручает!
 

Вложения

ODA

Активный участник
Рейтинг
11
#2
Для справки - Пороговое значение угла задается инструментом > Crease.

Ситуация понятна и знакома. Вариантов два:
1 Лечить то что есть. Не самый кроткий путь.
1.1 Использовать инструмент JoinF. Часто после импорта из Мах мы получаем не цельную поверхность (судя по скиншотам, у тебя так и произошло), а набор отдельных полигонов . Этот инструмент поможет решить эту задачу. надо будет поиграть порговым значением Join distance для желаемого результата.
1.2. Eсли после этого в поверхности еще имеются "дырки" то закрываем из при помощи инструмента Fill
1.3 Когда все полигоны соединены применяем интсрумент T>Q. Преобразовываем треугольные face в четрырехугольники.
1.4 Если результат после все этого не совсем устраивает - то придется почистить топологию руками. Понимаю что муторно, но иногда другого выхода нет

Но судя по скиншотам, топология Edge нарушена сильно.
То вариант 2.
Не занимаемся реанимацией сетки, а делаем красивый ход:)
2.1 Создаем SDS сферу, так что бы весь объект целиком поместился в нее. Плотность поверхности выбираем исходя из сложности исходного объекта
2.2 Делаем масштабирование новой sds сферы относительно ее центра (about Pivot) с включенно опцией Collision Deformation. Результат- поверхность SDS сферы теперь обтянула исходную геометрию. Плюс такого метода - он очень быстр и получившиеся топология новой поверхности в содержит в раЗы меньше полигонов, при этом сохраняя форму импортированного объекта их MAX.

Метод имеет вариации в зависимости от формы импортированного объекта (может потребоваться несколько этапов "приглаживания" разными инструментами трансформации с включенным режимом Collision Deformation ). Н окак правило он более эффективен чем путь варианта 1. Обычно, я пользуюсь имеено вторым вариантом.
 

FSV141

Активный участник
Рейтинг
13
#3
Дима, огромное спасибо! Особенно за советы "первой группы".
Мысли насчет обтягивания сферой с включенным Collision приходили и в мою дурную голову. Несколько смутило меня наличие в некоторых объектах дыр... Но тут пробовать надо.
Еще раз огромное спасибо! Главное, теперь у меня есть за что зацепиться!
Что получится - отпишу.
 

ODA

Активный участник
Рейтинг
11
#4
к первой группе можно еще добавить инструмент "Unwrap". Позволяет разгладить сетку. Очень удобен в сочетании с SoftSelection.

По второму варианту. Использование Collision Deformation. очень эффективный путь. Часто пользуюсь для построения SDS поверхности по NURBS, импортированной из того же Rhino. Приемущества - быстро получаем нужную топологию в SDS с полным контролем гладкости (по NURBS "болванке").
 

FSV141

Активный участник
Рейтинг
13
#5
2-й вариант не работает. По крайней мере со сферой. У меня, конкретно, подвздошная кость таза... а что будет с черепом?!?!? - страшно представить!
Так вот, в ней (в модели кости) есть дыры... и вообще, геометрия... я бы сказал, невыпуклая. Вот на такого рода объектах, похоже "метод обтягивания сферой" не работает.

Была мысль использовать шесть плоскостей (расположенных как поверхности куба) и их натягивать на соответствующие стороны объекта (с включенным Collision). Но вот непонятно как потом сшивать из этих лоскутов поверхность? Было бы здорово, совмещая две искривленные плоскости рассекать их по линии пересечения. А потом уж сшить - дело техники.... я так думаю... Но как это сделать???
 

__yra

Активный участник
Рейтинг
5
#6
А может быть поверху руками новую модель сваять привязываясь через 5 к ключевым точкам имеющейся модели?
Мне даже интересно стало, может выложишь эту косточку где нибудь, что бы попробовать.
 

FSV141

Активный участник
Рейтинг
13
#7
Да там целый скелет! ;)
Хотя мне нужны пока только вот эта подвздошная и бедренная кости...
Но выложить конечно же могу. Счас....
http://ifolder.ru/9468714
Только я MAX-овскую модель выложил, потому что она НАМНОГО компактней. Найдется Макс в хозяйстве? Я сам его обычно не держу, но вот пришлось скачать поставить. Если Макса нет или нет желания его ставить ради этой ерунды, то могу конечно закинуть и R3D-шный файл. Только это надо из дома делать. Тут у нас трафик считается :(
 

__yra

Активный участник
Рейтинг
5
#9
http://ifolder.ru/9478623
Вот вариант который сделал масштабированием цилиндра с коллизиями.
Точной геометрии не получил, без серьёзной ручной правки думаю невозможно в принципе.
Такое впечатление, что исходная модель получена в результате сканирования.
Правда в исходной модели не наблюдал артифактов не позволяющих использовать её в рендеринге.
FSV141 - перед экспортом из макса ты её конвертировал в поли?
 

FSV141

Активный участник
Рейтинг
13
#10
Я обратился в форум пользователей MAX-а и мне там помогли привести модель к исходному низкополигональному виду:http://www.render.ru/forum/viewtopic.php?post_id=698116#698116
Однако, всех проблем это не решило.
Во-первых, при сглаживании уже внутри Realsoft сильно искажается геометрия. Например, становится неправдоподобно толстой шейка головки бедра.
Во-вторых, сглаженная геометрия совсем получается "дурная" по количеству полигонов. Почти не ворочается!..
Так что выход один - работать с исходной (в МАКС-е сглаженной) моделью.

И тут мне пришло в голову проверить модель в Cinema 4D. Сначала сделал FBX-файл. Риал его не открыл, а Синема очень даже хорошо съела. Я был удивлен, но у Синемы никаких проблем с отображением сетки не наблюдалось! Сначала я подумал, что всему виной FBX и сделал OBJ, который "скормил" обоим пакетам. Оба его съели вполне успешно. Кстати, во вьюпорте Realsoft 3D моделька крутится чуть живее, чем в Синеме. Это приятно, но это мелочи в сравнении с рассматриваемыми проблемами...
Каково же было мое удивление, когда я обнаружил, что Синема и тут прекрасно показывает модель, а у Риала с ней все те же проблемы.

Я включил Фонг на подвздошную кость и сделал "контрастный тест". То есть, наложил на модель кости простейший материал, со включенным отражением. Что получилось - хорошо видно на картинках.
Попутно заметил, что рендерит Синема как минимум в два раза быстрее (это видно по пику процессорной нагрузки на графиках) и, что самое главное, почти не ест дополнительно памяти, тогда как Риал быстро съел всю доступную оперативку и начал свопить :( В этом контексте становится понятной политика разработчиков по сокращению шагов для отката. Это съедает много памяти. Сам же менеджмент памяти в Реалсофте никуд ане годится :(

Дима, может стоит описать разработчикам обсуждаемую тут ситуация. Может они, варясь в собственном соку не знают о вышеназванных проблемах?
 

ODA

Активный участник
Рейтинг
11
#12
Сергей ну просто удивительно:)
Взял ради интереса твой проект и просчитал косточку. Ничего с ней не делал. Тупо поставил три источника света (два SpotLight и ambient) и нажал рендер. Время 18 секунд и 23 секунды на очень слабенькой машинке (Р4 2.4 1GB Ram).


По FBX. В 6 версии есть проблемы с этим форматом при импорте/экспорте анимации. Сейчас над этим усиленно трудятся:) С импортом геометрии все должно быть нормально. Если можно пришли мне свой FBX.


Сравнивать время рендера так совсем не корректно. В RS - рендер оптимизируется под каждую сцену. Тот присет, который у тебя показан на скриншоте имеют установку по умолчанию в настройках PostProc>включенную опцию Safety area Вот для начала ее надо отключить, иначе ты считаешь картинку в четыре раза больше чем есть на самом деле. Так же надо отключить все разделы рендера относящиеся к Volum. Далее посмотреть какой размер на Scale стоит на постобработке (если он используется). Параметр Geometry Quality в товое случаи можно ставить в Low (сетка модели и так очень плотная). По этой же причине в настройках реденринга самой "косточки" вполне можно поставить 1 вместо 2 (по умолчанию) в Quality. Проделав то что я только что написал я сократил время просчета с 23 секунд до 9 ти. А еще масса параметром остались не тронутыми:)

RS прекрасно работает с памятью. Тот режим который стоит по по умолчанию использует всю имеющуюся память под задачи рендеринга. Если оперативки не хватает то начинает использоваться свап. Что у тебя и произошло. Программа сделала то что ты ей задал. Зайди в раздел Mics>Memory Usage и поставь тот режим работы с памятью который для тебя более выгоден.


PS Меня насторожили вот эти слова - "при сглаживании уже внутри Realsoft сильно искажается геометрия" Можно поподробнее что и как ты тут на сглаживал. Похоже, многие проблемы твоего проблемного рендеринга вытекают именно из этих строк.
 

Вложения

ODA

Активный участник
Рейтинг
11
#13
ДА вот еще в догонку.

Важно иметь в RS при импорте НЕСГЛАЖЕНУЮ модель. Т.е никаких сглаживанний в MAX делать нельзя ни коем случаи. Иначе мы получаем твой первый вариант модели - огромное количество лишней информации.
Вот то что получилось при импорте твоей новой модели, которую тебе помогли сделать в ветке МАХ.

Как видим, топология совершенно правильная и рендер нормальный. Не прибегая к оптимизации, о которой я писал выше, я получил картинку на экран 1600ч1200 ровно за 3 секунды просчета. Для форума ее пришлось уменьшить в размерах (больше 1024х1024 точек картинки тут не разместиш).
 

Вложения

ODA

Активный участник
Рейтинг
11
#14
Еще в догонку :rolleyes:

Порядок работы с моделью следующий
1. Сразу после импорта разделить скелет на кости. ДЛЯ этого делаем так:
Переходит в режим Face. Выделяем любой одиночный Face и нажимаем Shift+ стрелка вверх. Не отпускаем до тех пор пока не выберутся все face-ы. После этого идем в окно иерархии и с зажатым Ctrl перетягиваем наш объект. Мы получили копию но при этом выбранные face остались активны. Делаем Invert Selection (Ctrl+I, как в Photoshop-е) и командой Destroy удаляем лишнее. Переименовываем наш новый объект так как нам нужно. Теперь возвращаемся на "родительский" объект и видим что наша выбор face до сих пор активен. Опять же при помощи команды Destroy удаляем face. Все:)
2. Теперь надо приступить к небольшому лечению геометрии после импорта. Если она еще в треугольниках то выполняем T>Q. После этого надо посмотреть правильность Edge в модели. Иногда появляются лишнии или наоборот не хватает. В идеале вся наша модель должна быть из 4-х угольников если где то это требует углубленнго редактирования то это мето не трогаем занчит так и надо:)
3. Изменяем тип сглаживания c полигонального на Smoothen to .... по выбору. Если в модели есть открытые поверхности то не забываем включить Interpolate Boundary.
 

__yra

Активный участник
Рейтинг
5
#15
Я тоже качнул обновлённую модель и не увидел проблем.
переключил в сабдивы и поставил материалы с амбиент оклюжен и отражением, рендерит быстро, дефектов не увидел.
 

Вложения

FSV141

Активный участник
Рейтинг
13
#16
Ну что-ж, в очередной раз хочу сказать ОГРОМНОЕ спасибо Диме. Очень много полезной информации узнал. Будем дальше работать, ибо этот проект как раз очень хотелось сделать в Realsoft-е. Да и вообще перейти на него полностью.

Единственный вопрос остался без ответа: почему плохую геометрию Синема и Гудини показывают хорошо, а Реалсофт плохо?
 

__yra

Активный участник
Рейтинг
5
#17
FSV141 - один из вариантов видеодрайвера ( из своей практики: не всегда последние для ATI )
 

ODA

Активный участник
Рейтинг
11
#18
Сергей, выкладываю OpenGL косточки по первому варианту геометрии. Видеокарта GF6800. Тоже стоит задуматься:)
 

Вложения

FSV141

Активный участник
Рейтинг
13
#19
Я чуть было не задумался... если бы реалсофтовский рендер не показывал то же самое, что и OpenGL.

Давайте расставим точки над "i". Что вы называете первым вариантом геометрии? Я считаю, что это конвертированный из MAX в obj-формате ИСХОДНЫЙ файл (без помощи со стороны специалистов по МАКС-у). У меня он, кстати, получается с разделенными объектами. То есть, тот файл, котоый МАКС сглаживал. У меня на нем видны артефакты как во вьюпорте, так и на рендеринге. Что я могу делать неправильно? Степень моего влияния на геометрию близка к нулю!
 

ODA

Активный участник
Рейтинг
11
#20
Ну да, я про ту же самую геометрию из первого архива (пост #7). Как раз тесты (картинки в постах #12 и #18) делались именно с этой моделью. Хотя, если быть совсем правильным, то это уже сглаженная MAX-м поверхность, а значит она уже содержит погрешности. Если есть возможность то желательно начать работать с исходной моделью - т.е моделью которая была до сглаживания в МАХ-е. Она по топологии должна быть похожа н модель второго варианта (восстановленную при помощи ребят с ветки по Максу). Конечно, перообразование <> внесли в нее искажения, но насколько они критичны, зависит от поставленной задачи.

Сергей, я взял имеено твою модель и на ее базе сделал картинки. Мне трудно сказать что ты делаешь не так и почему у тебя такой результат. Но отличия видно не вооруженным глазом.
Порядок своих действия я уже писал . Добавлю, что после проверки модели на "дырки" и направления нормалей поставил режим Rendering Type >Smoothen to trianles и все... никаких артифактов как в OpenGL так и на рендере. Если крупных планов не планируется (печать на плакаты) то можно из SDS перевести поверхность в Triset. Там задать угол сглаживания для полигонов и получит модель как в МАX/Cinema и т.п.
 
Сверху