Вы не авторизованы.

Добро пожаловать, Гость
Логин: Пароль: Запомнить меня
Fragmenarium. Обсуждение, решение проблем.

ТЕМА: Популяции фракталов

Популяции фракталов 5 года 7 мес. назад #1229

  • SCORPION
  • SCORPION аватар
  • Вне сайта
  • Модератор я...
  • Всё получилось, а никто не заметил...(
  • Сообщений: 530
  • Сказали Отлично!: 464
  • Репутация: 38
Долго думал, как назвать тему, но так ничего и не придумал.... На самом деле иногда возникает необходимость как то размножить фрактал на "местности". Эта возможность открывает новые горизонты по созданию уникальных композиций. Но как это сделать просто и быстро? В программе Fragmentarium такая возможность, естественно, имеется!
Но обо всём по порядку и максимально подробно. Совсем новичкам в программе очень полезно будет почитать для начала ЗДЕСЬ.

Запускаем фрагментариум, создаём новый пустой файл. Учиться будем на одной из самых простых функций из серии примитивов - сфере.
Копируем и вставляем код сферы:
#include "DE-Raytracer.frag"

float DE(vec3 p){
 return length(p)-1;
}

1_2014-10-17.jpg


Всё, у нас получился такой красивый шарик! Ну, это то понятно. Но как то одинокий шарик-сиротинка не смотрится... Надо его размножить. Это просто!
Вводим в функцию всего одну строку:

p.x=abs(p.x)-1;

2-1.jpg


У нас получись два шарика! Что мы сделали? Мы фактически применили ИТЕРАЦИЮ, то есть 1*2=2, повторили функцию отрисовки шарика два раза.
Далее. Нам, конечно, два шарика явно мало - будем размножать дальше! Что делаем? Правильно - дублируем строку итерации.

3_2014-10-17.jpg


Что не так? Где ошибка? Ошибка в данном случае кроется в том, что при неизменном размере и расстоянии между нашими шариками два шарика просто слились в один. На самом деле шариков четыре! Исправляем ошибку.

4_2014-10-17.jpg


Вот, теперь всё в порядке! Тогда что получается - при вводе каждой новой строки итераций необходимо уменьшать расстояние между сферами и размер ровно в два раза?
Да, именно так.

5_2014-10-17-2.jpg


6_2014-10-17.jpg


7_2014-10-17.jpg


Ну вот, мы научились размножать шарики, то есть, делать популяцию.
На этом можно было и остановиться, но мы, естественно, останавливаться не намерены. Уж коли речь зашла об итерациях, то нельзя ли как то автоматизировать этот процесс вместо того, чтобы каждый раз вручную вписывать строки и менять циферки? Конечно можно!

Меняем наш код и вписываем в наш код функцию итераций. Вот такой:

for (int i = 0; i < 2; i++)

где цифра "2" после знака < означает количество итераций. Чтобы функция "знала", какое выражение нужно подвергнуть итерациям. выражение по правилам синтаксиса нужно взять в фигурные скобки. Вот полный код:
#include "DE-Raytracer.frag"

float DE(vec3 p){
for  (int i = 0; i < 2; i++)
{ p.x=abs(p.x)-1;}
return length(p)-1;
}

Кликаем "build" и.... код работает, только мы видим ту же ошибку, что у нас только что была выше.

8_2014-10-17.jpg


Всё правильно, программа не виновата, что мы ей задали, то она и сделала! Дважды повторила итерацию, шарики слились, но иных условий то не было задано!
Как же поступить? В ручном режиме мы сами делили значения радиуса сфер и расстояния между ними на 2 и вписывали циферки. Здесь нам надо заставить всё это делать программу в автоматическом режиме. Каким образом? Вспомните, какие значения мы меняли вручную и на одинакову величину? Правильно - это рассояние и размер. Но мы то меняем, а для программы цифровое значение - это закон и самостоятельно программа этот закон поменять не может. Вывод? Правильно, Если величина изменяемая, то надо ввести эту переменную, обозначив её буквой и задать закон изменения этой переменной. Что мы и делаем. Нам нужно каждый раз после применения очередной итерации уменьшить расстояние и диаметр на 2? Ну и вписываем под строкой итераций правило. Обратите внимание - правило изменений переменной должно быть также заключено в фигурные скобки и должно находится НИЖЕ строки итераций. Программа условно выполняет последовательность команд как мы и читаем - справа налево и сверху вниз. Следовательно, после выполнения одного цикла итерации будет выполнено правило деления переменной на 2, при следующем цикле - ещё на 2 и так далее, что нам и требовалось!

9.jpg

#include "DE-Raytracer.frag"

 
float DE(vec3 p)
{
float s=1;
for  (int i = 0; i < 2; i++)
{
p.x=abs(p.x)-s;
s=s/2;
}
return length(p)-s;
}

Всё работает! Ура! Нет? что то не то? Правильно, что не то... У нас почему то размер шариков уменьшился вдвое от нужного... Смотрим внимательно. Всё правильно, так и должно было получиться... Смотрите - в функции возврата у нас вписана та же переменная, которая определяет размер шариков. Но ведь перед возвратом мы поделили значение на 2 и так и вернули это половинное значение. И следующий цикл начинается при половинном значении! ну так всё просто - снова умножим значение на 2 и вернём уже нормальную величину!

10_2014-10-17.jpg

#include "DE-Raytracer.frag"

 
float DE(vec3 p)
{
float s=1;
for  (int i = 0; i < 2; i++)
{
p.x=abs(p.x)-s;
s=s/2;
}
return length(p)-s*2;
}

Теперь всё работает! А не проще ли, всё таки, вручную вписывать строки и менять значения - спросите вы. Я отвечу - проще, если количество итераций не превышает двух-трёх. Тогда действительно, вписал три строчки и не заморачивался. А если итераций восемь-десять? А, тогда вам понадобиться калькулятор и долгое нудное вписывание строк и высчитанных значений. А мы сейчас просто введём ОДИН слайдер для управления итерациями и добавим оси и будем играть!
#include "DE-Raytracer.frag"

uniform int Iterations;slider[0,2,10]
 
float DE(vec3 p)
{
float s=1;
for  (int i = 0; i < Iterations; i++)
{
p.xyz=abs(p.xyz)-s;
s=s/2;
}
return length(p)-s*2;
}

Ну как?
В следующей части мы рассмотрим практическое применение итераций-популяций к фракталам.
Кому это надо?
- Никому не надо...
Кому это нужно?
- Никому не нужно...
Последнее редактирование: 5 года 7 мес. назад от SCORPION.
Администратор запретил публиковать записи гостям.
Отлично! сказали: androceus, Scolt

Популяции фракталов 5 года 7 мес. назад #1230

  • androceus
  • androceus аватар
  • Вне сайта
  • Администратор
  • Пришелец
  • Сообщений: 862
  • Сказали Отлично!: 771
  • Репутация: 21
Вау, вау, круто и очень полезно!!!
Интернет полезности - мой канал на YouTube. Криптовалютные проекты + полезные советы. Перейти и ознакомится: goo.gl/JgDUJo
Администратор запретил публиковать записи гостям.

Популяции фракталов 5 года 7 мес. назад #1243

  • SCORPION
  • SCORPION аватар
  • Вне сайта
  • Модератор я...
  • Всё получилось, а никто не заметил...(
  • Сообщений: 530
  • Сказали Отлично!: 464
  • Репутация: 38
Спасибо, Андрей! А хотел то я маленькую заметочку, да вот, понесло и .... Готовлю продолжение. Во второй части будет добавлен метод популяции с помощью матриц вращения - это тоже интересно, а в третьей части уже практическое применение....
Кому это надо?
- Никому не надо...
Кому это нужно?
- Никому не нужно...
Администратор запретил публиковать записи гостям.

Популяции фракталов 5 года 7 мес. назад #1251

  • SCORPION
  • SCORPION аватар
  • Вне сайта
  • Модератор я...
  • Всё получилось, а никто не заметил...(
  • Сообщений: 530
  • Сказали Отлично!: 464
  • Репутация: 38
Итак, продолжаю. Мы закончили рассмотрение вопроса по "рассаживанию" фракталов на местности. Но тема была бы неполной, если мы не рассмотрим вопрос вращения фракталов. Как вы заметили, на практике в пресетах вопрос вращения решается с помощью матриц вращения, реализуемых с помощью подключаемого модуля MathUtils.frag.
Но вот лично мне это кажется не совсем удобно - надо вводить mat3, слайдеры неудобные - один по углу и три по вектору. Гораздо удобнее иметь три слайдера по углу по трём разным осям. Поэтому будем использовать вот эти матрицы:
// Матрица вращения по оси X
vec3 rotateX(vec3 p, float phi) {
	float c = cos(phi);
	float s = sin(phi);
	return vec3(p.x, c*p.y - s*p.z, s*p.y + c*p.z);
}
// Матрица вращения по оси Y
vec3 rotateY(vec3 p, float phi) {
	float c = cos(phi);
	float s = sin(phi);
	return vec3(c*p.x + s*p.z, p.y, c*p.z - s*p.x);
}
// Матрица вращения по оси Z
vec3 rotateZ(vec3 p, float phi) {
	float c = cos(phi);
	float s = sin(phi);
	return vec3(c*p.x - s*p.y, s*p.x + c*p.y, p.z);
}

Теперь откроем наш проект со сферами и вставим наши матрицы:

1_2014-10-18.jpg


Теперь нам надо подключить матрицы к нашей функции DE сферы. Как вы уже догадались, действовать будем так же, как и в случае "размножением" - вводим строку.

p = abs(rotateY(p,0.4));

Вот так:

2-1_2014-10-18.jpg


Ну и всё - можете поэкспериментировать - меняя значение в радианах, понаблюдаем за углом поворота группы шариков вокруг своей оси. Это всё хорошо и работает, но нам нужно другое. Нам будет интересно "рассаживать" группу шариков по мере поворота. Как попробуем поступить? Верно - продублируем строку поворота:

3-1_2014-10-18.jpg


У нас всё работает! А раз так - что нам следует сделать дальше? Совершенно верно - ввести итерации для формулы вращения!
Ну и попутно ввести слайдеры для угла поворота и итераций вращения. Вот так будет выглядеть наш код:
#include "DE-Raytracer.frag"

uniform int Iterations;slider[0,1,10]
uniform int Iter_Rot_Y;slider[0,1,100]
uniform float Angle_Y; slider[0,0,1];
 
// Матрица вращения по оси X
vec3 rotateX(vec3 p, float phi) {
	float c = cos(phi);
	float s = sin(phi);
	return vec3(p.x, c*p.y - s*p.z, s*p.y + c*p.z);
}
// Матрица вращения по оси Y
vec3 rotateY(vec3 p, float phi) {
	float c = cos(phi);
	float s = sin(phi);
	return vec3(c*p.x + s*p.z, p.y, c*p.z - s*p.x);
}
// Матрица вращения по оси Z
vec3 rotateZ(vec3 p, float phi) {
	float c = cos(phi);
	float s = sin(phi);
	return vec3(c*p.x - s*p.y, s*p.x + c*p.y, p.z);
}
 
float DE(vec3 p)
{
for  (int i = 0; i < Iter_Rot_Y; i++)
{p = abs(rotateY(p,Angle_Y));}
float s=1;
for  (int i = 0; i < Iterations; i++)
{
p.x=abs(p.x)-s;
s=s/2;
}
return length(p)-s*2;
}

4-1_2014-10-18.jpg


Ну вот, теперь готово! Но мы работали только с углом по оси Y, две другие матрицы бездействуют! Так в чём дело? - повторяем действия для других осей.

5-2.jpg


Ну, теперь покрутим....

ВНИМАНИЕ: Спойлер! [ Нажмите, чтобы развернуть ]


А это всего лишь сфера!

В третьей части будем применять наши знания к фракталам!
Кому это надо?
- Никому не надо...
Кому это нужно?
- Никому не нужно...
Администратор запретил публиковать записи гостям.
Отлично! сказали: androceus, Ballista Cheng

Популяции фракталов 5 года 7 мес. назад #1260

  • SCORPION
  • SCORPION аватар
  • Вне сайта
  • Модератор я...
  • Всё получилось, а никто не заметил...(
  • Сообщений: 530
  • Сказали Отлично!: 464
  • Репутация: 38
Ну и в заключение применим на практике наши знания. Для этого нам понадобится код фрактала. Кто как, а я всегда использую код мандельбульба. Не тот, что включается по умолчанию, а покороче. Вот этот - вместе со сладерами.
ВНИМАНИЕ: Спойлер! [ Нажмите, чтобы развернуть ]


Откроем наш заключительный результат с шариками и вставим в него код мандельбульба. Ещё скопируем и вставим вот эти две строки:

#include "MathUtils.frag"
uniform float time;


Сверяемся со скрином:



Если у кого возникнут вопросы, почему, как и зачем - перечитайте мой урок ЗДЕСЬ.

Ну, а совсем ленивым можно скопировать готовый код:

ВНИМАНИЕ: Спойлер! [ Нажмите, чтобы развернуть ]


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

float s=1;

Установить значение float s=20;, например.

Ещё один нюанс. Если в строке возврата функции итераций удалить корректировку размера - можно получить очень интересные формы!

6_2014-10-19.jpg


Вот код вместе с пресетом для совсем уж ленивых!

ВНИМАНИЕ: Спойлер! [ Нажмите, чтобы развернуть ]


Заметьте - мы совсем ещё не использовали вращения! Попробуем?
ВНИМАНИЕ: Спойлер! [ Нажмите, чтобы развернуть ]


В общем, есть с чем поэкспериментировать и что покрутить.

И совсем в заключение - нам ничто не мешает к нашему коду прикрутить ещё что ни будь. Например, скрипт вращения, который можно взять ЗДЕСЬ

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

7_2014-10-19.jpg


ВНИМАНИЕ: Спойлер! [ Нажмите, чтобы развернуть ]


Ну вот и всё, урок закончен, надеюсь, он был для вас полезным.
Удачи!
Кому это надо?
- Никому не надо...
Кому это нужно?
- Никому не нужно...
Последнее редактирование: 5 года 7 мес. назад от SCORPION.
Администратор запретил публиковать записи гостям.
Отлично! сказали: androceus, Crist

Популяции фракталов 5 года 7 мес. назад #1330

  • Crist
  • Crist аватар
  • Вне сайта
  • Фракталы?... Да слышал.
  • Сообщений: 66
  • Сказали Отлично!: 157
  • Репутация: 12
SCORPION пишет:
Ну, а совсем ленивым можно скопировать готовый код:
:okey: :drnks:
Администратор запретил публиковать записи гостям.

Популяции фракталов 5 года 7 мес. назад #1340

  • Crist
  • Crist аватар
  • Вне сайта
  • Фракталы?... Да слышал.
  • Сообщений: 66
  • Сказали Отлично!: 157
  • Репутация: 12
Пошаманил со сферами, прикольно получается :mlne:
Владимир, спасибо, наконец-то у меня хватило терпения изучить эти основы :dbk:

ВНИМАНИЕ: Спойлер! [ Нажмите, чтобы развернуть ]




Администратор запретил публиковать записи гостям.
Отлично! сказали: androceus, SCORPION, AquaLena, Scolt

Популяции фракталов 5 года 7 мес. назад #1394

  • SCORPION
  • SCORPION аватар
  • Вне сайта
  • Модератор я...
  • Всё получилось, а никто не заметил...(
  • Сообщений: 530
  • Сказали Отлично!: 464
  • Репутация: 38
Сергей, молодец! А у меня только на тебя и надежда была, что покрутишь! :lols:
Ещё по цвету тему надо сделать...
Кому это надо?
- Никому не надо...
Кому это нужно?
- Никому не нужно...
Администратор запретил публиковать записи гостям.

Популяции фракталов 5 года 7 мес. назад #1403

  • Crist
  • Crist аватар
  • Вне сайта
  • Фракталы?... Да слышал.
  • Сообщений: 66
  • Сказали Отлично!: 157
  • Репутация: 12
Затягивает, когда начинаешь врубаеться чего и как. Но пока только шарики/кубики. Даже пирамиду сделать не могу :mbrg: , а хотелось бы. И еще вопрос, если не задавать матрицы вращения , а просто, вот надо повернуть по такой-то оси на столько-то. Допустим даже без переменных. Или одновременное вращение.. я так понял надо как-то обращаться к p.x либо p.xy. Но КАК? ))) Знаю что это очень легко должно быть.
Еще заметил фишку в туториале про IBL пример с фигурами
// An example of Image Based Lighting.
//
// NOTICE:
//  The Ditch-River Panorama HDR is authored by 'Blotchi' and copyrighted by http://www.hdrlabs.com/sibl/archive.html
//  It is licensed under a CC3.0 license: http://creativecommons.org/licenses/by-nc-sa/3.0/us/
#include "IBL-Raytracer.frag"
#include "QuilezLib.frag"
#group TestScene
uniform float TextureScale; slider[0,1,40]
 
// Just a simple test scene...
float DE(vec3 p)
{	
       p.xy=p.yx;
	float d = length(p+vec3(0.0,0.0,-0.25))-0.25;   //  sphere
	d= min(d, udRoundBox(p+vec3(0.2,1.0,-0.25),vec3(0.2),0.05)); // rounded box
	d =min(d, sdCone(p+vec3(1.,1.,-0.5),vec2(0.95,0.45))); // cone
	d = min(d, sdTorus88(p+vec3(-1.4,1.,-0.6),vec2(0.5,0.1))); // torus
	return min(p.z,d);// distance estimate
}

так вот всем фигурам присваивается одно и тоже имя d. И никаких конфликтов и всё работает dsh3
Может ты объяснишь?
Администратор запретил публиковать записи гостям.

Популяции фракталов 5 года 7 мес. назад #1415

  • SCORPION
  • SCORPION аватар
  • Вне сайта
  • Модератор я...
  • Всё получилось, а никто не заметил...(
  • Сообщений: 530
  • Сказали Отлично!: 464
  • Репутация: 38
Crist пишет:
Затягивает, когда начинаешь врубаеться чего и как. Но пока только шарики/кубики. Даже пирамиду сделать не могу :mbrg: , а хотелось бы. И еще вопрос, если не задавать матрицы вращения , а просто, вот надо повернуть по такой-то оси на столько-то. Допустим даже без переменных. Или одновременное вращение.. я так понял надо как-то обращаться к p.x либо p.xy. Но КАК? ))) Знаю что это очень легко должно быть

