Encoding windows-1251 Адреса страницы: lit999.narod.ru

На этой странице обсуждение из разных источников.


На данный момент у меня катастрофически не хватает времени: тут и занятость на работе, и подготовка к празднованию Нового 2003 года, и работа над проектом Pattern for background of securities (floater)
UZ-II
, и новые мысли в моей бедной голове #. Но я всеравно буду принимать и читать ваши письма! Мне интересны ваши мысли! Также мне интересны будут и ваши алгоритмы.

Здравствуйте, Владимир.

Работаю я с программой 3D визуализации, подобной 3DMax Studio,
POV-Ray 3.5 (http://www.povray.org) Для построения сцены пишется программа на внутреннем языке, которая потом визуализируется.

Итак, пигментные текстуры.
Имеем: плоскую непериодическую текстуру F(u,v)
Требуется: плоская периодическая текстура G(u,v):
G(u,v) = G(u+nU, v+mV), где U, V - периоды, n, m - целые числа.

Рассматриваем F(u,v) на интервале [u0..u0+U, v0..v0+V]:

u` = (u - u0) / U,
u` принадлежит интервалу [0..1];
v` = (v - v0) / V,
v` принадлежит интервалу [0..1];

F1(u,v) = F(u,v);
F2(u,v) = F(u-U,v);
F3(u,v) = F1(u,v) * (1-u`) + F2(u,v) * u`;
Таким образом,
F3(u0,v) = F1(u0,v) = F(u0,v);
F3(u0+U,v) = F2(u0+U,v) = F(u0,v);
Т.е.,
F3(u0,v) = F3(u0+U,v),
(периодичность по координате 'u').
Аналогично по координате 'v':
F4(u,v) = F3(u,v);
F5(u,v) = F3(u,v-V);
G(u,v) = F4(u,v) * (1-v`) + F5(u,v) * v`;

Таким образом, мы получили текстуру G(u,v) на интервале [u0..u0+U, v0..v0+V] со следующими свойствами:
G(u0,v) = G(u0+U,v);
G(u,v0) = G(u,v0+V);

Т.е. <BODY background="текстура.png"> - и в путь!

Недостатки: некоторая "смазанность" в центре ячейки [u0..u0+U, v0..v0+V] - смешиваются аж четыре оригинальные текстуры. Но при некоторых F(u,v) эффект не заметен или просто "не портит".
Достоинства: годится любая F(u,v). (Даже ШУМ(u,v))
Замечание: G(u,v) может использоваться не только для создания карты цветов (Color Map), но и для карты нормалей (Bumps Map). Для одноцветной плоскости и бокового освещения наложение такой карты дает великолепные результаты как раз для фона веб-страниц - он получается достаточно монотонный для "читабельности" текста.

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

Продолжать? Если да, то пишите. Я отвечу, скорее всего, на следующей неделе - слишком много работы.

--
С уважением,
Vadim

Hello Imageman,

t>> 2)Самое главное: генерируется несколько текстур, которые налагаются
t>> друг на друга с использованием прозрачности
Imageman> Начнем с того, что простое наложение не годится - представь, что ты
Imageman> подобным образом наложил друг на друга три фотографии. Что ты увидишь?
Imageman> Как прореагирует твой мозг на такую мешанину? Я думаю, что тебе не
Imageman> понравится :-)

Imageman> В проге я накладываю (по сути) несколько текстур друг на друга. Причем
Imageman> не всегда линейно.
t>> 3) Для красоты сверху можно добавлять объекты( типа фрактальных)
Imageman> Как это реализовать? Как сделать так, чтобы они были зацикленные и не
Imageman> образовывали швов?
t>> 4) Feature size - вероятно растяжение функции F(X,Y) по осям Х и У.
Imageman> Нет. В принципе неправильно. Если мы возьмем функцию с периодом 1, то
Imageman> такая функция будет хорошо заполнять (без швов) квадраты со сторонами
Imageman> 1*1, 2*2, 3*3 и т.д. Но при этому будут видны невооруженным глазом
Imageman> ряды и столбцы. Feature size должен (по желанию пользователя)
Imageman> изменяться плавно, а не скачкообразно. При этом текстура не должна
Imageman> терть своей "естественности".

t>> Вот собственно все мои мысли по этому поводу.
Imageman> Я рад и такому письму.
t>> Надеюсь Вы прочли что- то новое в этом письме.
Imageman> Может следующее письмо будет удачнее?

А вот и следующее письмо:


Насчет 4-го пункта - это мой промах.

Насчет 3-го - Объект - это та же функция F(X,Y) но т.к подстилка уже сгенерированна, нет нужды заполнять этим объектом всю текстуру. Можно разбросать несколько штук в живописном порядке. Если объект попадает на край текстуры, то непомещающаяся часть переносится на противоположный край.

Еще идея . Позволит придать текстурам глянцевость и "трехмерность" (пузырики и впадинки :-))

РАСЧЕТ КАРТ ОСВЕЩЕНИЯ
(Аналог Lighting Maps в 3D графике)

1) Генерируется Ландшафт. По сути - та же бесшовная текстура, но монохромная. Целочисленное значение цвета представляет собой координату Z (высоту точки над уровнем моря ) Далее будет называться матрицей для абстрагирования от графической сути. Ландшафт на конечный результат не накладывается и используется только для построения карты светотени.

2) Выбирается система координат. Например Х - вдоль строк матрицы, У - вдоль столбцов, Z - перпендикулярно.

3) В системе координат задается источник света. Т.е его (X,Y,Z) , цвет и яркость. Также задается уровень рассеянного в атмосфере света (ни одна точка не может быть освещена слабее этого уровня)

4) Строится палитра карты освещения. Интервал между цветом источника и черным (отсутсвием цвета) разбивается на 100, 255 или по вкусу частей. В случае белой лампочки получаем например 100 градаций серого. Если уровень рассеянного света - 20, то фактически будет использоваться палитра от белого цвета (источника) до 20-й градации серого (если считать от черного к белому).

5) Источник освещения соединяется с каждой точкой текстуры (X,Y,Z) прямой линией (в 3D графике это называется трассировкой лучей, Ray Tracing). Далее прямая линия продолжается до уровня моря. Естественно данная точка образует тень. Точки попавшие в эту тень в дальнейшей трассировке не учавствуют и имеют цвет равный рассеянному. Яркость самой точки определяется расстоянием до источника света, углом падения луча и "материалом" текстуры (аки пластик металл etc в фотошопе). Фактически материал задает уровень отражения света. Точную зависимость я не знаю, покопайся в учебниках физики, оптики или 3D графики. ВАЖНО - Для обеспечения бесшовности: Если тень от точки выпадает за край текстуры, "лишнее" не отбрасывается, а переносится на
противоположный край текстуры.

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

Надеюсь, получилось удачнее :-)

--
Best regards,
terranian (Алиев Анар)

Письмо получилось, несомненно, удачнее!

 
 

 

 

Напишите мне все свои мысли по поводу построения алгоритма Alien skin textureshop: Imageman@inbox.lv

Что еще есть у Владимира Чаплинского... (Back)
 
Дата последней модификации страницы: 06.12.2008 16:31

Автор страницы Владимир Чаплинский
Альтернативный адрес: vladimir_c@mail.ru

Russian LinkExchange Advertising Network
Russian LinkExchange Member
 

Сайт создан в системе uCoz