[ Новые сообщения · Участники · Правила форума · Поиск · RSS ]
  • Страница 1 из 1
  • 1
Модератор форума: SCORPION  
Fragmentarium - Raytracers
SCORPIONДата: Четверг, 12-Сен-2013, 03:00 | Сообщение # 1
Орден Рендера всея Руси
Группа: Администраторы
Сообщений: 1120
Репутация: 10103
Статус: Оффлайн/Offline
Что такое Raytracer в фрагментариуме? Это способ отображения, отрисовки фрактала. Иными словами, перевод формул-чисел в изображения. Во фрагментариуме визуализация осуществляется графическим процессором видеокарты. И Raytracer - ы описывают алгоритм отображения. Во фрагментариуме Raytracer - ов несколько, все имеют свои особенности, один и тот же фрактал в кодо-числовом выражении при применении различный рейтрейсеров может выглядеть абсолютно по разному.
Вот этому то и посвящена эта тема!


Чем больше я узнаю людей, тем больше люблю собак!
 
FrankyДата: Четверг, 19-Сен-2013, 20:28 | Сообщение # 2
Творческая личность
Группа: Старожил
Сообщений: 37
Репутация: 17
Статус: Оффлайн/Offline
Трассировщики лучей (raytracers)...Их много, они все разные, по разному представляют фрактал. Самый интересный в плане использования разных эффектов и получения ну просто огромного бесчисленного спектра всевозможных сцен - это DE-raytracer (distance estimator - метод построения 3Д фрактала, основанный на оценке расстояний). Если интересно, читаем фракталфорум и тут много интересного. Но есть один нюанс - там всё на инглише (
Трассировщики - готовые файлы, их можно подключать к любому 3Д фракталу.
Вот применрый список в одной из сборок программы


Подключаются тассировщики в окне ввода параметров.
Просто вписываем имя нужного файла. Build - в основном окне и apply в окне ввода параметров - происходит перестройка фрактала и применение параметров по умолчанию нового трассировщика.
Вид сцены по-умолчанию:


Вид с трассировщиком из фрагментариума версии v0.9.1


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

Возможности стандартного (нового) DE:


Возможности старого DE


Новый стандартный DE имеет прогрессивный режим отрисовки, целую новую вкладку Post, эффект DOF - фокусировка и размытие и т.д. - все это взято из старенького Soft-raytracer. По сути, новый DE - это старый DE+Soft.
Сарый DE, мне признаться нравился больше, его плюсы - он не использует прогрессивный режим, вследствии чего быстрее рисует фрактал и быстрее его рендерит. Картинка абсолютно идеальная, нет этого мелкого противного шума от прогрессивного режима. Есть сглаживание - как в играх - AA - убирает лесенку на каях объектов. И еще в этом DE фракталы получаются глянцевые, можно очень просто смоделировать эффект стекла или металла.
Прикрепления: 9724643.jpg (31.5 Kb) · 9855102.jpg (48.8 Kb) · 0970633.jpg (180.9 Kb) · 1252145.jpg (205.8 Kb) · 5878498.jpg (94.2 Kb)


Сообщение отредактировал Franky - Четверг, 19-Сен-2013, 20:32
 
FrankyДата: Четверг, 19-Сен-2013, 20:40 | Сообщение # 3
Творческая личность
Группа: Старожил
Сообщений: 37
Репутация: 17
Статус: Оффлайн/Offline
Пока писал всё это, в очередной раз увлекся и кое-что накрутил. Картинка вся целиком состоит из отражений самой себя.

Какое-то галюциногенное буйство цветов


Кусок той же картинки в масштабе 1:1


зы. Покрутил камеру и джулию, блин, была бы прикольная анимация... Владимир, может займешься? smile

код скрипта
Код
#info Mandelbulb Distance Estimator
#define providesInit
#include "DE-Raytracer-v0.9.1.frag"
#include "MathUtils.frag"
#group Mandelbulb

// Number of fractal iterations.
uniform int Iterations;  slider[0,9,100]

// Number of color iterations.
uniform int ColorIterations;  slider[0,9,100]

// Mandelbulb exponent (8 is standard)
uniform float Power; slider[0,8,16]

// Bailout radius
uniform float Bailout; slider[0,5,30]

// Alternate is slightly different, but looks more like a Mandelbrot for Power=2
uniform bool AlternateVersion; checkbox[false]

uniform vec3 RotVector; slider[(0,0,0),(1,1,1),(1,1,1)]

uniform float RotAngle; slider[0.00,0,180]

mat3 rot;
uniform float time;
void init() {
   rot = rotationMatrix3(normalize(RotVector), RotAngle);
        float dummy = time*10.0;
}

// This is my power function, based on the standard spherical coordinates as defined here:
// http://en.wikipedia.org/wiki/Spherical_coordinate_system
//
// It seems to be similar to the one Quilez uses:
// http://www.iquilezles.org/www/articles/mandelbulb/mandelbulb.htm
//
// Notice the north and south poles are different here.
void powN1(inout vec3 z, float r, inout float dr) {
  // extract polar coordinates
  float theta = acos(z.z/r);
  float phi = atan(z.y,z.x);
  dr =  pow( r, Power-1.0)*Power*dr + 1.0;
   
  // scale and rotate the point
  float zr = pow( r,Power);
  theta = theta*Power;
  phi = phi*Power;
   
  // convert back to cartesian coordinates
  z = zr*vec3(sin(theta)*cos(phi), sin(phi)*sin(theta), cos(theta));
}

// This is a power function taken from the implementation by Enforcer:
// http://www.fractalforums.com/mandelbulb-implementation/realtime-renderingoptimisations/
//
// I cannot follow its derivation from spherical coordinates,
// but it does give a nice mandelbrot like object for Power=2
void powN2(inout vec3 z, float zr0, inout float dr) {
  float zo0 = asin( z.z/zr0 );
  float zi0 = atan( z.y,z.x );
  float zr = pow( zr0, Power-1.0 );
  float zo = zo0 * Power;
  float zi = zi0 * Power;
  dr = zr*dr*Power + 1.0;
  zr *= zr0;
  z  = zr*vec3( cos(zo)*cos(zi), cos(zo)*sin(zi), sin(zo) );
}

uniform bool Julia; checkbox[false]
uniform vec3 JuliaC; slider[(-2,-2,-2),(0,0,0),(2,2,2)]

// Compute the distance from `pos` to the Mandelbox.
float DE(vec3 pos) {
  vec3 z=pos;
  float r;
  float dr=1.0;
  int i=0;
  r=length(z);
  while(r<Bailout && (i<Iterations)) {
   if (AlternateVersion) {
    powN2(z,r,dr);
   } else {
    powN1(z,r,dr);
   }
   z+=(Julia ? JuliaC : pos);
   r=length(z);
   z*=rot;
   if (i<ColorIterations) orbitTrap = min(orbitTrap, abs(vec4(z.x,z.y,z.z,r*r)));
   i++;
  }
//    if ((type==1) && r<Bailout) return 0.0;
  return 0.5*log(r)*r/dr;
  /*
  Use this code for some nice intersections (Power=2)
  float a =  max(0.5*log(r)*r/dr, abs(pos.y));
  float b = 1000;
  if (pos.y>0)  b = 0.5*log(r)*r/dr;
  return min(min(a, b),
   max(0.5*log(r)*r/dr, abs(pos.z)));
  */
}

#preset default
FOV = 0.68488
Eye = -0.0108381,0.497412,0.994005
Target = 5.94307,-3.64808,-4.09466
Detail = -2.95414
DetailAO = -1.6092
FudgeFactor = 1
MaxRaySteps = 747
Dither = 1
NormalBackStep = 1
AO = 0,0,0,0.85185
SpecularExp = 1.887
SpotLight = 1,0,0.917647,1
SpotLightDir = -0.09678,0.58064
CamLight = 0,1,0.74902,2
CamLightMin = 0.75
Glow = 0.537255,0.00392157,1,1
GlowMax = 84
Fog = 0
HardShadow = 0
ShadowSoft = 0
Reflection = 1
BaseColor = 1,0,0
OrbitStrength = 1
X = 0.952941,1,0,0.61616
Y = 0.345098,0.666667,0,0.02912
Z = 0,0.0666667,1,0.67676
R = 0.0784314,1,0.941176,-0.2449
BackgroundColor = 0,0.823529,0.866667
GradientBackground = 1.1905
CycleColors = true
Cycles = 10.2021
EnableFloor = false
FloorNormal = 0,0,0
FloorHeight = 0
FloorColor = 1,1,1
Iterations = 2
ColorIterations = 2
Power = 14.136
Bailout = 5.3466
AlternateVersion = true
RotVector = -0.8,1,1
RotAngle = 127.951
Julia = true
JuliaC = 0.95328,-0.28036,0
AntiAlias = 1
BoundingSphere = 12
Specular = 10
Up = 0.379655,0.170153,0.305594
#endpreset
Прикрепления: 5119406.jpg (302.7 Kb) · 7674814.jpg (225.1 Kb)
 
SCORPIONДата: Пятница, 20-Сен-2013, 02:49 | Сообщение # 4
Орден Рендера всея Руси
Группа: Администраторы
Сообщений: 1120
Репутация: 10103
Статус: Оффлайн/Offline
Цитата (Franky)
Новый стандартный DE имеет прогрессивный режим отрисовки, целую новую вкладку Post, эффект DOF - фокусировка и размытие и т.д. - все это взято из старенького Soft-raytracer. По сути, новый DE - это старый DE+Soft.

Franky, Чёт я запутался - какой новый DE, какой старый DE. Уточни пожалуйста.
Цитата (Franky)
Покрутил камеру и джулию, блин, была бы прикольная анимация... Владимир, может займешься?

Так если займусь, это же будет по МОЕМУ, а не так, как ты задумал... У тебя не так и не заработали F7 и F8?


Чем больше я узнаю людей, тем больше люблю собак!
 
FrankyДата: Пятница, 20-Сен-2013, 08:12 | Сообщение # 5
Творческая личность
Группа: Старожил
Сообщений: 37
Репутация: 17
Статус: Оффлайн/Offline
Цитата (SCORPION)
Franky, Чёт я запутался - какой новый DE, какой старый DE. Уточни пожалуйста.

Всё просто
Старый DE работает в обычном (не прогрессивном) режиме и у него есть опция AntiAliasing.
Новый - в прогрессивном, антиалиасинга нет и есть эфекты от Soft-raytracer (Post, Aperture/Focal plane)

Цитата (SCORPION)
Так если займусь, это же будет по МОЕМУ, а не так, как ты задумал...
Я просто предложил пресет, если неинтересно, то я ж не заставляю smile Пресет этот в картинке не передает всего многообразия, в анимации видно как работают отражения.

Цитата (SCORPION)
У тебя не так и не заработали F7 и F8?
Еще не пробовал ту ссылку, что ты мне в последний раз кинул. Даже не знаю когда займусь...
 
ElenaLightДата: Среда, 16-Окт-2013, 01:34 | Сообщение # 6
Неофит
Группа: Пользователи
Сообщений: 14
Репутация: 0
Статус: Оффлайн/Offline
Цитата Franky ()
Картинка вся целиком состоит из отражений самой себя.

Franky, красота! respect
Как я люблю стекло и отражения... yes

Цитата Franky ()
Пресет этот в картинке не передает всего многообразия, в анимации видно как работают отражения.

facepalm shutup biggrin
 
FrankyДата: Вторник, 29-Окт-2013, 14:02 | Сообщение # 7
Творческая личность
Группа: Старожил
Сообщений: 37
Репутация: 17
Статус: Оффлайн/Offline
Сегодня расскажу про то, как влиять на скорость работы фрагментариума (далее и везде просто "фраг").

На рендер, то есть его скорость, слишком сильно влияют параметры Dithering, MaxRaysteps, HardShadow, Reflection, Detail и число итераций фрактала (детализация уровней прорисовки Scale, Size, Iterations- у разных фракталов называется по разному). Но больше всего замедляет процесс прогрессивный рендеринг (progressive (continuous) mode) 
Особенно просадка скорости ощущается при работе с анимацией, с чем я и столкнулся. Чтобы по максимуму использовать высокую производительность фрага надо определиться, а нужны ли нам эти или те эффекты вообще. Если эффект размытия при малой глубине резкости не нужен, советую отказаться от трассировщиков, использующих исключительно этот режим. Да, вы потеряете очень вкусную вкладку "post", но эт не очень важно - цвета можно выровнять в редакторе изображений.
Можно юзать всё - если это визуально даст вам нужный результат. Разные комбирации эффектов дают разнообразные варианты.
Есть зависимости, если включить тени( HardShadow), становится неактивной Specular (эффект металлического блеска), притупляется эффект отражений  Reflection.
Если уменьшать  MaxRaysteps, картинка светлеет, становится больше отражений. - подобное происходит ползунком FudgeFactor.
DetailAO и AO(цвет) - затенения, убирают лишний свет, добавляют мягкие тени если выкрутить много, при использовании с Reflection очень красиво )
Dithering сглаживает границы соседних полигонов, выравнивая из цвет, тон и наложенные эффекты. Делает картинку чище, избавляет от шума, но в случае низкого  MaxRaystepsи высокого  Reflection при включенном затенении может дать много шума.
Параметр SoftShadow немного избавляет полигоны от теней, оставляя места без теней со всеми эффектами, а места с тенями выглядят действительно реалистично.