Сергей, рад, что откликнулся! Конечно, затягивает! Лично меня даже больше, чем "ездить" по фракталу. Хотя бы потому, что ездить я свободно не могу - видюха начинает дико визжать вентилятором, двинешь ползунок - а он ещё скачками секунд 30 двигается сам и куда не надо - какоё уж тут творчество! А вот циферки менять - это веселее! :lols:
Да, так и придётся нам тут вариться... нашёл одного чувака, который хорошие шейдеры пишет, русского. Ну рассказал ему про нас, типа заходи, поможешь! Через неделю получил ответ, что на русском инфы по GLSL полно и пожелал удачи нашему ресурсу. Вот так то... Ну и х... с ним! Но, блин, обидно, даже забугорные помогают лучше....
Но чёт меня понесло, попёр флудить....
По порядку:
1. Без матрицы вращения повернуть ничего нельзя. Сергей, у меня же в уроке пример матриц по трём осям, если надо повернуть по какой то одной оси - просто включи одну из матриц и строку вращения, где угол в радианах и всё. В уроке всё есть.
2. Пирамида
#include "DE-Raytracer.frag"

float DE( vec3 p) {
float h=1;
vec3 q=abs(p);
	return max(-p.y, (q.x+q.y+q.z-h));
}
3. По вопросу из примера.
Во первых, в этом титоре подключается библиотека примитивов QuilezLib.frag, которая в свою очередь, содрана отсюда:
iquilezles.org/www/articles/distfunctions/distfunctions.htm
так что ты ошибаешься, называя переменную d именем примитива. Имена у них есть и они определены в вышеуказанной библиотеке, функция DE просто вытягивает примитивы из подключенной библиотеки.
В данном случае мы определили переменную d и ею же отрисовали сферу, верно?
Но в следующих строках мы что видим? р=. Знак "=" после переменной означает то, что над этой переменной будут производится ДЕЙСТВИЯ. Переменная то одна, а вот действий с ней может быть сколько угодно! Далее мы видим d= min(d, То есть есть переменная, но через min и запятую. Это значит, что на самом деле над самой переменной действия производится не будут, а дальше после запятой подключается примитив и далее уже идёт через vec3 положение в пространстве примитива и через vec2 или vec3 (параметры) размеры примитива.
В следующей строке подключается ещё один примитив и так далее. То есть мы сами можем дописывать строки, подключая примитивы и не только - любые фракталы.



Ну, объяснил, как мог...

Сергей, на всякий случай держи библиотеку примитивов, я их натаскал, откуда смог. Чтобы не конфликтовали DE. я их подключаю черех #define. ну, это понятно.
#include "DE-Raytracer.frag"

//#define Sphere
//#define Box
//#define Round_Box
//#define Torus
//#define prizmI
//#define prizmII
//#define Torus_Signet
//#define Cylinder
//#define Cone
//#define Plane_signet
//#define TorusII
//#define twist
//#define Cheap_Bend
//#define Pyramid
//#define Helix Ball
//#define Infinite helix
//#define Wheel
//#define Con_Cil_Con
//#define Bevel_3xprizm
//#define Karandah
//#define Capsule
 
#ifdef Sphere
//Sphere
float DE( vec3 p){ return length(p)-1;}
#endif

#ifdef Box
//Box
float DE( vec3 p ){ return length(max(abs(p)-1.0,0.0));}
#endif

#ifdef Round_Box
//Round Box 
float DE( vec3 p){ return length(max(abs(p)-0.8,0.0))-0.2;}
#endif

#ifdef Torus
//Torus
float DE( vec3 p ){
vec2 t=0.5;
vec2 q = vec2(length(p.xz)-t.x,p.y)-1;
return length(q)-t.y;}
#endif

#ifdef prizmI
//3x prizm
float sdTriPrism( vec3 p, vec2 h ){
vec3 q = abs(p);
return max(q.z-h.y,max(q.x*0.866025+p.y*0.5,-p.y)-h.x*0.5);}
float DE(vec3 z){
float d  = sdTriPrism(z,1.0);
return d;}
#endif

#ifdef prizmII
//6x prizm
float sdHexPrism( vec3 p, vec2 h ){
vec3 q = abs(p);
return max(q.z-h.y,max(q.x+q.y*0.57735,q.y*1.1547)-h.x);}
float DE(vec3 z){
float d =sdHexPrism(z,1.0);
return d;}
#endif

#ifdef Torus_Signet
//Torus88 - signed
float length8(vec2 p) {
vec2 r = p*p;
r = r*r;
return pow(dot(r,r), (0.5/6.0));}
float sdTorus88( vec3 p, vec2 t ){
vec2 q = vec2(length8(p.xz)-t.x,p.y)-0.5;
return length8(q)-t.y;}
float DE(vec3 z){
float d = sdTorus88(z,0.4);
return d;}
#endif

 
#ifdef Cylinder
// Cylinder
float  DE(vec3 z) {
float d = length(z);
d = min(d, length(z.yz)-1.0);
d=max(d,z.x-1.0); d=max(d,-z.x-1.0);
return d;}
#endif

#ifdef Cone
// Cone 
float sdCone( vec3 p, vec2 c ){
float q = length(p.xy);
return dot(c ,vec2(q,p.z));}
float DE(vec3 p){	
float d = length(p);
d =min(d, sdCone(p+vec3(0.,0.,-1.5),vec2(0.95,0.45)));
d=max(d,p.z-2.0); d=max(d,-p.z-0.5);
return d;}
#endif

#ifdef Plane_signet
// Plane - signed
float DE( vec3 n){ 
return dot(1.0,n.xyz); }
#endif

#ifdef Capsule
float Sphere( vec3 p){
float d = (length(p-vec3(2,0,0))-1);
float d1 = (length(p-vec3(-2.0,0,0))-1);
return min(d,d1);}
float  Cil(vec3 z) {
float d = length(z);
d = min(d, length(z.yz)-1.0);
d=max(d,z.x-2.0); d=max(d,-z.x-2.0);
return d;}
float DE( vec3 p ){return min(Sphere(p),Cil(p));}
#endif

#ifdef TorusII
//sdTorus
float length2(vec2 p) {
	vec2 r = p+p;
	return pow(dot(r,r), (1.3/3.0))-2;}
float length8(vec2 p) {
	vec2 r = p*p;
	r = r*r+0.2;
	return pow(dot(r,r), (1.5/7.0));}
float sdTorus82( vec3 p, vec2 t ){
  vec2 q = vec2(length2(p.xz)-t.x,p.y);
  return length8(q)-t.y;}
float DE(vec3 n){
float d = sdTorus82(n,1);
return d;}
#endif

 
#ifdef twist
//demo twist
float box( vec3 p ){ return length(max(abs(p)-1.0,0.0));}
float DE( vec3 p ){
    float c = cos(2.0*p.y);
    float s = sin(2.0*p.y);
    mat2  m = mat2(c,-s,s,c);
    vec3  q = vec3(m*p.xz,p.y);
    return box(q);}
#endif

#ifdef Cheap_Bend
float box( vec3 p ){ return length(max(abs(p)-1.0,0.0));}
float DE( vec3 p ){
    float c = cos(0.4*p.y);
    float s = sin(0.4*p.y);
    mat2  m = mat2(c,-s,s,c);
    vec3  q = vec3(m*p.xy,p.z);
    return box(q);}
#endif

 
#ifdef Pyramid
float DE( vec3 p) {
float h=1;
vec3 q=abs(p);
	return max(-p.y, (q.x+q.y+q.z-h));
}
#endif

 
#ifdef Helix Ball
float DE(vec3 p){
	float a = atan(p.y,p.x)*0.1;
	float b = mod(p.z,0.6283)-0.314159;
	a = abs(a-b);
	if (a>0.314159) a = 0.6283-a;
	return length(vec2(length(p)-1.8, a))-0.15;}
#endif

#ifdef Infinite helix
float DE(vec3 p){
	float a = atan(p.y,p.x)*0.1;
	float b = mod(p.z,0.6283)-0.314159;
	a = abs(a-b);
	if (a>0.314159) a = 0.6283-a;
	return length(vec2(length(p.xy)-0.3, a))-0.1;}
#endif

#ifdef Wheel
//wheel
float DE( vec3 p){
return length(vec2(length(p)-1.8, p))-0.6;}
#endif

#ifdef Con_Cil_Con
float Box( vec3 p ){ return length(max(abs(p)-1.0,0.0));}
float Sphere( vec3 p){ return length(p.xy)-1;}
float DE( vec3 p ){return Sphere(p)+Box(p);}
#endif

 
#ifdef Bevel_3xprizm
float Box( vec3 p ){ return length(max(abs(p)-1.2,0.0));}
float sdTriPrism( vec3 p, vec2 h ){
vec3 q = abs(p);
return max(q.z-h.y,max(q.x*0.866025+p.y*0.5,-p.y)-h.x*0.5);}
float Prizm(vec3 z){
float d  = sdTriPrism(z,1.5);
return d;}
float DE( vec3 p ){return Prizm(p)+Box(p);}
#endif

#ifdef Karandah
float Sphere( vec3 p){ return length(p.xy)-1.0;}
float sdHexPrism( vec3 p, vec2 h ){
vec3 q = abs(p);
return max(q.z-h.y,max(q.x+q.y*0.57735,q.y*1.1547)-h.x);}
float Prizm(vec3 z){
float d =sdHexPrism(z,1);
return d;}
float DE( vec3 p ){return Prizm(p)+Sphere(p);}
#endif

#preset Default
FOV = 0.62536
Eye = 1.95593,0.222441,2.28926
Target = -4.20447,-0.455894,-4.04462
EquiRectangular = false
FocalPlane = 1
Aperture = 0
Gamma = 2.08335
ToneMapping = 3
Exposure = 0.6522
Brightness = 1
Contrast = 1
Saturation = 1
GaussianWeight = 1
AntiAliasScale = 2
Detail = -2.84956
FudgeFactor = 0.5
Dither = 0.51754
NormalBackStep = 1 NotLocked
AO = 0,0,0,0.85185
SpecularMax = 10
CamLight = 1,1,1,1.53846
CamLightMin = 0.12121
Glow = 1,1,1,0.43836
GlowMax = 52
Fog = 0
DebugSun = false
BaseColor = 1,1,1
OrbitStrength = 0.14286
X = 1,1,1,1
Y = 0.345098,0.666667,0,0.02912
Z = 1,0.666667,0,1
R = 0.0784314,1,0.941176,-0.0194
BackgroundColor = 0.607843,0.866667,0.560784
GradientBackground = 0.3261
CycleColors = false
Cycles = 4.04901
EnableFloor = false
FloorNormal = 0,0,0
FloorHeight = 0
FloorColor = 1,1,1
DetailAO = -1.35716
MaxRaySteps = 164
Specular = 1.6456
SpecularExp = 16.364
SpotLight = 1,1,1,1
SpotLightDir = 0.63626,0.5
HardShadow = 0.35385
ShadowSoft = 12.5806
Reflection = 0
Up = -0.49428,-0.0486637,1.24148
#endpreset

Слушай, работал с примером, случайно floor добавил. Образовалась интересная конструкция вверху на небе! двигаю плоскость по высоте - двигается и изменяется эта "сетка" Или это у меня глюк? Если нет - то этот эффект можно применить!

#include "IBL-Raytracer.frag"
#include "QuilezLib.frag"

 
// Just a simple test scene...
float DE(vec3 p)
{	
       p.xy=p.yx;
	float d = length(p+vec3(0.0,0.0,-0.25))-0.25;   //  sphere
	d= min(d, udRoundBox(p+vec3(0.2,1.0,-0.25),vec3(0.2),0.05)); // rounded box
	d =min(d, sdCone(p+vec3(1.,1.,-0.5),vec2(0.95,0.45))); // cone
	d = min(d, sdTorus88(p+vec3(-1.4,1.,-0.6),vec2(0.5,0.1))); // torus
	return min(p.z,d);// distance estimate
}
 
 
#preset Default
FOV = 0.58536
Eye = -1.99587,-2.50878,0.818229
Target = 2.25334,6.53152,0.352268
EquiRectangular = false
FocalPlane = 1
Aperture = 0
Gamma = 2.2685
ToneMapping = 3
Exposure = 0.82653
Brightness = 1
Contrast = 1
Saturation = 1
GaussianWeight = 1
AntiAliasScale = 2
Detail = -3.65484
FudgeFactor = 1
Dither = 0.5
NormalBackStep = 1
AO = 0,0,0,1
CamLight = 1,1,1,0
CamLightMin = 0
Glow = 1,1,1,0
GlowMax = 20
Fog = 0
SpecularMax = 100
DebugSun = true
BaseColor = 1,1,1
OrbitStrength = 0
X = 0.5,0.6,0.6,0.2126
Y = 1,0.6,0,0.30708
Z = 0.8,0.78,1,0.35434
R = 0.666667,0.666667,0.498039,0.03174
BackgroundColor = 1,1,1
GradientBackground = 0.4348
CycleColors = false
Cycles = 1.1
EnableFloor = true
FloorNormal = 0,0,0.51282
FloorHeight = 2.875
FloorColor = 1,1,1
DetailAO = -1.14289
MaxRaySteps = 198
BoundingSphere = 4.3373
Shadow = 0.70455
Background = Ditch-River_2k.hdr
Specular = Ditch-River_2k.hdr
Diffuse = Ditch-River_env.hdr
EnvSpecular = 1.8
EnvDiffuse = 0
Sun = 1.38949,1.02653
SunSize = 0.0045
RotateMap = 1,1
ShowFloor = true
TextureScale = 0
Up = 0.397732,0.852117,0.340157
#endpreset
Кому это надо?
- Никому не надо...
Кому это нужно?
- Никому не нужно...
Последнее редактирование: 5 года 7 мес. назад от SCORPION.
Администратор запретил публиковать записи гостям.
Отлично! сказали: androceus, AquaLena

Популяции фракталов 5 года 7 мес. назад #1432

  • Crist
  • Crist аватар
  • Вне сайта
  • Фракталы?... Да слышал.
  • Сообщений: 66
  • Сказали Отлично!: 157
  • Репутация: 12
Смутило то, что переменной d присваиваются вполне определённые значения (4 раза) и каким-то образом фраг запоминает, что это разные d и их надо все вместе вывести.
И пирамиду я сёдня сам нарисовал в "QuilezLib.frag" взял призму. Не спрашивай как, код страшный, но я это сделал )) Сначала получилась треугольная призма...
А вот пирамиду с треугольным основанием, тобиш правильный тетраэдр мучал долго, с углами заморочь, пока результата нет.

