Чем большими вычислительными мощностями мы обладаем, тем больше мы хотим от них получить. И поэтому в наше время всё большое значение приобретают методы моделирования объектов реального мира. Мы хотим, чтобы реальный и виртуальный миры стали неотличимыми, чтобы погружение в созданную нами реальность было полным. Поэтому сейчас мы ставим перед собой задачи, которые ещё несколько лет назад казались невероятными по сложности и невозможными для компьютерного моделирования. Одной из таких задач является построение реалистичной физической модели волос и их освещение.
Очень сложно сделать полностью реалистичную модель для динамичных волос, т.к. каждый волос имеет сложную механическую структуру. Кроме того, очень мало исследований проведено в этой области, поэтому нет практически никаких данных о точной модели взаимодействия волос. Анимация головы, полностью покрытой волосами, имеет очевидные проблемы из-за вычислительной сложности процесса. Как следствие, существующие методы предлагают некий компромис между реализмом и эффективностью в зависимости от назначения приложения. Исследования показали, что несмотря на огромное количество волос на голове человека (более 100000), большинство из них двигаются похожим образом. Это открытие привело к появлению подходов, в основе которых лежит идея направляющих волос, для которых рассчитывается всё взаимодейтсвие, а остальные волосы являются интерполянтами контрольных.
Механика волоса
Волос - анизотропный деформируемый объект. Он может быть легко изогнут или скручен, но его практически невозможно расколоть или растянуть. Волос также очень эластичен и стремится вернуть свою форму после прекращение внешнего воздействия. Природа взаимодействия между волосами очень сложна. Это во многом связано с тем, что поверхность отдельного волоса не гладкая, а покрыта наклонными чешуйками. Нерегулярность поверхности приводит к неравномерноу трению внутри волоса, которое очень сильно зависит от ориентации чешуек и направления движения. Ко всему прочему, волос также очень трибоэлектричен, т.е. очень легко собирает статические электрические заряды даже в результате простого трения. Данный эффект довольно мало изучен.
Кроме того, на движение волос влияет их геометрическая форма. Так, кудрявые волосы при движении кажутся более эластичными, чем прямые, поскольку кудри можно растягивать в продольном направлении, как пружины. При этом отдельные волосы остаются нерастяжимыми. Стоит отметить, что появление волосяных пучков наиболее верятно в кудрявых волосах, где отдельные волосы больше контактируют между собой. Как показывают иследования, чем более запутана геометрическая форма волос, тем меньше степеней свободы она имеет во время движения. В отличие от хорошо изученных физических материалов, таких как жидкости, которые изучались веками и поведение которых описано точными уравнениями, точная физическая модель волос остаётся нерешённой проблемой и на данный момент не существует стандарта в этой области.
Рис. 18 Микроснимок волоса
Динамика отдельных прядей
В течение последних 20 лет было предложено три семейства алгоритмов для симуляции динамика отдельного волоса: системы множественных пружин, проективная динамика и жёсткие последовательные многосоставные цепи. Относительно недавно некоторые приёмы статических ветвей Кирхгофа были применены к динамике волос([6], [9]). Новая модель получила название динамичные супер-спирали (super-helices).
Множественные пружины
Одной из первых попыток анимации отдельных волос было моделирование волоса как множества частиц, соединённых жёсткими пружинами и петлями. У каждой частицы три степени свободы: перенос и два поворота. Упругость сгибания волос обеспечивается угловыми пружинами в каждом соединении. Однако при таком подходе не учитываются крутильная упругость и нерастягиваемость. Ограничение растяжимости волоса требует сильных пружин, что приводит к сложным уравнениям. Это часто вызывает нестабильность решения. Поэтому необходимо использовать маленькие шаги.
Много улучшений было сделано для данного подхода. Особенно в контексте моделирования тканей ([10]).
Одномерные проективные уравнения
Где-то через год после метода множественнх пружин был предложен другой метод ([5]). Он основывался на одномерных проективных дифференциальных уравнениях. Изначально используется модель статичных консольных балок. Это даёт некую начальную приемлимую конфигурацию для каждого волоса. После этого каждый волос рассматривается как цепь отдельных жёстких звеньев. Динамика волос осуществляется следующим образом:
Каждое звено приравнивается к вектору с определённым направлением и таким образом может быть параметризовано полярными углами.
Внешняя сила, применяемая к звену, проецируется на две плоскости, соответствующие полярным углам (см. рис. 19 ). При этом продольная (вдоль волоса) проекция силы не учитывается, т.к. она не должна оказывать какого-то бы ни было воздействия на упругое звено.
Фундаметнальные принципы динамики применяются к каждому полярному углу, что приводит к двум дифференциальным уравнениям. Эти уравнения решаются в каждый момент времени.
Рис. 19 Метод проективных уравнений
Рис. 20 Результат метода проективных уравнений
Этот метод привлекателен по многим причинам. Его легко релизовать, он эффективнй (десятки тысяч волос могут эффективно рассчитываться таким образом). Кроме того, при таком подходе волосы не растягиваются, в том время как изгибание учитывается правильно. Однако нельзя учесть крутильную упругость. Поэтому такой метод не позволяет управляться правильно с полностью трёхмерными движениями.
Жёсткие последовательные многосоставные цепи
Другим подходом к вычислению движения отдельных волос явилось использование передовых достижений в области кинематики. Такие подходы хорошо известны, например, в робототехнике ([7], [11]).
Каждый отдельный волос представляется в виде последовательной, жёсткой, многосоставной открытой цепи в урезанной системе координат, чтобы учитывать только изгибание и скручивание волоса. Растягивающие силы не рассматриваются. В отличие от гравитационного влияния, силы, ответственные за изгибательную и крутильную упругость рассматриваются для каждого звена. Дальше используются спецальные физические методы и вычисления, которые выполняются за линейное время.
Рис. 21 Метод жёстких последовательных многосоставных цепей
Динамичные супер-спирали
Для аккуратного моделирования движения отдельного волоса можно также использовать
теорию Кирхгофа для эластичных ветвей[12]. В результате механическая модель отдельного волоса, получившая название "супер-спираль", соответствует пространственной дискретизации изначально непрерывной модели Кирхгофа, где изгибы и скручивания ветви считаются постоянными для каждой определённой части ветви. Как результат, форма отдельного волоса - кусочная спираль с ограниченным числом степеней свободы. Дальше эта модель анимируется с использованием механикики Лагранажа. Модель супер-спирали учитывает нелинейное поведение волоса, изгиб и скручивание. В отличие от всех предыдущих моделей курчавость моделируется абсолютно правильно.
Надо заметить, что от хорошей модели динамики отдельного волоса требуется не только способность воспроизводить реалистичные движения отдельного волоса, но и правильно учитывать внешние силы: гравитацию, ветер и контакт с другими поверхностями. Все описанные методы с некоторыми расширениями и улучшениями позволяют это делать.
Оценка методов
В таблице 2 приведена краткая характеристика каждого метода моделирования динамики отдельного волоса для их сравнения и оценки. В таблице указаны наиболее важные критерии.
Табл. 2 Сравнение методов моделирования динамики отдельного волоса
Динамика всей причёски
Необходимость работы с большим количествм волос приводит к дополнительным трудностям: реализм совместного движения многих объектов и эффективность реализации. Взаимодействия между волосами весьма сложны и очень мало известно об этом явлении. При этом возникают очевидные проблемы, т.к. необходимо учитывать огромное количество контактов и столкновений, которые происходят постоянно или временно. Таким образом возникает две проблемы: определение взаимодействия и отклик на него. Более ранние модели игнорировали взаимодействие волос друг с другом для общей эффективности. В современных методах делаются некоторые предположения относительно этого процесса для упрощения. Все подходы делятся на три большие группы, которые рассматривают волосы с разных позиций.
Волосы как непрерывная среда
Так как отдельных волос на голове огромное количество, то моделирование каждого с вычислительной точки зрения является очень сложной задачей. Однако быо замечено, что волосы, находящиеся близко друг к другу, ведут себя похожим образом. Это дало возможность рассматривать волосы как анизотропную непрерывную среду.
Динамика флюидов
Волосы можно рассматривать как сплошную среду и рассчитывать их взаимодействие глобально. Чтобы учесть геометрию волоса и его жёсткость, каждый волос моделируется отдельно. Но при расчёте взаимодействия волос между собой, с телом и другими объектами используется модель динамики флюидов ([11]). Отдельные волосы кинематически прикреплены к ближайшим частицам (флюидам). В такой модели плотность "волосяной среды" определяется как масса волос на единицу объёма. Давление и вязкость - все силы, которые используются для учёта взаимодействия волос.
Используя такой подход, можно моделировать взаимодействие между волосами и телом путём введения дополнительных ограничивающих флюидов вокруг твёрдых объектов. Флюид распространяет своё влияние на ближайшие флюиды в зависимости от направления своей нормали. Вязкое давление флюида, которое зависит от "волосяной плотности", отвечает за трение между отдельными волосами.
Данный метод позволяет учитывать сложные взаимодействия между волосами. Тем не менее не учитывается возможная кластеризация, которую можно наблюдать в длинных и густых волосах в реальном мире, т.к. делается предположение о непрерывной структуре волос. Ещё одна проблема - эффективность. Для моделирования взаимодействия 10000 волос при распараллеливании вычислений требуется несколько минут на кадр.
Свободно соединённые частицы
Ещё один подход, использующий похожие предположения - метод свободных частиц ([13]). Каждая частица представляет определённое количество "волосяного материала" и имеет некоторую локальную ориентацию, которая определяется по ориентации соответствующего волоса. Первоначально, между соседними частицами устанавливаются соединяющие цепи. Это позволяет выравнять частицы вдоль волос и установить для них направление. Первоначальная конфигурация сохраняется во время движения, т.к. она отвечает за пространственную согласованность взаимодействия между частицами. Во время движения каждая частица может взаимодействовать с другимим частицами в своей непосредственной близости. Метод предлагает управляться с этими взаимодействиями, устанавливая разрываемые связи между близкими частицами. Как только частицы отходят друг от друга на достаточно большое расстояние, связи разрываются. Поиск ближайших частиц на каждом шаге можно эффективно сделать с использованием воксельной сетки.
Рис. 22 Метод свободно соединённых частиц
Интерполяция направляющих кривых
Суть метода ([7], [14]) заключается в использовании некоторого множества свободных направляющих кривых, которые рассматриваются в качестве некоторого подмножества всего множества волос. Остальные волосы просто интерполируются по позиции и ориентации этих волос. Использование сразу нескольких направлений при интерполяции позволяет избежать локальной кластеризации волос. Эти же "направляющие волосы" используются для расчёта взаимодействия волос. Но так как использование исключительно кривых для таких целей довольно неэффективно, то строится вспомогательная полоса трегуольников между соответствующими вершинами направляющих волос. А дальше нам остаётся только следить за пересечениями построенных полос. Когда столкновение случается, используются слабые силы упругости, чтобы оттолкнуть элементы друг от друга. Однако всё равно какие-то взаимодействия могут быть пропущены.
Рис. 23 Интерполяция направляющих кривых
Свободная деформация формы
Следующий подход ([15]) совсем отказывается от моделирования каждого отдельного волоса. Вместо этого предлагается определить некоторый сеточный объём вокруг головы, представляющий собой общую форму, которую должны принимать волосы. Сетка может деформироваться как система частиц, а отдельные волосы подчиняются общей форме путём интерполяции. Взаимодействие между волосами и телом осуществляются при аппроксимации тела набором меташаров.
Этот метод хорошо подходит для анимации различных сложных причёсок, когда движения головы имеют небольшую амплитуду. Однако разрывность волос учесть с помощью такой модели невозможно.
Волосы как отдельные группы
Существуют методы, альтернативные вышеобозначенным подходам. Один из них состоит в группировке ближних волос и работе уже с этими отдельными группами, которые считаются независимыми. Такое представление волос во многих случаях позволяет уменьшить время рассчёта и достичь работы в реальном времени. При этом оно учитывает реалистичные свойства волос, т.к. учитывает локальную разрывность, которую мы можем наблюдать при движении длинных волос.
Волосяные полосы
Можно значительно уменьшить сложность вычислений путём моделирования групп волос патчами параметрических поверхностей ([4], [16], [17], [18]). При этом используется простая модель расчёта динамики волос. Она используется для контрольных точек меша поверхности. Такой подход существенно увеличивает общую скорость вычислений, потому что используется относительно немного контрольных точек для моделирования больших участков волосяной поверхности. Для рассчёта взаимодействия между поверхностями, представляющими волосы, и этих поверхностей с другими объектами используется их эллиптическая аппроксимация. Когда контрольная точка такой полосы оказывается внутри эллипсоида, ответная реакция используется для перемещения её за пределы этой области. Столкновения между полосами устраняются путём использования метода пружин внутри самих полос и между соседнимим полосами. Пружины позволяют полосам держаться на приблизительно одинаковом расстоянии друг от друга, не сильно удаляясь или сближаясь. Кроме того, пружины используются, чтобы полоса не растягивалась и не сжималась. В итоге, общая модель волос остаётся согласованной почти всегда. Однако, как уже отмечалось, множество стилей, которые мы можем моделировать таким образом , весьма ограничено.
Рис. 24 Метод волосяных полос
Динамика пучков
Метод пучков - один из первых методов, который успешно применялся и использовал парадигму объединения волос в группы. Первоначально использовалось множество треугольных призм. Во время движения форма пучка аппроксимируется параболлической тракторией фиктивных частиц, изначально расположенных около корня каждого пучка. В каждый момент времени траектория частиц вычисляется через начальные скорости и ускорения (например, ускорение свободного падения). Изначально метод позволял моделировать кинематику только приблизительно, не учитывая инерцию всей системы. Также не учитывалось взаимодействие между пучками. Через некоторое время было представлено улучшение. Оно заключалось в моделировании движения отдельных волос (похоже на метод направляющих кривых) ([14]). Остальные волосы интерполировались со случайным смещением относительно направляющего. Однако взаимодействие всё ещё не учитывалось. Для того, чтобы исправить этот недостаток было предложено разделить пучок на три составляющих ([3], [19]):
каркасная кривая, которая определяет движение и деформацию;
деформируемая объёмная оболочка;
количество отдельных волос, распределённых внутри оболочки (используется только для рендеринга).
Рис. 25 Представление пучка
В этом методе была предложена анизотропная модель учёта взаимодействия волос. Пучки одинаковой ориентации могут проникать друг в друга и подчиняются модели вязкого трения. А пучки разной ориентации сталкиваются и взаимодействуют очень сложным образом.
Этот подход даёт отличные результаты для быстрых движений и учитывает разрывы, которые можно наблюдать в густых длинных волосах. Однако и при таком подходе иногда проявляются некоторые визуальные артефакты. Кроме того, сам метод очень тяжёл в вычислительном плане. В основном из-за сложной модели взаимодействия.
Рис. 26 Метод динамичных пучков
Иерархические методы
Относительно недавно исследователи стали искать пути адаптивного представления волос. Эти методы могут использоваться, чтобы избежать нереалистичного склеивания отдельных волос, что можно наблюдать при других подходах, или для ускорения вычислений без потери реалистичности.
Метод уровней детализации
Натуральную кластеризацию волос можно моделировать с использованием иерархической модели. Мы можем, например, использовать фиксированное количество уровней детализации. В исследованиях([20]) предлагается использовать три таких уровня: отдельные волосы, пучки и полосы (см. рис. 27), которые представляются отдельными кривыми, объёмными примитивами и патчами параметрических кривых соответственно.Создание иерархии волос из этих трёх составляющих и использование эффективного метода определения столкновений ( волосы помещались в ограничивающие объёмы в виде сфер и взаимодействие рассматривалось между ними) позволило значительно ускорить процесс моделирования.
В процессе моделирования иерархия волос обходится для выбора подходящего представления. Переходы между уровнями детализации происходят автоматически. Более высокая детализация используется для более важных частей. Важность зависит от того, насколько видны волосы, как далеко находятся от наблюдателя и от движения наблюдателя. Если объект сцены закрывает определённую часть волос или эта часть просто не попадает в видимый объём, то мы представляем её в виде полосы (самое грубое представление) и не рендерим. Если расстояние между наблюдателем и камерой уменьшается или волосы двигаются очень резко, то мы получаем больше деталей, а, значит, представляем волосы детальнее. Чуть позже был найден способ быстро определять области наибольшой активности волос ([21]). Это даёт возможность быстро определять необходимый уровень детализации.
Рис. 27 Метод уровней детализации
Адаптивная кластеризация
Данный метод предлагает использовать адаптивную кластеризацию ([22]). Адаптивное дерево пучков - структура, которая контролирует весь процесс и позволяет динамично сливать или разделять пучки волос. Дерево зависит от полной иерархии волос, которая может быть вычислена заранее или рассчитываться "на лету". В каждый момент времени дерево представляет те пучки, которые в данный момент моделируются (активные сегменты). Опираясь на предположение, что волосы всегда должны быть более детализированы у кончиков, чем у корней, дерево пучков динамически разделяет или сливает соответствующие сегменты, сохраняя при этом структуру дерева, где корень соответствует корням волос, а листья - кончикам.
В каждый момент времени различные сегменты пучков могут быть активны, в то время как во время рендеринга будет использоваться только лучшая детализация. Процесс расщепления улучшает структуру волос, когда сегмент не участвует в локальном движении или деформации. Процесс слияния упрощает дерево, когда движение опять становится сцепленным. Критерий расщепления и слияния связан с локальным движением волос в каждый момент времени.
Одна из ключевых вещей в данном подходе - неявное моделирование взаимодействия волос. Соседние пучки, слитые в один, имитируют статичное трение настоящих волос. Это позволяет избежать дополнительных трат на явное моделирование взаимодействия. Для расчёта взаимодействия активных сегментов используется их представление в виде цилиндров.
Существует похожий подход, где вместо пучков используются уровни детализации.
Рис. 28 Адаптивная кластеризация
Рендеринг
Реалистичный рендеринг человеческих волос требует учёта как глобальных, так и локальных свойств волос. Для рендерига полной причёски необходимо выбрать подходящую модель представления волос.
Представление волос для рендеринга
Выбор алгоритма рендеринга во многом зависит от используемой модели геометрического представления волос. Например, явные модели требуют рендеринга линий или треугольников. В то же время объёмные модели требуют объёмных рендереров или алгоритмов работы с неявной геометрией.
Явное представление
Используя явное представление, мы должны рисовать каждый отдельный волос. В природе волос имеет форму искривлённого цилиндра. Однако в различных работах он представляется в виде треугольной призмы, соединённых тругольников (наподобие ленты), всегда направленых к камере и т.п. Ясно, что при таком подходе существуют очевидные проблемы: очень тонкий волос и их огромное количество. При нормальных условиях наблюдения толщина одного волоса гораздо меньше размера пиксела. Это свойство в результате приводит к очень сильным проблемам алиасинга и некорректного сэмплирования. Рендереры, основанные на точках, определяют цвет пиксела по ограниченному числу выборок. Малое количество выборок приводит к резкой смене цветов. Увеличивание их количества помогает улучшить ситуацию, но ценой временных затрат. Также данную проблему можно решить, используя правильный режим прозрачности для цвета каждого волоса и грамотное накопление в буфере цвета([2], [23]).
Неявное представление
Существует множество методов рендеринга, использующих неявное представление волос.
Объёмные текстуры позволяют избежать проблем алиасинга ([24]). Наименьший примитив - объёмная клетка, которая может быть легко проинтерполирована техникой мипмаппинга для работы в различных масштабах. Цена расчёта прохождения луча невелика для коротких волос, но увеличивается с их ростом. При анимации волос такой объём нужно перевычислять на каждом кадре, что приводит к дополнительным затратам.
Метод рендеринга кластерной модели волос также основан на неявной геометрии. В начале каждый кластер аппроксимируется полигональной границей. Когда луч попадает на эту границу, используются предопределённые функции накопления плотности. Аппроксимация высокочастотных деталей объёмными функциями плотности позволяет получить изображения без алиасинга. Такой метод не даёт изменять функции плотности "на лету" и мы получаем эффект "слипшихся волос".
Рассеивание света
Первое требование для всех систем рендеринга волос - это моделирование рассеивания света отдельными волосами. Это играет такую же роль, как отражение для поверхностей при их рендеринге.
Оптические свойства
Волос состоит из трёх частей:
кора - является ядром волоса и определяет его физическую основу;
кутикула - слой защитных пластин, который полностью покрывает кору;
сердцевина - структура с неизученными свойствами, которая иногда появляется около оси волоса.
Волос состоит из некристаллических белков, которые ведут себя как прозрачная среда с коэффициентом преломления 1.55. Кора и сердцевина содержат пигменты, которые поглощают свет (часто в зависимости от длины волны). Эти пигменты и определяют цвет волос.
Нотация и радиометрия отражения для отдельного волоса
Основная нотация для используемой геометрии представлена на рисунке 29.
Назовём плоскость, перпендикулярную волосу, нормальной плоскостью.
Направление освещения - , направление в котором рассеянный свет будет вычисляться или измеряться - .
Оба вектора указывают от центра. Будем рассматривать и в сферических координатах.
Углы наклона относительно нормальной плоскости обозначим и . Будем их измерять так,
чтобы ноль соответствовал перпендикулярному направлению. Азимут вокруг волоса обозначим и . Тогда относительный азимут (), который важен для округлых волокон, обозначим .
Рис. 29 Нотация для геометрии рассеивания
Т.к. волокна обычно рассматриваются как одномерные сущности, отражение света необходимо описывать каким-то другим способом, нежели большинство знакомых способов расчёт отражения для поверхностей. Традиционно, рассеивание света поверхностью описывается с помощью функции двунаправленного распределения отражения (BRDF) . BRDF даёт плотность относительно проекции телесного угла распределения потока, который получается от узкого пучка , падающего с направления . Она определяется как отношение излучения поверхности (интенсивность на единицу спроецированной поверхности), которое исходит от поверхности в направлении к освещённости поверхности (поток на единицу площади), которая получается с направления .
По этому определению, распределённое излучение, зависящее от направленного распределения излучения равна
,
где H2 - полусфера направлений надо поверхностью.
Распределение света от волокон описывается также, но единицы измерения падающего и отражённого света другие, потому что свет отражается от одномерной кривой ([25]). Если мы заменим слово "поверхность" на слово "кривая", а слово "площадь" на "длина" в определении выше, то мы получим определение функции распределения для волокна: "она определяется как отношение излучения кривой (интенсивность на единицу спроецированной длины), которое исходит от кривой в направлении к освещённости кривой (поток на единицу длины), которая получается с направления ." Излучение кривой от освещения, получившегося в результате распределённого излучения вычисляется следующим образом:
,
где D - диаметр волоса, видимого с направления освещения.
Излучение кривой - концепция, находящаяся где-то между концепцией излучения и интенсивности. Оно описывает вклад тонкого волокна в окончательное изображение и не зависит от его ширины. Освещённость кривой определяет мощность освещения, которое было поглощено на единицу длины волокна и, следовательно, зависит от ширины волокна. Таком образом два волокна с одинаковыми свойствами, но с разной шириной, будут иметь одинаковые функции распределения. Но более широкое волокно даст более яркую кривую в итоговом изображении, потому что оно поглотит больше падающего света. Это определение согласуется с поведением реальных волос: очень хорошие волосы кажутся тусклее, когда рассматриваются по отдельности.
Большинство литературы по распределению освещения не обсуждает радиометрию. Но выше описанные определения формализуют общий подход. Исключение составляет диаметр волоса, который обычно опукается, т.к. это просто константа. Коэффициент также часто включается в модель.
Отражение и преломление в цилиндрах
Для расчёта зеркальной составляющей волос может быть представлен (в качестве первоначальной аппроксимации) в виде прозрачного (в случае малой пигментации) или отражающего (при сильной пигментации) диэлектрического цилиндра. Свойства рассеивания света в цилиндрах были очень хорошо изучены для нужд построения оптоволоконных кабелей.
Как впервые было показано в работе Kajiya и Kay, если мы рассмотрим пучок лучей, освещающих гладкий цилиндр, каждый луч отразится вдоль локальной нормали в точке, где он попал в поверхность. Все эти нормали к поверхности перпендикулярны оси волокна и лежат в нормальной плоскости. Т.к. направление каждого отражённого луча симметрично направлению падения относительно локальной нормали , все отражённые лучи образуют одинаковый угол с нормальной плоскостью. Это означает, что отражённый после падения параллельного пучка свет лежит в конусе под таким же углом, что и падающий пучок.
Для не сильно пигментированных волос компонент света, который преломляется и попадает во внутренность волоса также очень важен. Из закона Браве (логического следствия закона Снелла) следует, что свет, прошедший через гладкий цилиндр, будет излучаться тем же конусом, что и отражённый, вне зависимости от количества преломлений и внутренних отражений.
Измерения рассеивания
В косметической литературе были опубликованы различные исследования по рассеиванию света волосами. Были проведены измерения для падающих (в том числе, просто параллельных лучей, для нормальной плоскости. Использовались различные физические свойства света (например, поляризация) для более точных вычислений и измерения получающихся результатов. Все опыты показали, что существует три зеркальных пика. Два из них располагаются по одному на каждой стороне направления отражения. И ещё один резкий зеркальный пик появляется при острых углах направления обзора. Самые точные исследования были проведены Marschner`ом и его командой ([25]). Они исследовали изменение пиков при повороте волоса вокруг своей оси и рассматривали волос как эллиптический цилиндр. Такое представление позволило предсказать изменение пиков при изменении внешних условий освещения, направления взгляда и других факторов.
Модели рассеивания
Самая ранняя и наиболее широко распространённая (в основном из-за своей простоты)- модель Kajiya и Kay (анизотропная модель освещения). Она была разработана для рендеринга меха и включает в себя вычисление как диффузной, так и зеркальной составляющей. В общем виде формула выглядит так:
Диффузная компонента получается интегрированием отражённого излучения по всей ширине непрозрачного диффузного цилиндра. Зеркальная составляющая вычисляется так, как обсуждалось в предыдущем разделе: идеальное отражение поверхности ограничено конусом. А значит отражение от не идеального волокна должно быть сконцентрировано в области этого конуса. Заметим, что в данном формуле ни значение пика, ни ширина конуса отражения не зависят от углов и .
В дальнейшем были предложены модификации данного метода. Стоит отметить работу Голдмена ([26]), который среди прочих улучшений ввёл зависимость от азимутального угла. Он умножил оба члена в формуле, представленной выше, на множитель , который в текущей нотации можно представить так:
При установке коэффициента a > 0 мы получаем отклонение модели в сторону обратного рассеивания, а при а < 0 получаем прямое.
Через некоторое время была предложена другая модель для учёта азимутальной зависимости, которая учитывает отражение от поверхности и пропускание использованием двух долей косинуса ([27]). Доля, отвечающая за отражение от поверхности, определяется из предположения постоянного зеркального отражения (что игнорирует множитель Фринеля). Доля, отвечающая за пропускание вычисляется эмпирически, чтобы дать прямо направленный фокус. В методе определяется функция:
И члены в формуле Kajiya и Kay умножаются на
,
где a используется, чтобы сбалансировать переднее и заднее рассеивание, а k- параметр, отвечающимй за контроль того, насколько сфокусировано переднее рассеивание. Первый член для заднего (поверхностного) рассеивания, второй - для переднего (пропускаемого).
Marschner ([25]) предложил наиболее физически полную на сегодняшний день модель рассеивания освещения. Она вносит два основных улучшения в модель Kajiya и Kay: предсказывает азимутальное изменение в рассеянном свете, опираясь на оптику цилиндра и учитывает продольное разделение световых пиков, появляющихся от поверхностного отражения, пропускания и внутреннего отражения, которые появляются на разных углах. Вычиление азимутальной компоненты модели основано на анализе луча, который отвечает за фокусировку и дисперсию света, внутреннее поглощение и Френелевское отражение при каждом взаимодействии.
Рис. 30 Сравнение моделей рассеивания. Слева направо: модель Kajiya и Kay, модель Marschner`а, настоящие волосы
Рассеивание в мокрых волосах
Рассеивание света волосами изменяется, когда волосы становятся мокрыми. Исследования показали, что когда объекты намокают, они становятся темнее и более блестящими ([28]). С волосами дела обстоят также. Предыдущие модели рассеивания света можно модифицировать для моделирования мокрого меха и волос ([8]).
Когда волосы становятся мокрыми, вокруг волокна формируется тонкая плёнка воды, образуя гладкую, зеркалоподобную поверхность волоса. В отличие от природно грубой, черепичной структуры сухого волоса, эта гладкая поверхность даёт больший блеск из-за возросшей зеркальной составляющей. Кроме того, световые лучи подвергаются полному внутреннему отражению внутри водной плёнки, что приводит к более тёмному цвету по сравнению с сухими волосами. Также волос поглощает воду, что увеличивает его непрозрачность и ведёт к более сильному затенению.
Мокрые волосы можно моделировать, увеличивая спекулярную составляющую([8]). Увеличением уровня непрозрачности достигается тёмная и блестящая поверхность, похожая на поверхность мокрых волос.
Самозатенение волос и множественное рассеивание
Рис. 31 Волосы с самозатенением (слева) и без (справа)
Отдельные волосы отбрасывают тени друг на друга и на другие объекты. Кроме того другие объекты также могут отбрасывать тени на них. Самозатенение создаёт ключевые визуальные рисунки, которые отличают одну причёску от другой. В отличие от твёрдых объектов, плотный объём волос приводит к сложному распространению света. Каждое волокно пропускает и рассеивает свет, а не блокирует пришедшие лучи. Всё это делает вычисление теней для волос трудной задачей.
Можно попробовать трассировать лучи через волосы, представленные явной ([25]) или неявной моделью. Для сложной геометрии цена трассировки может высока и многие исследователи пытаются использовать кэширование для повышения эффективности. Используется две основные техники для вычисления самозатенения волос: трассирование луча через объём и теневые карты.
Трассирование лучей
При неявном представлении геометрии волос можно трассировать весь объём сразу либо использовать два прохода: первый заполняет весь объём теневой информацией, а на втором проходе мы непосредственно рендерим этот объём.
Теневые карты
При рендеринге сложных "волосяных объёмов" глубина соответствующих фрагментов можно сильно отличаться при небольших изменениях координат в пространстве изображения. Дискретная природа сэмплирования глубины ограничивает теневые буферы при применении к рендерингу волос. Кроме того, свет постепенно убывает при прохождении через волосы из-за переднего рассеивания. Бинарность принятия решения в случае классического алгоритма теневых карт не даёт возможности учесть это свойство. Таким образом, классический алгоритм нам не подходит.
Функция пропускания света к точке P может быть выражена следующей формулой:
,
где l - длина пути от источника света до точки P, - функция затухания (плотности) вдоль этого пути, - размер затенения (накопленная функция затухания).
Рис. 32 Пучок лучей, проходящий через волосы, и соответствующая функция затухания
В технике "глубоких теневых карт" ("теневых карт непрозрачности") ([29]) каждый пиксель хранит кусочно линейную аппроксимацию функции пропускания вместо единственной глубины, что позволяет осуществлять более точное вычисление теней, чем классический алгоритм. Функция пропускания отвечает за два важных свойства волос.
Дробная видимость: В контексте рендеринга волос, функция пропускания может рассматриваться как функция дробной видимости с позиции источника света. Чем больше волос видно вдоль пути луча света, тем сильнее ослабляется его интенсивность, что означает меньшую освещённость. Как было замечено ранее, видимость может значительно отличаться в пиксельном пространстве. Чтобы справиться с этой проблемой, необходимо аккуратно вычислять функцию пропускания, путём корректного интегрирования и фильтрации всех влияющих на неё составляющих, которые зависят от используемого геометрического представления.
Прозрачность: Волокно волоса поглощает, рассеивает и пропускает приходящий свет. Предполагая, что волос пропускает свет только в направлении вперёд, прозрачность также учитывается функцией пропускания.
Можно заметить, что функция пропускания обычно сильно изменяется в пространстве изображения, но постепенно вдоль направления луча. Таким образом можно аккуратно аппроксимировать функцию пропускания более сжатым представлением. "Глубокие теневые карты"(Deep Shadow Maps) используют сжатую кусочно-линейную функцию для каждого пикселя, специально обрабатывая случаи разрывов в пропускании.
Рис. 33 Глубокие теневые карты
Дальше в алгоритме ([29]) также предполагается, что такая функция пропускания изменяется плавно, а значит её можно аппроксимировать фиксированным набором значений, которые вычисляются на слоях, перпендикулярных направлению освещения (см рис 33). Аппроксимация функции пропускания дискретными плоскими картами позволяет использовать для реализации данного алгоритма современное графическое аппаратное обеспечение. Линейная интерполяция таких карт облегчает быстрое построение теней.
Однако дальнейшие исследования показали, что для светлых волос одних затенения и ослабления освещения недостаточно, чтобы получить правильный результат. Для полной реалистичности должен учитываться свет, который отражается от одного волоса на другой (множественное рассеивание). Для этого могут использоваться методы фотонных карт ([30]). Однако эффективное вычисление множественного рассеивания до сих пор остаётся нерешённой проблемой.
Техники ускорения рендеринга
Аккуратный рендеринг сложных причёсок может занимать несколько минут на один кадр. Многие приложения, такие как игры или приложения виртуальной реальности (виртуальные презентации) требуют рендеринга в реальном времени. Эти требования инициировали появление ряда работ по ускорению точных алгоритмов рендеринга. Ускорение в основном достигается путём упрощения геометрического представления, изобретением быстрых методов объёмного рендеринга или за счёт использования современного графического оборудования.
Аппроксимация геометрии
Как было показано, структура волос в целом и отдельного волоса в частности весьма сложна. Упрощение геометрии, за счёт уменьшения количества используемых вершин и волосяных пучков - одна из стратегий ускорения рендеринга. Однако, если удалять большие порции волос, это может привести к нереалистичному результату. Поэтому для аппроксимации пучков используются поверхности ([16], [31]).
Эти двумерные представления моделируют волосы путём использования текстуры волос, а также специальных альфа текстур для создания иллюзии отдельных волос. Кудри могут быть смоделированы проецированием патча на цилиндрическую поверхность ([31]).
Использование уровней детализации ([20]) также ускоряет динамическое моделирование волос. Использование грубой детализации для тех областей волос, которые не могут быть хорошо видны наблюдателю, уменьшает количество используемых вершин при малой потере визального качества. Как результат уменьшается и время, необходимое для вычисления рассеивания света и затенения.
Интерактивный объёмный рендеринг
Выше рассматривался метод ([13]), в котором волосы моделировались множеством соединённых частиц, где частицы представляли плотность "волосяного объёма" (фактически их густоту). На такую идею иследователей натолкнули техники быстрого рендеринга облаков точек, где каждая частица рендерится текстурированным сплатом для целей вычисления теней и финального рендеринга. Этот метод работает интерактивно, но получаемые тени не очень аккуратны.
Ещё один подход заключается в использовании воксельной сетки, ориентированной на источник света ([32]). В ней хранятся значения плотности волос, что позволяет эффективно вычислять накапливаемое пропускание внутри "волосяного объёма". Значения пропускания затем фильтруются и объединяются с диффузной и зеркальной составляющими для вычисления окончательного света для каждого сегмента волос. Несмотря на свою простоту, этот метод даёт хорошие результаты и интерактивную анимацию волос. Кроме того, метод хорошо распараллеливается, что можно использовать для увеличения производительности.
Рис. 34 Метод воксельной сетки
Использование графического оборудования
Современное графическое оборудование развивается стремительно. Процессор обработки графики (видеокарта, GPU) позволяют программировать на нём самом всё более сложные операции с использованием специально созданных для этого языков (таких как Cg или GLSL). Различные шейдеры могут напрямую выполняться на графическом аппаратном обеспечении, что значительно ускоряет производительность.
Мощности GPU могут использоваться для ускорения метода "глубоких теневых карт" ([31]). Можно все теневые карты хранить в трёхмерной текстуре, а все теневые вычисления выполнять на GPU. Для демонстрации новых возможностей своей видеокарты Nvidia представила алгоритм для рендеринга длинных волос в воде, работающий в реальном времени ([33]).
Рис. 35 Волосы, представленные в алгоритме NVidia
Заключение
В данной статье была произведена попытка охватить физические аспекты процесса создания виртуальных волос. Были показаны трудности, которые возникают при этом и существующие методы их решения. Несмотря на то, что задачей моделирования волос занимаются уже довольно давно (первая модель освещения была представлена в 1989 году), работы по улучшению всё ещё очень много. Мы хотим достичь всё больших результатов во всех аспектах моделирования волос. Более точное моделирование сложных причёсок и стрижек при минимальном вмешательстве пользователя позволило бы активно пользоваться этими алгоритмами для задач косметической промышленности. Так же, как и построение максимально точной физической и химической модели волос, что позволило бы проводить виртуальное тестирование новых продуктов и предсказывать их влияние на человеческий организм. Более точная физическая модель позволила бы сильно повысить релистичность, особенно в приложениях, где волосы изменяются динамически под внутренним (сами с собой) и внешним (ветер, дождь, человеческая рука) воздействиями. Несомненно, что построение точной модели освещения, включая множественное рассеивание, очень сильно повысит реалистичность получаемого результата. Надо сказать, что на сегодняшний день не существует полной и "одобренной", полностью физически корректной модели волос: отдельного волоса и всего их множества в целом, со всеми взаимодействиями. Исследователи активно занимаются этой проблемой. Тем более, что сейчас (в силу всё большего увеличения компьютерных мощностей) наблюдается тенденция к построению всё более точных физических моделей. В заключение отметим, что задача моделирования волос входит в качестве подзадачи в общую задачу рендеринга многосоставных объектов. К таким объектам относятся, например, мех, различные щетины (например, для щётки), трава, ткань, струи воды и т.п. Очевидно, что исследования для решения одной из этих подзадач приводят к продвижению области рендеринга многосоставных объектов в целом.
Ссылки.
Kelly Ward, Florence Bertails, Tae-Yong Kim, Stephen R. Marschner, Marie-Paule Cani, Ming C. Lin "A Survey on Hair Modeling: Styling, Simulation, and Rendering"
Tae-Yong Kim, Ulrich Neumann, "Interactive Multiresolution Hair Modelling and Editing"
E. Plante, M.-P. Cani, and P. Poulin, "A layered wisp model for simulating interactions inside long hair"
T.-Y. Kim and U. Neumann, "A thin shell volume for modeling human hair"
K. Anjyo, Y. Usami, and T. Kurihara, "A simple method for extracting the natural beauty of hair"
F. Bertails, B. Audoly, B. Querleux, F. Leroy, J.-L. Lévêque, and M.-P.Cani, "Predicting natural hair shapes by solving the statics of flexible rods"
J. T. Chang, J. Jin, and Y. Yu, "A practical model for hair mutual interactions"
K. Ward, N. Galoppo, and M. C. Lin, "Modeling hair influenced by water and styling products"
D. Pai, "Strands: Interactive simulation of thin solids using cosserat models"
D. Baraff and A. Witkin, "Large steps in cloth simulation"
S. Hadap and N. Magnenat-Thalmann, "Modeling dynamic hair as a continuum"
F. Bertails, B. Audoly, M.-P. Cani, B. Querleux, F. Leroy, and J.-L. Lévêque, "Super-helices for predicting the dynamics of natural hair"
Y. Bando, B.-Y. Chen, and T. Nishita, "Animating hair with loosely connected particles"
T. Kurihara, K. Anjyo, and D. Thalmann, "Hair animation with collision detection"
P. Volino and N. Magnenat-Thalmann, "Animating complex hairstyles in real-time"
C. Koh and Z. Huang, "A simple physics model to animate human hair modeled in 2D strips in real time"
E. Sugisaki, Y. Yu, K. Anjyo, and S. Morishima, "Simulation-based cartoon hair animation"
H. D. Taskiran and U. Gudukbay, "Physically-based simulation of hair strips in real-time"
E. Plante, M.-P. Cani, and P. Poulin, "Capturing the complexity of hair motion"
K. Ward, M. C. Lin, J. Lee, S. Fisher, and D. Macri, "Modeling hair using level-of-detail representations"
K. Ward, N. Galoppo, and M. Lin, "Interactive virtual hair salon"
F. Bertails, T.-Y. Kim, M.-P. Cani, and U. Neumann, "Adaptive wisp tree - a multiresolution control structure for simulating dynamic clustering in hair motion"
A. M. LeBlanc, R. Turner, and D. Thalmann, "Rendering hair using pixel blending and shadow buffers"
F. Neyret, "Modeling animating and rendering complex scenes using volumetric textures"
S. Marschner, H. W. Jensen, M. Cammarano, S. Worley, and P. Hanrahan, "Light scattering
from human hair fibers"
D. Goldman, "Fake fur rendering"
T.-Y. Kim and U. Neumann, "Modeling, rendering, and animating human hair"
H. W. Jensen, J. Legakis, and J. Dorsey, "Rendering of wet material"
T.-Y. Kim and U. Neumann, "Opacity shadow maps"
J. T. Moon and S. R. Marschner, "Simulating multiple scattering in hair using a photon mapping approach"
M. Koster, J. Haber, and H.-P. Seidel, "Real-time rendering of human hair using programmable graphics hardware"
F. Bertails, C. Ménier,, and M.-P. Cani, "A practical self-shadowing algorithm for interactive hair animation"
C. Zeller, R. Fernando, M. Wloka, and M. Harris, "Programming graphics hardware"
Технический аспект статьи не совсем понял, перечитаю - может и пойму что к чему) А ваше мнение, какой продукт для создания волос на современном рынке 3D наиболее перспективный?
На 3Д рынке - Maya Hair + Shave&HairCut, или Houdini ) Еще вроде Softimage неплохо это делает. Если нужен не реалтайм, а графика для кино, больше проблем будет с визуализацией)
Комментарии
Технический аспект статьи не
Технический аспект статьи не совсем понял, перечитаю - может и пойму что к чему) А ваше мнение, какой продукт для создания волос на современном рынке 3D наиболее перспективный?
Статья скорее про технологии,
Статья скорее про технологии, тут продукты и не рассматриваются, это отдельная история..
На 3Д рынке - Maya Hair +
На 3Д рынке - Maya Hair + Shave&HairCut, или Houdini ) Еще вроде Softimage неплохо это делает. Если нужен не реалтайм, а графика для кино, больше проблем будет с визуализацией)
Отправить комментарий