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

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

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

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

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

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

alex_4x
На всякий случай (вдруг не видел): я в http://www.gamedev.ru/code/articles/procedural_noise пытался сделать некоторую подборку, там ссылка на State of the Art in Procedural Noise Functions - добротную большую обзорную статью.
Конкретно фракталы мне показались трудноконтролируемыми, но, возможно (судя по тому, что говорят на тематических форумах) - с опытом это получается лучше. Но там люди годами сидят. С Перлином сходу получается что-то сносное и предсказуемое.
Некоторые люди ковыряют Textures by Example, картинки выглядят симпатично.
Artlav, ты демку сделал?
Что за шрифт в формулах? У него какое-то странное очарование, отдающее XIX веком.
посмотри еще на DiamondSquare и Value Noise
говорят что биомы в майнкрафте лучше всего получается генерить Voronoi Noise
FordPerfect
> Что за шрифт в формулах?
Похоже на "monotype corsiva"
А что такое "Textures by Example" ? Это какой-то конкретный софт или метод?
А есть программа, в которой можно визуально накладывать фильтры и при этом узнать их тип? То есть понять не только результат, но и почитать что это за фильтр?
https://www.filterforge.com/download/
http://www.spiralgraphics.biz/gallery.htm
Про различные виды сегментации и разбиения на неравномерные части кто что знает расскажите!
Я придумал новый метод.
Точнее я не придумал, я думаю что "рациональные числа скатерть улама" - можно использовать для разбиения на некие случайные и различные по размеру и форме области. центр можно брать любое число кстати. Начать можно не с 0. Будет и некая "структурность" и некая "хаосность".
Какие еще есть методы ?
Вот еще непонятно как применить.... http://studall.org/all2-137340.html, но идея кристализации, использования начальных параметров и внешних факторов очень интересна именно динамикой создания "чего-то".
UP.
Подскажите, может кто видел, любые ссылки на процедурную генерацию текстур. Если процедурная генерация не текстур, тоже интересно.
Особенно интересует генерация текстур PBR типа, если где видели обсуждение этой темы - напишите пожалуйста. Или полезные материалы по PBR вообще.
Да много я разных процедурных текстур видел и делал, https://github.com/mrdoob/texgen.js пример простой.
Но так как в реальных проектах их затратно использовать, даже в webgl проще подгрузить текстуру по сети чем генерить ее, я не пользуюсь этой техникой, но мне она тоже интересна.
Я генерирую разные объекты процедурно, в будущем планирую генерировать геометрию с текстурой, а еще очень интересно генерация объектов, типа неба, облаков, островов, волн на воде и т.п.
А вот с PBR пока не работал.
Вообщем хотел сказать что тема интересная, пиши сюда что найдешь или создашь, читатели есть)
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;
alex_4x
> Подскажите, может кто видел, любые ссылки на процедурную генерацию текстур.
Я когда-то делал что-то типа вводной статьи:
http://www.gamedev.ru/community/toolcorner/articles/TFScript
> Если процедурная генерация не текстур, тоже интересно.
Вот, к примеру:
http://www.gamedev.ru/flame/forum/?id=180947&page=67#m991
Это процедурная эмуляция звука, используется физическое моделирование.
По идее, его можно задействовать и в генерации изображений и форм, генерация волнения воды просто напрашивается по аналогии. Я когда-то делал простой пример: Волны на регулярной сетке. Изначально задана плоская 2D сетка, каждый элемент пружинками связан с четырьмя соседями, законы Ньютона и Гука. Идёт дождь (удары в случайный местах), плюс мышкой можно жать на поверхность.
Конкретно для генерации 2D изображений добавлю свой приёмчик - рисовать на холсте простые изображения аддитивно, пространство холста по краям замкнуть на противоположный край. Например, если мы рисуем круг, то все точки внутри круга увеличивают значение на +1, если круг уходит за край - он появляется с противоположной стороны, если круг шире холста, то он накладывается сам на себя тоже аддитивно.
Интересная тема.
-Eugene-
> Интересная тема.
+1
Я в своё сообщение выше добавил подробности того, как изображения получены, с исходным кодом.
Народ, я залип, второй день сижу и жму пробел: Генератор узоров
Mikle
чет не впечятлило.
Тема в архиве.
| Winrating.ru/stats/player/972453 winrating.ru/stats/player/972453 winrating.ru |