Можно не использовать   HardShadow, а добиться затенения через АО, можно ограничить по минимуму   MaxRaysteps - результат будет интересный.  Detail - помимо увеличения детализации, влияет на геометрию фрактала, слишком низкие значения чень сильно тормозят рендеринг, если визуально фрактал не меняется, ставьте максимально возможный  Detail.

Есть скоростные трассировщики (DE версии 0.9.1) он не использует  progressive  mode, функционал практически совпадает с DE последней версии.


Сообщение отредактировал Franky - Вторник, 29-Окт-2013, 14:07
 
SCORPIONДата: Воскресенье, 10-Ноя-2013, 17:40 | Сообщение # 8
Орден Рендера всея Руси
Группа: Администраторы
Сообщений: 1120
Репутация: 10103
Статус: Оффлайн/Offline
Новые возможности работы с цветом в фрагментариуме!
Для этого понадобятся два файла ColorPalette.frag и ColorPalette2.frag, которые необходимо скопировать в папку в директории программы по пути: (у меня так, у вас будет другой)

D:\Fractals\Fragmentarium-Desktop_Qt_5_1_1_MinGW_32bit-Release NEW\Examples\Include

Вот эти два файла и файл примера:

http://yadi.sk/d/8eASuWodCSZqw

Чтобы работать с новым цветовым решением, нужно сделать следующее:

1. добавить выше строки #include "DE-Raytracer.frag"
Строку #include "ColorPalette.frag"

2. Добавить слайдеры:

uniform float MinRad2; slider[0,0.25,2.0]
uniform float Scale; slider[-3.0,1.3,3.0]
uniform vec3 Trans; slider[(-5,-5,-5),(0.5,0.5,0.5),(5,5,5)]

3. Приписать в конец скрипта:

float Coloring(vec3 p) {
float expsmooth=0.0;
float r1 = 0.0, r2 = 0.0;
for (int i=0; i<ColorIterations; i++) {
p*=rot;
p=abs(p)+Trans;
r1 = r2;
r2 = dot(p, p);
p *= clamp(max(MinRad2/r2, MinRad2), 0.0, 1.0);
p = p* Scale/MinRad2 + Julia;
expsmooth+=exp(-1.0/abs(r1-r2));
}
return expsmooth;
}

Вот пресет по умолчанию, с изменениями:



Код
#info Mandelbulb Distance Estimator
#define providesInit
#include "ColorPalette.frag"
#include "DE-Raytracer.frag"
#include "MathUtils.frag"
#group Mandelbulb

uniform int Iterations;  slider[0,9,100]

uniform float MinRad2;  slider[0,0.25,2.0]
uniform float Scale;  slider[-3.0,1.3,3.0]
uniform vec3 Trans; slider[(-5,-5,-5),(0.5,0.5,0.5),(5,5,5)]