Еще заметил особенность - можно создавать фигуры как бы в двух режимах - отрисовывать их "в пустоте", либо делать пустые места в целиком заполненном пространстве.
Администратор запретил публиковать записи гостям.

Популяции фракталов 5 года 7 мес. назад #1434

  • SCORPION
  • SCORPION аватар
  • Вне сайта
  • Модератор я...
  • Всё получилось, а никто не заметил...(
  • Сообщений: 530
  • Сказали Отлично!: 464
  • Репутация: 38
Crist пишет:
Смутило то, что переменной d присваиваются вполне определённые значения (4 раза) и каким-то образом фраг запоминает, что это разные d и их надо все вместе вывести.
А это как раз не противоречит логике работы. Сначала обрабатывается одна строка, затем вторая и так далее. И фраг будет делать преобразования последовательно от строки к строке и в конце мы увидим итог всех преобразований.Crist пишет:
И пирамиду я сёдня сам нарисовал в "QuilezLib.frag" взял призму. Не спрашивай как, код страшный, но я это сделал )) Сначала получилась треугольная призма...
А вот пирамиду с треугольным основанием, тобиш правильный тетраэдр мучал долго, с углами заморочь, пока результата нет.
Сергей, ты давай делись и не говори "Не спрашивай". Буду спрашивать! А то притих там, сопит в одиночку. :lols:
Да, треугольной пирамиды у меня нету в библиотеке. Надо попробовать сделать. Если получится - выкладывай! Но тут будет посложнее. Четырёхугольная проще - она через команду abs рисуется, а вот как сделать треугольную?Crist пишет:
Еще заметил особенность - можно создавать фигуры как бы в двух режимах - отрисовывать их "в пустоте", либо делать пустые места в целиком заполненном пространстве.
А вот это интересно - поделись, я посмотрю.
Кому это надо?
- Никому не надо...
Кому это нужно?
- Никому не нужно...
Администратор запретил публиковать записи гостям.

