Научная статья на тему 'Процедурный шум и мультивариантный тайлинг'

Процедурный шум и мультивариантный тайлинг Текст научной статьи по специальности «Математика»

CC BY
265
27
i Надоели баннеры? Вы всегда можете отключить рекламу.
Ключевые слова
ТЕКСТУРА / КЛЕТОЧНЫЙ ШУМ / ТАЙЛИНГ

Аннотация научной статьи по математике, автор научной работы — Никулин Евгений Александрович

Тема работы: Создание процедурных бесшовных текстур с неповторяющимися плитками. Цель работы: Развитие методов процедурного бесшовного текстурирования. Метод решения: Особый выбор узловых элементов текстурной решетки. Оригинальность: Обеспечен непериодичный тайлинг больших мультитекстур. Выводы: Метод предназначен для бесшовного покрытия больших площадей с малыми затратами ресурсов.

i Надоели баннеры? Вы всегда можете отключить рекламу.
iНе можете найти то, что вам нужно? Попробуйте сервис подбора литературы.
i Надоели баннеры? Вы всегда можете отключить рекламу.

Текст научной работы на тему «Процедурный шум и мультивариантный тайлинг»

УДК 681.3.513

Е. А. Никулин

ПРОЦЕДУРНЫЙ ШУМ И МУЛЬТИВАРИАНТНЫЙ ТАЙЛИНГ

Нижегородский государственный технический университет им. Р. Е. Алексеева

Тема работы: Создание процедурных бесшовных текстур с неповторяющимися плитками. Цель работы: Развитие методов процедурного бесшовного текстурирования. Метод решения: Особый выбор узловых элементов текстурной решетки. Оригинальность: Обеспечен непериодичный тайлинг больших мультитекстур.

Выводы: Метод предназначен для бесшовного покрытия больших площадей с малыми затратами ресурсов. Ключевые слова: текстура, клеточный шум, тайлинг.

Статья посвящена совершенствованию тайминга - создания процедурных текстур-тайлов (от tile - плитка), способных бесшовно соединяться друг с другом в желаемых направлениях. После краткого изложения и иллюстрации алгоритма синтеза так называемого клеточного шума (ограничимся его 2Б-вариантом) будет предложен способ вариации его исходных данных, обеспечивающий гладкость сшивки текстур по границам и неповторяемость их внутреннего рисунка.

Работа генератора клеточного шума происходит на решетке, разбивающей текстурную карту с габаритами {N,M} на клетки, уложенные в n рядов и m колонок длиной и высотой

d =M¡m, h = N/n (1)

текселов (рис. 1, а). В узлах решетки задаются / вычисляются узловые элементы e00 ^em -числа или векторы, используемые для расчета значений шумовой функции во всех текселах. В простейшем численном шуме они генерируются как случайные числа ^ = rnd(l)e[0,l]. В

самом распространенном виде клеточного шума - градиентном шуме Перлина [1] - в узлах решетки генерируются нормированные векторы градиентов Gj =[sin(9j) cos^j)] со случайными углами tyj¡= rnd(2л:)е[0, 2л], после чего вычисление значения шумовой функции в каждом (v,u)-м текселе карты производится в следующем порядке:

• определяются целочисленные координаты клетки, содержащей тексел:

i=Lv/hJ-{v=N}, j=|_u/dj-{u = M}; (2)

• находятся нормализованные клеточные параметры тексела (рис. 1, б):

t=v¡h-ie[0, l], т=u/d-j'e[0, l]; (3)

0 d ... jd u ... M

t> , Q -►

'0m

ih v

N

'00

'10

'01

'11

"i+1j'

e a e .

n0 n1

'ÍJ+1

i+1j+1

'1m

G..... _

e У ^ G

y-

-i+1j G

' v+i ev+1

j+1,i

i+1j+1

а) б)

Рис. 1. Решетка и клетка для шума Перлина

h

e

e

nm

© Никулин Е. А., 2016.

из углов клетки в точку рп =[т г] проводятся векторы

Усс =[т г], Ус! =[т-1 г], Уш =[т г-1], Уп =[т-1 г-1]; скалярные произведения градиентных и угловых векторов

ej - Gj • V00^

