Войти
ФлеймФорумПрограммирование

Принципы создания процедурных текстур. Обмен опытом, поиск новых и разъяснение давно известных но непонятных способов. Идеи.

Страницы: 1 2 Следующая »
#0
12:27, 17 ноя. 2015

Добрый день!
Я создал эту тему не для того чтобы похвастаться, а чтобы спросить у Вас советов, идей, рассуждений и рассказов про процедурную генерацию текстур и всего такого прочего.

Для того, чтобы разговор был максимально конструктивным и интересным для всех участников, предлагаю описывать свои методы или понимание уже существующих методов максимально полно, а не "смотри туда, там всё уже расписано" :-)

На правах вступительной части :-)
Процедурные текстуры бывают разные. Не смейтесь. Процедурные текстуры можно делать из расчета на то, что их будут использовать только как 2Д картинки, а можно процедурную текстуру делать из расчета того, что при её формировании будет известна X Y Z координата, и соответственно расчет будет делаться именно для этой точки в пространстве. Второй способ насколько я понимаю используется например в таких пакетах 3Д графики как 3D MAX с незапамятных времен.

Изображение

На данном примере для вытянутого яйца текстура считается с учетом не положения точки в пространстве текстурного атласа, а исходя из координат точки 3Д объекта, куда эта текстура попадет. При этом в сущности сама текстура в принципе рендеру и не нужна, расчитывать цвет точки можно по формулам и да, это трудозатратно, это не умеет делать быстро видеокарточка, но принцип получения цвета каждой точки объекта - это некая функция от трех переменных (X,Y,Z). Если сделать "скол", то текстура там будет другой. Красота да и только, но очень трудозатратно и в реалтайме не применимо. С другой стороны пиксельный шейдер, если берет какие-то предрасчитанные данные из текстуры и умножает/делит/все что угодно делает и получает цвет для каждой точки - фактически делает процедурную текстуру. Так что и в реалтайме это применимо, но желательно чтобы количество сложных вычислений на одну точку было минимальным. Что я понимаю под сложными вычислениями ? Например функцию, созданную случайным образом, где количество операций может быть и 20 и 40 и 200...

Изображение

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

Также часто используют генераторы шума, один из них по имени Перлина. И оказывается этот Перлин придумал свой метод генерации шума после того как делал спецэффекты к фильму ТРОН. Трон первый вышел очень давно и 3Д рендер для него и под него писали на силикон-графикс, короче ради одного фильма фактически сделали новый рендер и простора для идей было наверно много, тем более что все принципы как должен работать рендер, где оптимизировать и что и как - как раз тогда и придумывали.
Что про этот шум Перлина везде написано - что он очень удобен. Почему? да потому что легко контролируем. Шум этот состоит из разных частотных составляющих, меняя амплитуду которых и задавая их количество можно получить совершенно разные результаты.

Изображение

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

Изображение

Но шум Перлина - это именно шум. Хорошо им делать дым, огонь, облака, грязь, ржавчину.... А часто хочется получить нерегулярные, но как бы это сказать - более структурные текстуры. То есть в основе текстуры лежит нерегулярность и хаотичность, но части её или некие черты обладают подобием.

Один из вариантов - сначала получить некие случайные данные, а все точки пространства или текстуры считать по некой формуле, где эти случайные данные будут фигурировать.

Изображение

Видимо придумывать новые и новые способы формирования псевдослучайных текстур можно бесконечно.

Еще мне кажется очень интересным направление итерированных функций и фракталов.  Но тут мне не всё так понятно. Во первых функции, которые обладают самоподобием - это не любая функция. У этих функций есть области где они имеют значения а где нет - они могут быть представлены в N мерном пространстве - и соответсвенно все эти факторы использовать в построении "текстуры" или определения какого-то параметра в точке - можно по разному. У меня тут больше вопросов у самого, чем ответов.

Изображение


#1
13:25, 17 ноя. 2015

alex_4x
На всякий случай (вдруг не видел): я в http://www.gamedev.ru/code/articles/procedural_noise пытался сделать некоторую подборку, там ссылка на State of the Art in Procedural Noise Functions - добротную большую обзорную статью.

Конкретно фракталы мне показались трудноконтролируемыми, но, возможно (судя по тому, что говорят на тематических форумах) - с опытом это получается лучше. Но там люди годами сидят. С Перлином сходу получается что-то сносное и предсказуемое.

Некоторые люди ковыряют Textures by Example, картинки выглядят симпатично.
Artlav, ты демку сделал?