Популяции фракталов 5 года 7 мес. назад #1439

  • Crist
  • Crist аватар
  • Вне сайта
  • Фракталы?... Да слышал.
  • Сообщений: 66
  • Сказали Отлично!: 157
  • Репутация: 12
Я не притих ) Сижу на DA в основном.
Вот пример вырезания пустоты. Было еще с кубом прикольно, но что-то не сохранил, а повторить не получается.

ВНИМАНИЕ: Спойлер! [ Нажмите, чтобы развернуть ]
Администратор запретил публиковать записи гостям.

Популяции фракталов 5 года 7 мес. назад #1441

  • SCORPION
  • SCORPION аватар
  • Вне сайта
  • Модератор я...
  • Всё получилось, а никто не заметил...(
  • Сообщений: 530
  • Сказали Отлично!: 464
  • Репутация: 38
На ком сидишь? Может и мне посидеть - ума набраться? :lols: :lols: :lols: :lols:
Блин, весь инет облазил и не нашёл пирамиды с треугольным основанием. Странно... Зато натаскал кое каких примитив, отсортирую, выложу всё в одном пресете, пригодится.
Ну не смех ли, всякие примитивы имеются, а трёхугольной пирамиды нету. И сам моск сломал делать... dsh3

P1.jpg


P.jpg


Вот примитивы - собрал все, какие нашёл, какие сам придумал...
ВНИМАНИЕ: Спойлер! [ Нажмите, чтобы развернуть ]



Кстати, Сергей, ты не проверял пресет с IBL -что там за фокусы с floor?
Кому это надо?
- Никому не надо...
Кому это нужно?
- Никому не нужно...
Последнее редактирование: 5 года 7 мес. назад от SCORPION.
Администратор запретил публиковать записи гостям.
Отлично! сказали: androceus

Популяции фракталов 5 года 7 мес. назад #1453

  • SCORPION
  • SCORPION аватар
  • Вне сайта
  • Модератор я...
  • Всё получилось, а никто не заметил...(
  • Сообщений: 530
  • Сказали Отлично!: 464
  • Репутация: 38
Вот он, тетрагедрон:
#include "DE-Raytracer.frag"

float  DE(vec3 z) {
  float d1 = dot(z,(vec3( 1.0,  1.0,  1.0)));
  float d2 = dot(z,(vec3 (1.0, -1.0, -1.0)));
  float d3 = dot(z,(vec3(-1.0  ,1.0, -1.0)));
  float d4 = dot(z,(vec3(-1.0, -1.0,  1.0)));
  return -min(min(min(d1, d2), d3), d4)-1;
}
Кому это надо?
- Никому не надо...
Кому это нужно?
- Никому не нужно...
Последнее редактирование: 5 года 7 мес. назад от SCORPION.
Администратор запретил публиковать записи гостям.
Отлично! сказали: androceus

Популяции фракталов 5 года 7 мес. назад #1458

  • Crist
  • Crist аватар
  • Вне сайта
  • Фракталы?... Да слышал.
  • Сообщений: 66
  • Сказали Отлично!: 157
  • Репутация: 12
Привет. В IBL это вспомогательная сетка чтоб определиться в пространстве, из той же оперы что и DebugSun для источника света.

Я тоже сдалал правильный тераэдр. Пока еле-еле умею пользоваться командами min и max. Как работает abs не знаю, но эта команда используется в скрипте. В основе шестигранная призма. Скрипт на работе остался, а повторить ту комбинацию я не смогу ) Как работает команда dot, тоже не знаю. Фигура как у тебя первая тоже получилась, но только треугольники пустые.
Оказывается фраг 0.9.12 работает на графике intel hd graphics 2000.

p.s. DA это сайт deviantART.
Администратор запретил публиковать записи гостям.

Популяции фракталов 5 года 7 мес. назад #1463

  • Crist
  • Crist аватар
  • Вне сайта
  • Фракталы?... Да слышал.
  • Сообщений: 66
  • Сказали Отлично!: 157
  • Репутация: 12
Вот такая игрушка получилась. И я понял, что программирование - это не моё :mskg:

ВНИМАНИЕ: Спойлер! [ Нажмите, чтобы развернуть ]

Администратор запретил публиковать записи гостям.
Отлично! сказали: SCORPION

Популяции фракталов 5 года 7 мес. назад #1476

  • SCORPION
  • SCORPION аватар
  • Вне сайта
  • Модератор я...
  • Всё получилось, а никто не заметил...(
  • Сообщений: 530
  • Сказали Отлично!: 464
  • Репутация: 38
Crist пишет:
Вот такая игрушка получилась. И я понял, что программирование - это не моё :mskg:
Сергей, а думаешь - моё? Да нифига! Вот бился с тетрагедроном и в правильном направлении, а записать всё ж не мог, пока меня не ткнули носом. Я её сразу немного упростил. По готовой то функции я уже могу свободно объяснить, что к чему, а вот с нуля трудновато... Но фрагментариум такая штука - тут и не надо быть программистом, а вот представлять что к чему надо. Чтобы DE - шки слепить в кучу, заставить всё это работать по новому. Иначе остаётся только крутить готовое...
Хорошенькая фигурка получилась. Я когда тетрагедрон изобретал - вот такую накрутил. Тоже прикольная:

TT.jpg


Тут фигура из двух треугольных оснований, повёрнутых относительно друг друга. Тоже случайно вышла и пусть будет .
ВНИМАНИЕ: Спойлер! [ Нажмите, чтобы развернуть ]


Сейчас твою покрутил - супер! А говоришь - не твоё! Отличная геометрика! Кроме того - пустотелая! В общем, такой пустотелой геометрики для фрагментариума я не видел ещё! Отплюсовал в репутацию! :clpn: :clpn: :clpn: :clpn:
Кому это надо?
- Никому не надо...
Кому это нужно?
- Никому не нужно...
Последнее редактирование: 5 года 7 мес. назад от SCORPION.
Администратор запретил публиковать записи гостям.
Отлично! сказали: androceus

Популяции фракталов 5 года 7 мес. назад #1502

  • Crist
  • Crist аватар
  • Вне сайта
  • Фракталы?... Да слышал.
  • Сообщений: 66
  • Сказали Отлично!: 157
  • Репутация: 12
Прикольно )
Вот мои издевательства над кодом, не успокоился, пока не сделал правильный тетраэдр :mlne: dsh3 :mlne: dsh3 :gmr2: Цифра 0.57735 из формулы шестиугольной призмы. Именно она даёт заветные 60 градусов в плоскости. Если тебе нечего будет делать, может попробуешь как-то упростить код? Хотя твой вариант более "програмерский" чтоли и красивее смотрится )
#include "DE-Raytracer-v0.9.1.frag"
#group Geometry