ei,j+1 - Gi,j+1 ■ V01 ' ei+\j - Gi+1,j ■ V10 > ei+\j+\ -Gi+1,j+1 • V11;

(4)

(5)

• эти числа используются для вычисления значения шума методом бипараметрической интерполяции:

Fvu = lin(lin(ep,eMj,L(t)),lin{ei j+l,ei+l j+l,L(t)\L(x)) Vv=0,N, u=0,M . (6)

В (6) использована функция lin (A,B,t)= A-(l-1)+B •t линейной интерполяции от объекта A до объекта B по нормализованному параметру te[0, l]. Таким параметром могут быть значения функции L(t) е[0, l], которая должна обладать обязательными свойствами L(o)=0 и L(l )=1, обеспечивающими непрерывность соединения смежных клеток шумовой функции, и желательными свойствами L'(l)=L'(0)=0 и L"(l)=—L"(0) первого и второго порядков гладкости сшивки. На рис. 2 построены графики и приведены примеры цветовой интерполяции для трех полиномиальных функций интерполяции:

• простейшей линейной функции Ll (t )=t, при которой и при Li(t)=t (6) превращается в билинейную интерполяцию;

• нелинейных функций L (t )= 3t2 — 2t3 и L5 (t )=l0t3 —l5t4 + 6t5 , создающих двойную гладкость стыковки и больший контраст изображения;

• возможно использование косинусной (не полиномиальной) функции интерполяции Lco (t )=0.5(l—cos(rct)), отличающейся от L3 (t ) максимум на 0.01, но вычислительно более трудоемкой. Поэтому эту функцию следует признать неэффективной.

L (t)1 0.8

L (t)3

L (t)4 0.6

L (t)5 0.4

L(t)co

0.2

0

J - lya

co L

J J\/

0 0.2 0.4 0.6 t

0.8

L

L

-1 L3

Рис. 2. Функции интерполяции

U

Благодаря интерполяции создается коррелированность клеточного шума, приводящая к образованию на текстуре причудливых фигур. Важно, что благодаря перебору в (6) текселов всей карты, а не в отдельных клетках по номерам (2), текстура будет закрашена без наложений и пропусков, а длина и высота клетки в (1) не обязаны быть степенями двойки и даже целочисленными! Это особенно ценно при выборе размеров решетки, которые могут быть произвольными целыми числами п <N и т <М.

Перед выводом на экран карты, заполненной значениями шумовой функции

Уу=0,N, и=0,М, она подвергается преобразованиям, имеющим следующие цели:

• приведение карты к виду, удобному для её дальнейших преобразований;

• преднамеренное искажение карты для достижения желаемых визуальных эффектов;

• конвертация значений карты в используемую цветовую палитру дисплея.

Хорошо, когда экстремальные значения карты равны 0 и 1 (такие нормализованные карты будем обозначать как Н ). Это желание реализуется потексельной операцией нормали-

зации H=norm(F) произвольной карты F со значениями матричной функции

norm(F)га = F7-Г{FL- Vv=ON, u=°M . (7)

max(F )-min(F )

При этом обеспечивается максимальное растяжение значений карты в единичном интервале l] с min (Н)=0 и max(H)=1.

Нормализация минимизирует вычислительные затраты, а то и обеспечивает саму возможность выполнения других операций с картами:

• kMH — масштабирование карты Н, позволяющее при kM <1 уменьшить яркость её изображения, а также преобразовать все ее значения в оттенки серого цвета с цветовыми матрицами R=G=B=255Н палитры «True Color». Для получения разноцветной текстуры нужно сгенерировать три карты Hr, Hg, Hb и выводить на экран смесь цветовых матриц R=255Hr, G=255Hg и B=255Hb;

• F+kc — смещение карты F, позволяющее совместно с масштабированием повысить яркость изображения нормализованной карты в ka раз:

. . H + k —1 _ _

bright(Hk)vu= hVU—я—- Vv=0,N, и=°,M; (8)

k„

я

в различных графических программах имеется великое множество нелинейных фильтров, потексельно, аналогично фильтрам (7), (8), обрабатывающих изображения по определенным алгоритмам. Из-за очевидного факта, что «нельзя объять необъятное», ограничимся лишь несколькими фильтрами: 0 гамма-коррекция

<^ашша{Н,р\и = Щи Vv=0^, и=0М ; (9)

изменяет в нормализованной карте соотношение между темными и светлыми участками согласно графику степенной функции на интервале [0,1]. При степени р <1 яркость темных участков растет сильнее, чем светлых, а при р >1 яркость светлых участков снижается больше, чем темных; 0 фильтр «Штамп» с уровнем /1 заменяет в карте Е все значения Ей >/ на 1 , а все остальные — на 0, делая карту нормализованной:

8Ьашр{^,/1 \и = Ки >У1} Vv=0,N, и=0,М ; (10)

0 абсолютный фильтр заменяет в карте Е все имеющиеся отрицательные значения на положительные:

abs(F)vu =|Еи| Vv=0~N, и=0М ; (11)

0 периодический модульный фильтр заменяет все значения карты, лежащие вне диапазона [0,1), на значения

шоёи1(Е)га = тоё(тоё(Ега,1)+1,1)е[0,1) Vv=0,N, и=0,М ; (12)

цветовое смешивание нормализованной карты Н, создающее RGB-вектор цвета ) -

го тексела как линейную интерполяцию от цвета с0 до цвета С1 по нормализованному параметру ^ е[0, 1]:

iНе можете найти то, что вам нужно? Попробуйте сервис подбора литературы.

mix2(c°,c-,H)Уи = lin(c°,c-,HVu) Vv=0,N, и=°,M . (13)

Применение в (13) нелинейных функций интерполяции L3 (Hvu) и L5 (Hvu) приве-

дет к обострению контраста цветового перехода (см. рис. 2). Более красочные эффекты дает трехцветное смешивание

mix3(c0, с1, с2, Я)га=(1 - t)c0 + 2t(1 - t)c1 +12c2 Vv=0N, u=0M, t=Hyu, (14)

устроенное аналогично квадратичной линии Безье. Благодаря свойству любой линии Безье лежать в выпуклой оболочке ее узловых точек, трехцветная смесь всегда будет находиться в цветовом RGB -пространстве между точками c0, c и c2. Отметим, что квадратичная интерполяция таким свойством не обладает. На основе полиномиальной модели Безье можно смешивать любое количество цветов;

• фрактализация (от fraction — дробить) — создание карты F<vnxpm> с теми же размерами N M}, но на более частой решетке с кратным числом рядов vn и/или колонок рш (вот здесь-то и возможны решетки с нецелочисленными длиной и высотой клетки!). Подражая музыкальной октаве, в которой отношение частот верхнего и нижнего звуков