uniform int ColorIterations;  slider[0,9,100]
uniform float Power; slider[0,8,16]
uniform float Bailout; slider[0,5,30]

uniform bool AlternateVersion; checkbox

[false]uniform vec3 RotVector; slider[(0,0,0),(1,1,1),(1,1,1)]

uniform float RotAngle; slider[0.00,0,180]

mat3 rot;
uniform float time;
void init() {
    rot = rotationMatrix3(normalize(RotVector), RotAngle);
         float dummy = time*10.0;
}

void powN1(inout vec3 z, float r, inout float dr) {
   // extract polar coordinates
   float theta = acos(z.z/r);
   float phi = atan(z.y,z.x);
   dr =  pow( r, Power-1.0)*Power*dr + 1.0;
     
   // scale and rotate the point
   float zr = pow( r,Power);
   theta = theta*Power;
   phi = phi*Power;
     
   // convert back to cartesian coordinates
   z = zr*vec3(sin(theta)*cos(phi), sin(phi)*sin(theta), cos(theta));
}

void powN2(inout vec3 z, float zr0, inout float dr) {
   float zo0 = asin( z.z/zr0 );
   float zi0 = atan( z.y,z.x );
   float zr = pow( zr0, Power-1.0 );
   float zo = zo0 * Power;
   float zi = zi0 * Power;
   dr = zr*dr*Power + 1.0;
   zr *= zr0;
   z  = zr*vec3( cos(zo)*cos(zi), cos(zo)*sin(zi), sin(zo) );
}