uniform float s; slider[0,4,10]
uniform float h; slider[0,2,10]
 
 
 
float DE( vec3 p )
{	
      vec3  q = abs(p);
	float obj =max(max(q.x-q.y*0.57735+1,-h),q.y-s);
	float t = max(max(obj,p.y),p.z);
	return max(t+q.z*0.42265,-q.z);
 
}
 
 
#preset Default
FOV = 0.3
Eye = -0.581905,-2.66729,-6.70652
Target = 0.275266,-2.4546,3.25441
Detail = -3.30771
DetailAO = -0.5
FudgeFactor = 1
MaxRaySteps = 100
BoundingSphere = 12
Dither = 1
NormalBackStep = 1
SpotLight = 1,1,1,0.4
SpotLightDir = -0.125,0.1
CamLight = 1,1,1,0.52942
BaseColor = 1,1,1
BackgroundColor = 0.6,0.6,0.6
s = 4
h = 2
Up = 0,1,0
#endpreset
Последнее редактирование: 5 года 7 мес. назад от Crist.
Администратор запретил публиковать записи гостям.

Популяции фракталов 5 года 7 мес. назад #1515

  • SCORPION
  • SCORPION аватар
  • Вне сайта
  • Модератор я...
  • Всё получилось, а никто не заметил...(
  • Сообщений: 530
  • Сказали Отлично!: 464
  • Репутация: 38
Ага, мой код более правильный и легко объясняемый. Четыре плоскости с коодинатами вершин.
Твой код какой то странный... Непонятная цифра - если в радианах, должно быть 0.5236, это 30 градусов.
В возврате вообще непонятно окуда взявшаяся цифра - 24 градуса 12 минут. Самое странное, это работает и непонятно как! :lols: :lols: :lols:
Кому это надо?
- Никому не надо...
Кому это нужно?
- Никому не нужно...
Администратор запретил публиковать записи гостям.

Популяции фракталов 5 года 7 мес. назад #1520

  • Alef
  • Alef аватар
  • Вне сайта
  • Фракталю потихоньку
  • Сообщений: 133
  • Сказали Отлично!: 153
  • Репутация: 14
Почитал эту тему и наконец понял, что такое DIFS на мандельбульбе. Там целый класс формул, которые так размножают. Я понимаю, вся разница только что там вместо кругов какая то фигура.
Администратор запретил публиковать записи гостям.

Популяции фракталов 5 года 6 мес. назад #1530

  • Crist
  • Crist аватар
  • Вне сайта
  • Фракталы?... Да слышал.
  • Сообщений: 66
  • Сказали Отлично!: 157
  • Репутация: 12
Вопрос как теперь их размножить, но в фрактальном смысле, а не линейно по осям...
Администратор запретил публиковать записи гостям.

Популяции фракталов 5 года 6 мес. назад #1559

  • SCORPION
  • SCORPION аватар
  • Вне сайта
  • Модератор я...
  • Всё получилось, а никто не заметил...(
  • Сообщений: 530
  • Сказали Отлично!: 464
  • Репутация: 38
Никак до меня не доходит смысл фразы " в фрактальном смысле". :dntknw:
Сергей, ты наверное, имел в виду хаотичный разброс в пространстве? Над этим надо подумать.
Кстати, наткнулся на твой вопрос в блоге Suntopia
blog.hvidtfeldts.net/index.php/2011/08/d...s-iii-folding-space/
И по ссылочке прошёл. Странно, в твоём варианте у меня тоже фигня со сферами.
А вот по ссылочке работает более-менее нормально.
#define providesColor
#include "DE-Raytracer.frag"

//uniform int MaxRaySteps1; slider[1,164,500];
uniform float MinimumDistance; slider[0.0001,0.001,1];
uniform float Radius; slider[0.05,0.3,1.5];
uniform float Frequency; slider[1.0,2.0,20.0];
uniform float Amplitude; slider[0.5,2,4];
 
uniform float time;
 
float DE(vec3 pos) {
	vec2 cell = floor(pos.xy) * 0.2;
	pos.xy = fract(pos.xy) - 0.5;
 
	pos.z += sin(cell.x * Frequency + time) * cos(cell.y * Frequency + time) * Amplitude;
 
	return length(pos) - Radius;
}
 
vec3 baseColor(vec3 from, vec3 dir) {
	float totalDistance = 0.0;
	int steps;
	for (steps = 0; steps < MaxRaySteps; steps++) {
		vec3 p = from + totalDistance * dir;
		float distance = DE(p);
 
		totalDistance += distance;
		if (distance < MinimumDistance) {
			break;
		}
	}
 
	return vec3(1.0 - float(steps) / float(MaxRaySteps));
}
 
#preset default
FOV = 0.4
Eye = 0.794054,10.2844,2.4416
Target = 0.0552533,0.581655,0.13689
Up = 0.03278,0.09836,1
EquiRectangular = false
FocalPlane = 1
Aperture = 0
Gamma = 2
ToneMapping = 4
Exposure = 1
Brightness = 1
Contrast = 1
Saturation = 1
GaussianWeight = 1
AntiAliasScale = 2
Detail = -3.85322
DetailAO = -0.5
FudgeFactor = 0.13924
MaxRaySteps = 1322
Dither = 0.70909
NormalBackStep = 1
AO = 0,0,0,0.7
Specular = 0.4
SpecularExp = 16
SpecularMax = 10
SpotLight = 1,1,1,0.4
SpotLightDir = 0.1,0.1
CamLight = 1,1,1,1
CamLightMin = 0
Glow = 1,1,1,0
GlowMax = 20
Fog = 0
HardShadow = 0
ShadowSoft = 2
Reflection = 0
DebugSun = false
SunColor = 1,1,1
BaseColor = 1,1,1
OrbitStrength = 0
X = 0.5,0.6,0.6,0.7
Y = 1,0.6,0,0.4
Z = 0.8,0.78,1,0.5
R = 0.4,0.7,1,0.12
BackgroundColor = 0.6,0.6,0.45
GradientBackground = 0.3
CycleColors = false
Cycles = 1.1
EnableFloor = false
FloorNormal = 0,0,1
FloorHeight = 0
FloorColor = 1,1,1
MinimumDistance = 0.20698
Radius = 0.34813
Frequency = 9.57318
Amplitude = 2
#endpreset

Я к чему? Может быть как то отсюда выудить принцип хаотического раскидывания? Ну и я ещё пошукаю...
Кому это надо?
- Никому не надо...
Кому это нужно?
- Никому не нужно...
Администратор запретил публиковать записи гостям.
Отлично! сказали: Crist

Популяции фракталов 5 года 6 мес. назад #1599

  • Crist
  • Crist аватар
  • Вне сайта
  • Фракталы?... Да слышал.
  • Сообщений: 66
  • Сказали Отлично!: 157
  • Репутация: 12
Круто! Хаотично это тоже интересно, но в твоём коде хаотичности нет, там вполне нормальная такая упорядоченность.
А размножить в "фрактальном смысле", ну вот к примеру pseudo-kleinian. Просто к примеру, не надо зацисливаться именно на нём, ну вот в нём всё геометрическое разнообразие выстраивается вокруг сферы. Почему бы на заменить её на тетраэдр или другую фигуру, но принцип именно построения фрактала чтобы остался. И всё упорядочено и очень красиво, как и в любом фрактале.
Администратор запретил публиковать записи гостям.

Популяции фракталов 5 года 6 мес. назад #1625

  • SCORPION
  • SCORPION аватар
  • Вне сайта
  • Модератор я...
  • Всё получилось, а никто не заметил...(
  • Сообщений: 530
  • Сказали Отлично!: 464
  • Репутация: 38
Сергей, то ли я тупой стал, но до меня с трудом доходит смысл тобой сказанного. dsh3
Может, ты имеешь в виду как бы не отдельные DE - готовые функции и работу по смешиванию, вычитанию оных. Оно, конечно, интересно, но получается, что сами то DE остаются неизменными. А вот в pseudo-kleinian есть внедрение одного DE в другое. Но ведь об этом самом я давно говорил на деми. И для пробы внедрил в код квантерниона код мандельбульба. Но поддержки не получил. :clll:
Вот тут:

fractalus.ru/forum/fragmentarium/85-gibridnye-fraktaly#1639

Но ведь так можно много экспериментов произвести и с самыми разными фракталами. Не всё удачно будет, но что то же должно получиться...
Кому это надо?
- Никому не надо...
Кому это нужно?
- Никому не нужно...
Последнее редактирование: 5 года 6 мес. назад от SCORPION.
Администратор запретил публиковать записи гостям.

Популяции фракталов 5 года 6 мес. назад #1636

  • Crist
  • Crist аватар
  • Вне сайта
  • Фракталы?... Да слышал.
  • Сообщений: 66
  • Сказали Отлично!: 157
  • Репутация: 12
Всё так как по сылке. Не видел этого материала. На работе почитаю.
Если есть удачные комбинации, выложи. Я один пак сделал, готовлю второй. Пока особо спросом не пользуется, но один товарищ там крутые виды нашёл.
Сейчас всего пара новых фрактальных пресетов, эта пирамида мне покоя не даёт, хочу с ней что-нить придумать... типа бульб в виде пирамиды ну или как-то так
Администратор запретил публиковать записи гостям.

Популяции фракталов 5 года 6 мес. назад #1638

  • SCORPION
  • SCORPION аватар
  • Вне сайта
  • Модератор я...
  • Всё получилось, а никто не заметил...(
  • Сообщений: 530
  • Сказали Отлично!: 464
  • Репутация: 38
Ну вот, не видел он.... А я на тебя надеялся, думал, что ты прочитал, но не заинтересовался ... ну и я бросил всё.... dsh3
За пак спасибо, только я понял, что интересные виды - это не моё... Фантазии нету, всё хочется какую то пейзажную композицию сделать, ещё видюха не тянет. Ппц, в общем...(((((
Кому это надо?
- Никому не надо...
Кому это нужно?
- Никому не нужно...
Последнее редактирование: 5 года 6 мес. назад от SCORPION.
Администратор запретил публиковать записи гостям.
Модераторы: SCORPION
Время создания страницы: 1.198 секунд
1. Erik_Wollo-Blue_Radiance Play
2. Astropilot_Solar Walk IV Play
3. GERMIND _ Cosmicleaf Records Series Vol.14 Play
4. Kyoto_-_Bodhisattva_(Original_Mix) Play
5. Play