k ,

равно двум, процедурную карту с частотами v=p=2 также называют k -й октавой. Ничто не мешает использовать гармоники с разными и не равными степеням 2 частотами v и р, что позволяет создать анизотропные текстуры с разными свойствами по горизонтали и вертикали;

• смешивание текстур с разными частотами позволяет добавить к пространственно протяженным деталями изображения текстуры H<n,m> более мелкие детали гармоник H<vnxpm>. в формуле фрактального смешивания

С=k0H <nxm> + k1H <vinxpim> + k2H <v2nxp2m>+... (15)

сумма коэффициентов k0, k1, k2 ... должна быть равна 1 с целью удержания значений карты С в диапазоне [0,1]. Если задавать веса в порядке убывания k0 >k1 >k2 >..., то низкочастотные гармоники (крупные детали текстуры) будут иметь относительно большую яркость, чем высокочастотные (мелкие детали).

Очень простой способ сделать генерируемую текстуру тайловой — это уравнять граничные узловые элементы:

• верхнего ряда решетки с нижним для тайлинга плиток по вертикали:

(16)

еп0 - е00, еп1 - е01,

• левой колонки с правой для бесшовного соединения по горизонтали:

e„i = en

e = e * nm 0m'

e0m = e00 ,

e1m = e10 >

"n0

(17)

• для бесшовного размножения во все стороны актуальны оба условия (16), (17).

На рис. 3 показана работа генератора численного шума и результаты операций (7)—(12) и (13)—(15) при исходных данных N-120, М-150, п-4, т-5 и размерах клеток ё-Н-30 текселов:

а) на случайных узловых элементах тайловой решетки