Что за шрифт в формулах? У него какое-то странное очарование, отдающее XIX веком.

#2
16:46, 17 ноя. 2015

посмотри еще на DiamondSquare и Value Noise
говорят что биомы в майнкрафте лучше всего получается генерить Voronoi Noise

#3
17:07, 17 ноя. 2015

FordPerfect
> Что за шрифт в формулах?
Похоже на "monotype corsiva"

#4
0:30, 18 ноя. 2015

А что такое "Textures by Example" ? Это какой-то конкретный софт или метод?
А есть программа, в которой можно визуально накладывать фильтры и при этом узнать их тип? То есть понять не только результат, но и почитать что это за фильтр?

https://www.filterforge.com/download/
http://www.spiralgraphics.biz/gallery.htm

#5
18:19, 30 янв. 2016

Про различные виды сегментации и разбиения на неравномерные части кто что знает расскажите!
Я придумал новый метод.
Точнее я не придумал, я думаю что "рациональные числа скатерть улама" - можно использовать для разбиения на некие случайные и различные по размеру и форме области. центр можно брать любое число кстати. Начать можно не с 0. Будет и некая "структурность" и некая "хаосность".
Какие еще есть методы ?
Вот еще непонятно как применить.... http://studall.org/all2-137340.html, но идея кристализации, использования начальных параметров и внешних факторов очень интересна именно динамикой создания "чего-то".

Прошло более 6 месяцев
#6
20:37, 25 авг. 2016

UP.
Подскажите, может кто видел, любые ссылки на процедурную генерацию текстур. Если процедурная генерация не текстур, тоже интересно.
Особенно интересует генерация текстур PBR типа, если где видели обсуждение этой темы - напишите пожалуйста. Или полезные материалы по PBR вообще.

#7
21:43, 25 авг. 2016

Да много я разных процедурных текстур видел и делал, https://github.com/mrdoob/texgen.js пример простой.
Но так как в реальных проектах их затратно использовать, даже в webgl проще подгрузить текстуру по сети чем генерить ее, я не пользуюсь этой техникой, но мне она тоже интересна.
Я генерирую разные объекты процедурно, в будущем планирую генерировать геометрию с текстурой, а еще очень интересно генерация объектов, типа неба, облаков, островов, волн на воде и т.п.
А вот с PBR пока не работал.
Вообщем хотел сказать что тема интересная, пиши сюда что найдешь или создашь, читатели есть)

#8
8:18, 26 авг. 2016

for i := 0 to 511 do
for j := 0 to 511 do begin
tex.pix[i,j].color.R := random(256);
tex.pix[i,j].color.G := random(256);
tex.pix[i,j].color.B := random(256);
end;

#9
9:18, 26 авг. 2016

alex_4x
> Подскажите, может кто видел, любые ссылки на процедурную генерацию текстур.
Я когда-то делал что-то типа вводной статьи:
http://www.gamedev.ru/community/toolcorner/articles/TFScript

> Если процедурная генерация не текстур, тоже интересно.
Вот, к примеру:
http://www.gamedev.ru/flame/forum/?id=180947&page=67#m991
Это процедурная эмуляция звука, используется физическое моделирование.
По идее, его можно задействовать и в генерации изображений и форм, генерация волнения воды просто напрашивается по аналогии. Я когда-то делал простой пример: Волны на регулярной сетке. Изначально задана плоская 2D сетка, каждый элемент пружинками связан с четырьмя соседями, законы Ньютона и Гука. Идёт дождь (удары в случайный местах), плюс мышкой можно жать на поверхность.

Конкретно для генерации 2D изображений добавлю свой приёмчик - рисовать на холсте простые изображения аддитивно, пространство холста по краям замкнуть на противоположный край. Например, если мы рисуем круг, то все точки внутри круга увеличивают значение на +1, если круг уходит за край - он появляется с противоположной стороны, если круг шире холста, то он накладывается сам на себя тоже аддитивно.

+ Несколько примеров

+ Подробнее о том, как это сделано
#10
18:01, 26 авг. 2016

Интересная тема.

#11
23:14, 26 авг. 2016

-Eugene-
> Интересная тема.
+1

#12
10:15, 6 сен. 2016

Я в своё сообщение выше добавил подробности того, как изображения получены, с исходным кодом.

#13
15:36, 7 сен. 2016

Народ, я залип, второй день сижу и жму пробел: Генератор узоров

#14
18:58, 7 сен. 2016

Mikle
чет не впечятлило.

Страницы: 1 2 Следующая »
ФлеймФорумПрограммирование

Тема в архиве.