42. Учет фактуры при создании реалистических изображений. - p1xelse/CG GitHub Wiki

Под фактурой, или текстурой, в компьютерной графике понимается детализация строения поверхности. Как правило, рассматривают два вида детализации. В первом случае на гладкую поверхность объекта наносят заданный рисунок (узор). В этом случае поверхность остается гладкой. Во втором случае ставится задача создания неровностей на поверхности, т.е. создания шероховатой поверхности.

Проективные текстуры

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

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

Процедурные текстуры

Для справки:Процедурные(сплошные) текстуры - это тектсуры, описываемые математическими формулами. Такие текстуры не занимают в видеопамяти места, а создаются, например, пиксельным шейдером. Преимуществом процедурных текстур является неограниченный уровень детализации каждой тектсуры (пикселизации не будет, так как текстура всегда генерируется под необходимый для её отоюражения размер). Недостатком процедурных текстура можно назвать тот случай, когда подобранная функция является сложной, так как зависит от большого числа переменных.

Необходимо найти функцию C(X,Y,Z), определяющую для каждой точки поверхности цвет таким образом, чтобы он соответствовал цвету моделируемого материала (наносимого рисунка). Такой подход не требует больших затрат памяти и хорошо работает с поверхностями любой сложности. Но поскольку используемая функция зависит от большого количества параметров, то возникаютсложности в подборе этой функции, с другой стороны, изменение этих параметров позволяет легко изменять свойства текстуры.

Неровности

Для того, чтобы поверхность казалась шероховатой, можно оцифровать фотографию нерегулярной фактуры и отобразить ее на поверхность. Однако при этом неровности будут восприниматься как нарисованные на гладкой поверхности, т.е. изображение будет не полностью реалистическим. Это связано с тем, что в векторе нормали к реальной шероховатой поверхности, а следовательно, в направлении вектора отражения,есть небольшая случайная составляющая. Этот факт и лег в основу способа моделирования неровностей на отображаемой поверхности. Пусть Q(X,Y) – уравнение поверхности, т.е. функция Q позволяет для каждой точки поверхности определить ее третью координату Z. В произвольной точке поверхности частные производные по направлениям X,Y лежат в плоскости, касательной к поверхности в этой точке. Нормаль в точке поверхности может определяться векторным произведением этих производных Q’x, Q’y: N=[Q’x, Q’y].

Для создания шероховатой поверхности можно создать новую поверхность путем внесения возмущения в направлении нормали в точках поверхности. Пусть P(X,Y) – функция возмущения,тогда радиус-вектор точки на новой поверхности будет определяться из Qн(X,Y) = Q(X,Y) + P(X,Y)N/│N│ Нормаль к новой возмущенной поверхности будет иметь вид: Nн=[Q’нx, Q’нy].

Частные производные Q’нx , Q’нy вычисляются из следующих выражений:

Q’нx = Q’x + P’x(X,Y) N/│N│ + P(X,Y) (N/│N│)'x

Q’нy = Q’y + P’y(X,Y) N/│N│ + P(X,Y) (N/│N│)'y

Последними слагаемыми можно пренебречь, так как функция возмущения P(X,Y) - очень маленькая величина. Теперь можно записать выражение для вычисления нормали к возмущенной поверхности:

Nн=[Q’нx, Q’нy] + P’y(X,Y)([Q’x, N/│N│]) + P’x(X,Y)([N/│N│, Q’y] ) + P’x(X,Y) P’y(X,Y)( [N, N/│N│^2]) Учитывая, что первое слагаемое представляет собой нормаль к исходной поверхности, а последнее слагаемое равно нулю как векторное произведение коллинеарных векторов, окончательно получим:

Nн= N + P’y(X,Y)([Q’x, N/│N]│) + P’x(X,Y)([N/│N│, Q’y] )

Для моделирования искажений вводится шумовая функция R(X,Y,Z), которая должна удовлетворять следующим требованиям:

  1. она должна быть непрерывной;

  2. принимать значения из интервала [0,1];

  3. вести себя аналогично равномерно распределенной случайной величине.

Одним из способов задания такой функции является задание случайных значений в узлах некоторой регулярной сетки (в точках i,j,k, принадлежащих множеству целых чисел) и последующей интерполяции на все остальные точки. Для отыскания значения функции в произвольной точке сначала надо определить параллелепипед, содержащий данную точку внутри себя, затем, используя значения функции в вершинах параллелепипеда и проводя интерполяцию, найти значений функции в исходной точке. Для использования целочисленной решетки может быть предложено следующее задание функции:

Screenshot from 2020-06-07 12-00-42

W(t) – одномерная весовая функция, в простейшем случае w(t)=t, t\in[0,1].

Использование приведенной трилинейной интерполяции дает не очень хорошие результаты, так как на границе параллелепипеда происходит разрыв первых производных, т.е. функция не является гладкой. Для достижения гладкости на функцию следует наложить условие W’(0)=W’(1)=0. Простейшим вариантом функции, удовлетворяющей этому условию, является многочлен Эрмита: W(t)=3t^2 – 2t^3, t\in[0,1].

Если функция возмущения не описывается аналитически, ее можно задать двумерной таблицей цветов. Промежуточные значения вычисляются билинейной интерполяцией табличных величин, а производные вычисляются методом конечных разностей.