uniform bool Julia; checkbox
[false]uniform vec3 JuliaC; slider[(-2,-2,-2),(0,0,0),(2,2,2)]

// Compute the distance from `pos` to the Mandelbox.
float DE(vec3 pos) {
   vec3 z=pos;
   float r;
   float dr=1.0;
   int i=0;
   r=length(z);
   while(r<Bailout && (i<Iterations)) {
    if (AlternateVersion) {
     powN2(z,r,dr);
    } else {
     powN1(z,r,dr);
    }
    z+=(Julia ? JuliaC : pos);
    r=length(z);
    z*=rot;
    if (i<ColorIterations) orbitTrap = min(orbitTrap, abs(vec4(z.x,z.y,z.z,r*r)));
    i++;
   }

   return 0.5*log(r)*r/dr;
     
}

float Coloring(vec3 p) {
   float expsmooth=0.0;
   float r1 = 0.0, r2 = 0.0;
   for (int i=0; i<ColorIterations; i++) {
    p*=rot;
    p=abs(p)+Trans;
    r1 = r2;
    r2 = dot(p, p);
    p *= clamp(max(MinRad2/r2, MinRad2), 0.0, 1.0);    
    p = p* Scale/MinRad2 + Julia;
    expsmooth+=exp(-1.0/abs(r1-r2));   
   }
   return expsmooth;
}

#preset New Color
FOV = 0.76422
Eye = -0.00136391,0.411925,-1.1499
Target = -0.0271628,-1.78969,3.81274
EquiRectangular = false
FocalPlane = 0.7065
Aperture = 0.00364
Gamma = 1
ToneMapping = 1
Exposure = 1
Brightness = 1
Contrast = 1
Saturation = 1
GaussianWeight = 1
AntiAliasScale = 2
Detail = -3.40711
DetailAO = -1.7857
FudgeFactor = 0.68224
MaxRaySteps = 522
Dither = 0.51754
NormalBackStep = 1
AO = 0,0,0,0.81481
Specular = 0.02353
SpecularExp = 20
SpecularMax = 10
SpotLight = 1,1,1,0.58824
SpotLightDir = -0.46874,-0.1875
CamLight = 1,1,1,0.26924
CamLightMin = 0
Glow = 1,1,1,0.26027
GlowMax = 151
Fog = 1.25
HardShadow = 0
ShadowSoft = 2
Reflection = 0
DebugSun = false
BaseColor = 1,1,1
OrbitStrength = 0.64384
X = 0.5,0.6,0.6,-0.13132
Y = 1,0.6,0,-0.0707
Z = 0.8,0.78,1,-0.33334
R = 0.4,0.7,1,0.04092
BackgroundColor = 0.266667,0.447059,0.529412
GradientBackground = 0
CycleColors = true
Cycles = 4.20389
EnableFloor = false
FloorNormal = 0,0,1
FloorHeight = 0
FloorColor = 1,1,1
Color1 = 0,0.666667,0
Color2 = 0,0,1
Color3 = 1,0,0
ColorDensity = 0.67949
ColorOffset = 8.961
Iterations = 21
ColorIterations = 81
Power = 11.5349
Bailout = 3.2142
AlternateVersion = true
RotVector = 0.92,1,0.34667
RotAngle = 171.819
Julia = true
JuliaC = 0.93332,0.04444,-0.35556
MinRad2 = 0.93828
Scale = -1.25808
Up = -0.00550623,-0.977125,0.212596
Trans = 1.5217,0.1087,-2.5
#endpreset
Прикрепления: 1325914.jpg (313.6 Kb)


Чем больше я узнаю людей, тем больше люблю собак!
 
  • Страница 1 из 1
  • 1
Поиск: