У меня такой вот вопрос:
Есть объект, он как бы гладкий, сплошной без лишних или вообще каких-либо углов. Нужно что бы он разделился на несколько частей, и собрался вновь. Задача в плане анимации довольно простая. Но кк бы мне избежать этих границ, что появляются на стыках частей? Части собираются не равномерно, потом простая подмена объекта другим цельным не пойдет. Как достичь сглаживания двух частей, что бы это можно было заанимировать, и собранный объект был гладкий?
Ну что ж, недождавшись ответа я отвечаю сам. Это не значит что я знал раньше, просто поразмыслив над темой пришел к выводу. И так, в чём, собственно, заключалась проблема? В том что полигоны не имели сглаживаня друг с другом, находясь на стыке объектов. Даже являясь одним объектом или имея одну группу сглаживания, они были разными. Так в чем же проблема? Обратимся к самом системе сглаживания. Как происходит оно в 3D графике? Допустим есть 2 полигона, если схематически их отобразить, то получится нечно, похожее на рисунок 1. Тут же добавлен источник света. Каким образом происходит затенение объекта и почему образуются резкие и плавные переходы? Не вдаваясь в подробности геометрии давайте разсуждать на уровне 2D. Для начала за основу берется так называемая "нормаль" или "нормалия", которая является перпендикуляром, проведенным из центра полигона (N) и расщитывается угол падения света относительно этого элемента. Рисунок 2. От результата расчета, а именно от угла падения света, зависит степерь освещенности конкретного полигона. И мы имеем полигоны разной плотности освещения. А что если им поставить одну группу сглаживания? В этом случае полученный результат имеет вид как бы растяжки света. От одного параметра освещенности к другому. Как бы получается такая ситуация: чем конкретная точка на полигоне ближе к другому полигону, тем больше нормаль этой точки приближается к центральной нормали соседнего полигона. Рисунок 3. В данном случае расчет освещения как бы происходит не для целой плоскости полигона, а для каждой его точки или точней пикселя на картинке. Поэтому и кажется что всё гладко даже при не очень плотной сетке. (Если кто не согласен или видит грубые ошибки в моем описании, то скажу, что я так понимаю и не притендую на истину. Это достаточно понятный способ описания системы освещения)
Теперь к нашей проблеме. Почему 2 соседних разедененных полигона не связаные общим сглаженым светом? Ответ прост - они вовсе не соседние! И сглаживаются лишь соедененные полигоны. А как же тогда нам быть, если надо их сгладить? И тут, как оказалось, не сложная задача, хотя проблемы еще есть, но о них позже. И так, чтобы сгладить два отсоедененных но стоящих вплотную полигонов, а точней сделать иллюзию гладкости, нужно уровнять их нормали. А точней - сделать это полигоны лежащими в одной плоскости. Давайте я лучше нарисую чтобы было понятно. Рисунок 4. Вот в общем то и всё, полигоны лежат в одной плоскости и даже при том что они будут разными объектами, они будут казаться сглаженными. Но тут возникает проблема со структурой сетки, а так же необходима какая-то техника. Для начала расскажу как такое сделать. Обычно необходимо резать вдоль ребра. Чтобы без особых проблем разрезать по прямой, делаем следующее: выделяем ряд ребер и делаем им chemfer (фаску), в результате мы получаем новый ряд полигонов. Они, соответственно и будут разрезаться оставаясь в одной плоскости. Если сейчас выделить поперечные ребра и соеденить их одним ребром при помоще компнды Connect (соеденить), то прежне ребро вернется на место. Но оно будет как бы глубже чем раньше. И тут вот вознникает первый облом. Это изменение геометрии. К тому же, в ровномерной сетке появляется ряд полигонов меньшых по размеру. В довольно гладкой поверхности это будет заметно. Но не так резко как если бы сглаживания вовсе небыло. Итак, из рисунка 5 мы должны получить рисунок 6. После чего можно разделять объект на 2 части но вновь созданному ребру. Хочу заметить, что команда Extrude для ребра с нулевой высотой тут не поможет, так как нулевая высота оставит ребро на месте не опуская и не выравнивая полигоны. Так же можно сделать Chemfer достаточно большой, что бы полигоны остались одинаковыми, потом просто склеив совпадающие точки.
На органических объектах это будет довольно заметно, если вы делаете трансформера-киборга. Но вот для механики можно и поднастроиться, и будет нормально. И еще одна ложка дёгтя в мою теорию 🙂. Довольно сложно будет сделать такую систему если разеденение идет не по прямой а по каким-то кривым направлениям. Так что нужно либо смириться и рабртать, либо искать другой способ сглаживания.
Всё, теперь буду стараться залить картинки, о которых говорил.
Paul_Winex, впервые вижу такой развернутый ответ на свой же вопрос, респект! Эх.. если бы все пользователи форума с такой серьезностью относились к поставленным вопросам. =)
p.s. Удалил два последних сообщения чтоб не затемняли отличную тему. =)
хм...поздно отвечаю, ну да ладно. У меня до прочтения данного способа такая мысль первой пришла в голову: тупо сделать карту нормалей. Думаю, решает проблемы при любых швах.
Если ты в курсе где создавать, почему сам не сделал? Скрипты это интересно, но можно же и тут это сделать. Хотя не мне решать. В общем сделай тему и сюда ссылу, там и пообщаемся.
Да я ж в том смысле что если знаешь где, то сделай, а то я еще куда-нить не туда залезу. А по картинке я лично ниче не понял, если можно, расскажи что изображено!
=) Все просто, секрет в модификаторе Edit Normals который позволяет работать с вертексными нормалями (как в приличных пакетах=), с помощью него мы фризим оригинальные нормали объекта.
PS
Если не сочтеш затруд всеже сделать тему разделе скриптов, то выложу пару скриптов для автоматизации разбивки на фрагменты.
Доступ к резюме доступен только по пакетному доступу HR менеджерам зарегистрированных компаний. Узнать о вариантах корпоративных пакетов можно по ссылке.
Paul_Winex
Есть объект, он как бы гладкий, сплошной без лишних или вообще каких-либо углов. Нужно что бы он разделился на несколько частей, и собрался вновь. Задача в плане анимации довольно простая. Но кк бы мне избежать этих границ, что появляются на стыках частей? Части собираются не равномерно, потом простая подмена объекта другим цельным не пойдет. Как достичь сглаживания двух частей, что бы это можно было заанимировать, и собранный объект был гладкий?
Вложения
Paul_Winex
Теперь к нашей проблеме. Почему 2 соседних разедененных полигона не связаные общим сглаженым светом? Ответ прост - они вовсе не соседние! И сглаживаются лишь соедененные полигоны. А как же тогда нам быть, если надо их сгладить? И тут, как оказалось, не сложная задача, хотя проблемы еще есть, но о них позже. И так, чтобы сгладить два отсоедененных но стоящих вплотную полигонов, а точней сделать иллюзию гладкости, нужно уровнять их нормали. А точней - сделать это полигоны лежащими в одной плоскости. Давайте я лучше нарисую чтобы было понятно. Рисунок 4. Вот в общем то и всё, полигоны лежат в одной плоскости и даже при том что они будут разными объектами, они будут казаться сглаженными. Но тут возникает проблема со структурой сетки, а так же необходима какая-то техника. Для начала расскажу как такое сделать. Обычно необходимо резать вдоль ребра. Чтобы без особых проблем разрезать по прямой, делаем следующее: выделяем ряд ребер и делаем им chemfer (фаску), в результате мы получаем новый ряд полигонов. Они, соответственно и будут разрезаться оставаясь в одной плоскости. Если сейчас выделить поперечные ребра и соеденить их одним ребром при помоще компнды Connect (соеденить), то прежне ребро вернется на место. Но оно будет как бы глубже чем раньше. И тут вот вознникает первый облом. Это изменение геометрии. К тому же, в ровномерной сетке появляется ряд полигонов меньшых по размеру. В довольно гладкой поверхности это будет заметно. Но не так резко как если бы сглаживания вовсе небыло. Итак, из рисунка 5 мы должны получить рисунок 6. После чего можно разделять объект на 2 части но вновь созданному ребру. Хочу заметить, что команда Extrude для ребра с нулевой высотой тут не поможет, так как нулевая высота оставит ребро на месте не опуская и не выравнивая полигоны. Так же можно сделать Chemfer достаточно большой, что бы полигоны остались одинаковыми, потом просто склеив совпадающие точки.
На органических объектах это будет довольно заметно, если вы делаете трансформера-киборга. Но вот для механики можно и поднастроиться, и будет нормально. И еще одна ложка дёгтя в мою теорию 🙂. Довольно сложно будет сделать такую систему если разеденение идет не по прямой а по каким-то кривым направлениям. Так что нужно либо смириться и рабртать, либо искать другой способ сглаживания.
Всё, теперь буду стараться залить картинки, о которых говорил.
Paul_Winex
Вложения
Paul_Winex
Вложения
Paul_Winex
http://img258.imageshack.us/my.php?image=smosh1ds1.gif
Paul_Winex
ArseniXC
p.s. Удалил два последних сообщения чтоб не затемняли отличную тему. =)
Paul_Winex
http://www.render.ru/forum/viewtopic.php?post_id=594494#594494
Александр Карабардин
Paul_Winex
Savin Denis
Paul_Winex
Savin Denis
Здесь не выкладываю по двум причинам:
a) Для этого существует специализированный раздел.
б) Потом легче искать.
Savin Denis
Вложения
Paul_Winex
Savin Denis
Да легче глянуть лови сцену.
Paul_Winex
Savin Denis
PS
Если не сочтеш затруд всеже сделать тему разделе скриптов, то выложу пару скриптов для автоматизации разбивки на фрагменты.
Paul_Winex