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

Сглаживание объектов

Тема в разделе "Общие вопросы", создана пользователем Paul_Winex, 7 окт 2007.

Модераторы: He77ga, Stanislav Linus
  1. Paul_Winex

    Paul_Winex Мастер

    С нами с:
    02.06.2007
    Сообщения:
    698
    Симпатии:
    10
    Баллы:
    126
    У меня такой вот вопрос:
    Есть объект, он как бы гладкий, сплошной без лишних или вообще каких-либо углов. Нужно что бы он разделился на несколько частей, и собрался вновь. Задача в плане анимации довольно простая. Но кк бы мне избежать этих границ, что появляются на стыках частей? Части собираются не равномерно, потом простая подмена объекта другим цельным не пойдет. Как достичь сглаживания двух частей, что бы это можно было заанимировать, и собранный объект был гладкий?
     

    Вложения:

    • 426456.jpg
      426456.jpg
      Размер файла:
      9 КБ
      Просмотров:
      53
  2. Paul_Winex

    Paul_Winex Мастер

    С нами с:
    02.06.2007
    Сообщения:
    698
    Симпатии:
    10
    Баллы:
    126
    Ну что ж, недождавшись ответа я отвечаю сам. Это не значит что я знал раньше, просто поразмыслив над темой пришел к выводу. И так, в чём, собственно, заключалась проблема? В том что полигоны не имели сглаживаня друг с другом, находясь на стыке объектов. Даже являясь одним объектом или имея одну группу сглаживания, они были разными. Так в чем же проблема? Обратимся к самом системе сглаживания. Как происходит оно в 3D графике? Допустим есть 2 полигона, если схематически их отобразить, то получится нечно, похожее на рисунок 1. Тут же добавлен источник света. Каким образом происходит затенение объекта и почему образуются резкие и плавные переходы? Не вдаваясь в подробности геометрии давайте разсуждать на уровне 2D. Для начала за основу берется так называемая "нормаль" или "нормалия", которая является перпендикуляром, проведенным из центра полигона (N) и расщитывается угол падения света относительно этого элемента. Рисунок 2. От результата расчета, а именно от угла падения света, зависит степерь освещенности конкретного полигона. И мы имеем полигоны разной плотности освещения. А что если им поставить одну группу сглаживания? В этом случае полученный результат имеет вид как бы растяжки света. От одного параметра освещенности к другому. Как бы получается такая ситуация: чем конкретная точка на полигоне ближе к другому полигону, тем больше нормаль этой точки приближается к центральной нормали соседнего полигона. Рисунок 3. В данном случае расчет освещения как бы происходит не для целой плоскости полигона, а для каждой его точки или точней пикселя на картинке. Поэтому и кажется что всё гладко даже при не очень плотной сетке. (Если кто не согласен или видит грубые ошибки в моем описании, то скажу, что я так понимаю и не притендую на истину. Это достаточно понятный способ описания системы освещения)
    Теперь к нашей проблеме. Почему 2 соседних разедененных полигона не связаные общим сглаженым светом? Ответ прост - они вовсе не соседние! И сглаживаются лишь соедененные полигоны. А как же тогда нам быть, если надо их сгладить? И тут, как оказалось, не сложная задача, хотя проблемы еще есть, но о них позже. И так, чтобы сгладить два отсоедененных но стоящих вплотную полигонов, а точней сделать иллюзию гладкости, нужно уровнять их нормали. А точней - сделать это полигоны лежащими в одной плоскости. Давайте я лучше нарисую чтобы было понятно. Рисунок 4. Вот в общем то и всё, полигоны лежат в одной плоскости и даже при том что они будут разными объектами, они будут казаться сглаженными. Но тут возникает проблема со структурой сетки, а так же необходима какая-то техника. Для начала расскажу как такое сделать. Обычно необходимо резать вдоль ребра. Чтобы без особых проблем разрезать по прямой, делаем следующее: выделяем ряд ребер и делаем им chemfer (фаску), в результате мы получаем новый ряд полигонов. Они, соответственно и будут разрезаться оставаясь в одной плоскости. Если сейчас выделить поперечные ребра и соеденить их одним ребром при помоще компнды Connect (соеденить), то прежне ребро вернется на место. Но оно будет как бы глубже чем раньше. И тут вот вознникает первый облом. Это изменение геометрии. К тому же, в ровномерной сетке появляется ряд полигонов меньшых по размеру. В довольно гладкой поверхности это будет заметно. Но не так резко как если бы сглаживания вовсе небыло. Итак, из рисунка 5 мы должны получить рисунок 6. После чего можно разделять объект на 2 части но вновь созданному ребру. Хочу заметить, что команда Extrude для ребра с нулевой высотой тут не поможет, так как нулевая высота оставит ребро на месте не опуская и не выравнивая полигоны. Так же можно сделать Chemfer достаточно большой, что бы полигоны остались одинаковыми, потом просто склеив совпадающие точки.
    На органических объектах это будет довольно заметно, если вы делаете трансформера-киборга. Но вот для механики можно и поднастроиться, и будет нормально. И еще одна ложка дёгтя в мою теорию :). Довольно сложно будет сделать такую систему если разеденение идет не по прямой а по каким-то кривым направлениям. Так что нужно либо смириться и рабртать, либо искать другой способ сглаживания.
    Всё, теперь буду стараться залить картинки, о которых говорил.
     
  3. Paul_Winex

    Paul_Winex Мастер

    С нами с:
    02.06.2007
    Сообщения:
    698
    Симпатии:
    10
    Баллы:
    126
    Рисунки
     

    Вложения:

    • 428096.jpg
      428096.jpg
      Размер файла:
      5,3 КБ
      Просмотров:
      59
    • 428097.jpg
      428097.jpg
      Размер файла:
      7,4 КБ
      Просмотров:
      56
    • 428098.jpg
      428098.jpg
      Размер файла:
      7 КБ
      Просмотров:
      61
  4. Paul_Winex

    Paul_Winex Мастер

    С нами с:
    02.06.2007
    Сообщения:
    698
    Симпатии:
    10
    Баллы:
    126
    Рисунки
     

    Вложения:

    • 428101.jpg
      428101.jpg
      Размер файла:
      5 КБ
      Просмотров:
      51
    • 428102.jpg
      428102.jpg
      Размер файла:
      5,8 КБ
      Просмотров:
      57
    • 428103.jpg
      428103.jpg
      Размер файла:
      8 КБ
      Просмотров:
      51
  5. Paul_Winex

    Paul_Winex Мастер

    С нами с:
    02.06.2007
    Сообщения:
    698
    Симпатии:
    10
    Баллы:
    126
    Анимация
    http://img258.imageshack.us/my.php?image=smosh1ds1.gif
     
  6. Paul_Winex

    Paul_Winex Мастер

    С нами с:
    02.06.2007
    Сообщения:
    698
    Симпатии:
    10
    Баллы:
    126
    Да уж... хороший монолог получился :)
     
  7. ArseniXC

    ArseniXC Мастер

    С нами с:
    08.02.2006
    Сообщения:
    157
    Симпатии:
    1
    Баллы:
    455
    Paul_Winex, впервые вижу такой развернутый ответ на свой же вопрос, респект! Эх.. если бы все пользователи форума с такой серьезностью относились к поставленным вопросам. =)

    p.s. Удалил два последних сообщения чтоб не затемняли отличную тему. =)
     
  8. Paul_Winex

    Paul_Winex Мастер

    С нами с:
    02.06.2007
    Сообщения:
    698
    Симпатии:
    10
    Баллы:
    126
    Спасибо :) К сожалению не все так удается поддерживать, но вот этот вопрос он упоминается в обсуждении трансформеров. там оже интересно почитать.
    http://www.render.ru/forum/viewtopic.php?post_id=594494#594494
     
  9. Александр Карабардин

    Александр Карабардин Знаток

    С нами с:
    05.10.2005
    Сообщения:
    104
    Симпатии:
    3
    Баллы:
    27
    хм...поздно отвечаю, ну да ладно. У меня до прочтения данного способа такая мысль первой пришла в голову: тупо сделать карту нормалей. Думаю, решает проблемы при любых швах.
     
  10. Paul_Winex

    Paul_Winex Мастер

    С нами с:
    02.06.2007
    Сообщения:
    698
    Симпатии:
    10
    Баллы:
    126
    А ну ка подробней...
     
  11. Savin Denis vip

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

    С нами с:
    05.05.2005
    Сообщения:
    1.633
    Симпатии:
    0
    Баллы:
    210
    Если тема все еще актуальна создай в тему в разделе скриптов. Есть идеи как обмануть SG.
     
  12. Paul_Winex

    Paul_Winex Мастер

    С нами с:
    02.06.2007
    Сообщения:
    698
    Симпатии:
    10
    Баллы:
    126
    Если ты в курсе где создавать, почему сам не сделал? Скрипты это интересно, но можно же и тут это сделать. Хотя не мне решать. В общем сделай тему и сюда ссылу, там и пообщаемся.
     
  13. Savin Denis vip

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

    С нами с:
    05.05.2005
    Сообщения:
    1.633
    Симпатии:
    0
    Баллы:
    210
    Кому это нужно мне или тебе ?
    Здесь не выкладываю по двум причинам:
    a) Для этого существует специализированный раздел.
    б) Потом легче искать.
     
  14. Savin Denis vip

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

    С нами с:
    05.05.2005
    Сообщения:
    1.633
    Симпатии:
    0
    Баллы:
    210
    Впринципе все очень легко делается даже без скрипта.
     

    Вложения:

    • 698125.jpg
      698125.jpg
      Размер файла:
      40,6 КБ
      Просмотров:
      56
  15. Paul_Winex

    Paul_Winex Мастер

    С нами с:
    02.06.2007
    Сообщения:
    698
    Симпатии:
    10
    Баллы:
    126
    Да я ж в том смысле что если знаешь где, то сделай, а то я еще куда-нить не туда залезу. А по картинке я лично ниче не понял, если можно, расскажи что изображено!
     
  16. Savin Denis vip

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

    С нами с:
    05.05.2005
    Сообщения:
    1.633
    Симпатии:
    0
    Баллы:
    210
    Волков бояться в лес не ходить.
    Да легче глянуть лови сцену.
     
  17. Paul_Winex

    Paul_Winex Мастер

    С нами с:
    02.06.2007
    Сообщения:
    698
    Симпатии:
    10
    Баллы:
    126
    А теперь расскажи в чем там дело, будем считать что я тупой :)
     
  18. Savin Denis vip

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

    С нами с:
    05.05.2005
    Сообщения:
    1.633
    Симпатии:
    0
    Баллы:
    210
    =) Все просто, секрет в модификаторе Edit Normals который позволяет работать с вертексными нормалями (как в приличных пакетах=), с помощью него мы фризим оригинальные нормали объекта.

    PS
    Если не сочтеш затруд всеже сделать тему разделе скриптов, то выложу пару скриптов для автоматизации разбивки на фрагменты.
     
  19. Paul_Winex

    Paul_Winex Мастер

    С нами с:
    02.06.2007
    Сообщения:
    698
    Симпатии:
    10
    Баллы:
    126
    ОК, сделаю в ближайшее время!
     
Модераторы: He77ga, Stanislav Linus

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