E=

0.737 0.797 0.148 0.318 0.01 0.737

0.259 0.562 0.736 0.647 0.366 0.696 0.184 0.695 0.595 0.096 0.044 0.793 0.627 0.525 0.103 0.259 0.562 0.736

0.737 ¡0.797 0.148 0.318 0.01 0.737

сгенерирована карта F<nxm> с экстремальными значениями min (F)« 0.01 и max (f) « 0.797. Изображение получено по (13) цветовым смешиванием mix2(cTK,ccr ,F) от темно-красного цвета стк=[128 0 0] до светло-голубого ссг =[128 255 255];

б) на той же решетке по (7) создана нормализованная карта H=norm(F) с min (H)=0, max (H)=1 и хорошо заметным повышением контраста;

в) на той же решетке по (8) сгенерирована карта B=bright(F,2) с min(B)=0.505, max(b)=0.899 и вдвое большей яркостью, чем у карты F ;

г) на той же решетке по (9) выполнена гамма-коррекция G=gamma(F,0.5) с min(G)=0.1, max(G)=0.893 и большим контрастом, чем у карты B ;

д) на той же решетке по (10) построен штамп S<n,m>= stamp^F<n,m>,0.5) с пороговым уровнем /1 = 0.5;

a) F <

д) S=stamp(F,0.5)

б) H=norm(F)

в) B=bright(F,2)

г) G=gamma(F,0.5)

e) H

<2nx2m>

ж) H

<4nx4m>

з) H

<8nx8m>

л) H<

r<2nx2m>

м) H <

Рис. 3. Численный шум

н) C

е) изображение карты первой октавы H<2nx2m> получено по (13) линейным смешиванием mix2[cтз,cж,H<8x1ü>) от темно-зеленого цвета стз =[ü 128 ü] до желтого сж=[255 255 ü];

ж) карта второй октавы H<4nx4m> получена линейным смешиванием mix2{c6 ,ск ,H<16x2ü>j от белого цвета сб = [255 255 255] до красного ск =[255 0 0];

з) карта третьей октавы H<8nx8m> получена линейным смешиванием miX2[cс с ,H<32x4ü>j от синего цвета сс = [ü ü 255] до белого сб ;

и) разноцветный шум С=0.5H<n'm>+0.2H<2n'2m>+0.2H<4n,4m>+ü.lH<8n'8m> получен по (15) покомпонентным смешиванием четырех октавных карт и бесшовно размножен в два ряда и две колонки;

к) разноцветный камуфляж K=ü.5S<n'm>+ü.2S<2n'2m>+ü.2S<4n'4m> +ü. 1S<8n,8m> получен покомпонентным смешиванием четырех октавных штампов и бесшовно размножен в два ряда и две колонки.

Процедурный шум, и не только численный, имеет полезное применение как генератор SD-ландшафта [2], в котором значения шумовой функции рассматриваются не как цвета текселов плоского изображения, а как карта высот рельефа на плане vxu, по которой строится полигональная сеть. На рис. 3, л - н показаны поверхности карт H<nxm> (см. рис. 3,6), H<2пх2т> (см. рис. з,е) и одной секции тайловой текстуры на рис. 3,и. Для получения хорошей выпуклости рельефа значения карт увеличены в 30 раз.

При создании тайлового шума Перлина уравниваются граничные векторы

Gnü = Güü , Gn1 = Gü1 , •••, Gnm = Güm ;

Güm = Güü , G1m = G1ü ,•••, Gnm = Gnü ,

тогда в (5) автоматически получатся требуемые граничные элементы (16), (17). Шум Перлина обладает следующими свойствами:

• благодаря нормализованной параметризации (3), все клетки решетки параметрически квадратны при любых геометрических размерах (1);

• во всех узлах решетки значения карты Fih jd равны нулю ввиду обнуления соответствующих векторов в (4). Это объясняет появление в Перлин-текстурах горизонтально и вертикально ориентированных прямоугольных деталей;

• на одноклеточной тайловой решетке с n =m=1 и равными узловыми векторами Güü = Gü1 = G1ü = G11 значения карты кососимметричны: Fn =-F1-t 1-т;

• все значения карты гарантированно лежат в интервале [—Vü5, Vü~5 ] (реально в гораздо более узком), поэтому она нуждается в нормализации.

Возможности шума Перлина проиллюстрированы на рис. 4, где показано несколько его тайловых реализаций с размерами карты N=12ü и M=15ü, с разными размерами решетки nxm, фильтрами (7)—(12) и цветовыми / фрактальными смесями (13)—(15):

а) карта Fe[—ü.197, ü.197] создана на одноклеточной решетке и автоматически промоду-лирована видеоадаптером так, что отрицательные значения Fvu < ü заменились на положительные Fvu+1;

б) та же карта F нормализована по (7);

в) та же карта преобразована абсолютным фильтром (11) и нормализована;

г) типичный нормализованный Перлин-шум на решетке из 12x15 квадратных клеток;

д) волноподобный шум построен на решетке из 1üx3 горизонтально вытянутых клеток;

е) шум построен на решетке 3x3 , усилен в 10 раз и модулирован по (12);

ж) шум, построенный на решетке 3x1ü, абсолютизирован по (11) и отштампован по (10) с порогом /1 = ü. 1, влияющим на толщину светлых линий;

з) на решетке из 6x5 клеток созданы и соединены в конечное изображение независимые цветовые Перлин-карты staшp(R,0), staшp(G,0) и staшp{B,6);

и) -м) карта Н<4х2> и три октавные карты Н<8х4>,

Я<1бх8> т_т<32х16> .

и Н ;

н) фрактальная смесь С=0.5Н<4х2>+0.2Н<8х4>+0.2Н<16х8>+0.1Н<32х16>, размноженная в два ряда и две колонки.

а) modul(F)

б) тт(Щ

в) norm(abs(F))

г) п=12, ш=\5

д) п=10, m=3

е) modul(\0F)

ж) stamp(abs(F),0Л)

з) stamp((R,G,B),0)

л) Н

<16х8>

м) Н

<32х16>

н) C

Рис. 4. Шум Перлина

Для того чтобы тайловая мультитекстура, собранная из одинаковых плиток, не утомляла назойливой периодичностью, нужно генерировать все «плитки» с одинаковыми граничными элементами (16), (17), но с разными внутренними элементами еп ^вп-1ш-1. На рис. 5

показаны слева периодическая 2х3 -укладка из шести одинаковых плиток, а справа - муль-тивариантная тайловая текстура, в которой все плитки отличаются друг от друга внутри, но совпадают по обозначенным границам сшивки. Заметим, что только левые верхние плитки в обеих текстурах одинаковые. Цветовые переходы изображений получены с помощью сплайнов Безье: левого - линейным смешиванием (13) от темно-коричневого цвета до желтого, а правого - квадратичным смешиванием (14) от коричневого цвета через красный до желтого.

Рис. 5. Периодический и мультивариантный тайлинг

Метод мультивариантного тайлинга предназначен для бесшовного последовательного покрытия больших объемов пространства с малыми затратами памяти по сравнению с ресурсоемким одноразовым генерированием огромной текстуры.

Библиографический список

1. Ebert, D.S. Texturing and modeling. A procedural approach. Third edition / D.S. Ebert [et al.]. -San Francisco, CA: Morgan Kaufmann Publishers Inc., 2002. - 600 p.

2. Снук, Г. Создание 3D-ландшафтов в реальном времени с использованием С++ и DirectX 9: [пер. с англ.] / Г. Снук. - М.: КУДИЦ - ОБРАЗ, 2007. - 368 с.

Дата поступления в редакцию 25.01.16

E.A. Nikulin

iНе можете найти то, что вам нужно? Попробуйте сервис подбора литературы.

PROCEDURAL NOISE AND MULTIVARIATE TILING

Nizhny Novgorod state technical university n.a. R.E. Alexeev

Subject: Creation of procedural seamless textures with non-repeating tiles.

Purpose: Evolution of methods of procedural seamless texturing.

Methodology: A special choice of node elements of the texture lattice.

Originality: Is provided non-periodical tiling of the large multitextures.

Findings: The method is designed for seamless coverage of large areas at low cost resources.

Key words: texture, cellular noise, tiling.

i Надоели баннеры? Вы всегда можете отключить рекламу.