Войти
ПрограммированиеФорумГрафика

::3D Software rendering contest [finished]:: (61 стр)

Advanced: Тема повышенной сложности или важная.

Страницы: 160 61 62 6366 Следующая »
#900
16:21, 6 мая 2011

SNVampyre
32 выборки против 10 миллионов выборок. Вот 1536 в секунду. И за 27 минут. На 4 пне с 2.3 Гигагерца. А тут у людей работал пару часов комп и ничего особенного.
Изображение

#901
17:05, 6 мая 2011

Давно дело было:
pt | ::3D Software rendering contest [finished]::

#902
17:10, 6 мая 2011

Ignis
> 32 выборки против 10 миллионов выборок
Попробуй внимтельно прочитать мой пост и подумать всё-таки.

#903
20:17, 6 мая 2011

SNVampyre
простите, сглупил :3

#904
20:41, 6 мая 2011

у меня проблема была ))  Вектор отражения я вообще не правильно считал!  Да и посчитанные значения если бы и были верными не правильно бы применились из за опечатки!  + я вообще не юзал BRDF функцию )    Скоро будет апдейт с оптимизацией и правильным освещением : )

#905
3:14, 7 мая 2011

Кто детально расскажет как собсно применять BRDF ?  Абсолютно матовые поверхности рендерятся отлично, однако как сделать зеркальные я так и не понял.  Точнее я понимаю что нужна функция BRDF  например тот же Blinn-Phong. с помощью которой можно рассчитать насколько близко отражение в конкретном рендеомном луче к идеальному. Но как это всё применить?  Я просто умножал результат отражения на BRDF!    И это частично правильно, однако зеркальная сфера, посреди хорошо освещённой матовой комнаты  всёравно у меня чёрная.  И дело именно в умножении на brdf.  Т.е.  Если мне нужно идеальное зеркало, то лучи, которые не параллельны идеальному углу отражения отсеиваются и общая энергия от всех лучей в данной точке меньше, чем надо.


Собсно приведите, пожалуйста, пример кода BRDF функции с коэффаициентами и её применение и я раскурю/пойму. А то что-то запутался. : (


Ну, я то сам, конечно, сделал отражения )  Но как я понимаю через жуткий костыль:


Как я сделал отражения:

1. VRand = генерю рендомный вектор внутри полусферы нормали точки пересечения объекта. 
2. VRefl = отражаю вектор, с которым производился рейкаст относительно нормали - получаю вектор отражения идеального зеркала.
3. линейно интерполирую предыдущие 2 вектора в зависимости от значения roughness поверхности.    тоесть итоговый вектор - VResult = lerp(VRefl, VRand,  roughness),  и потом конечно результат нормализую

Вот  всё моё зеркало.  Но это же фигня, да?  Как правильно?

#906
3:35, 7 мая 2011

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

#907
10:03, 7 мая 2011

Suslik
Тоесть я, можно сказать, сделал правильно? (хоть и грубо)  Я сгенерил пучок лучей  и повернул их ближе к вектору отражения в зависимости от значения roughness (шероховатости)

Suslik
> при отражении от поверхности надо генерить лучи не в рандомных направлениях а с
> распределением, соответствующим BRDF твоей поверхности.
так как  "правильней" это делать?

#908
12:11, 7 мая 2011

.L
> Вот всё моё зеркало. Но это же фигня, да? Как правильно?
Ну по-разному можно делать. Если это идеальное зеркало то вообще не надо считать по вероятности отражение, вегда считаешь идеальное.
А обычно так делают:

float theta = rnd(0,kd+ks);
if(theta > kd)
{
  specular reflection;
} 
else
{
  diffuse reflection;
}
#909
12:19, 7 мая 2011

FROL
это да, понятно уже )  А вот как "правильно" делать не идеальное зеркало?  как в после 901 снизу слева матовый зеркальный шарик...      Я то могу своим методом сделать но ээ..  хочу правильно ж сделать )

#910
13:35, 7 мая 2011

.L
Да не мне кажется у тебя норм. должно получиться. glossy reflections так и делаются.

#911
13:57, 7 мая 2011

FROL
Ну впринципе да )  Только одно смущает - на центральной зеркальной сфере на отраженияхъ стен какие-то яркие точки. Вроде деления на ноль ни где нет ..хмм

#912
15:19, 7 мая 2011
сделал чуть матовое отражение!  Да ёмаё! Откуда эти "дыры" на сферах?  На отражениях сильно заметны!  Я понимаю откуда этот шум повсеместный но на сферах эта жесть не исчезает со временем. Пиксели так и остаются чёрными.. wtf
#913
15:55, 7 мая 2011

всё, разобрался откуда дырки. Гениально и просто

#914
16:44, 7 мая 2011

.L
> это да, понятно уже ) А вот как "правильно" делать не идеальное зеркало? как
> в после 901 снизу слева матовый зеркальный шарик...
Ну всё гинеально просто:

  if( obj.refl == DIFF ) {
    const Ray nr(x + nl * 0.001f, ( uniformHemisphereSampling(frand(),frand()) + nl ).norm());
    const Vec reflected = radiance(nr,depth);
    const Vec brdf = obj.c;
    return obj.e + ( brdf * reflected );
  } else if( obj.refl == SPEC ) {
    const Ray nr(x + nl * 0.001f,r.d.reflect(nl));
    const Vec reflected = radiance(nr,depth);
    const Vec brdf = obj.c;
    return obj.e + ( brdf * reflected );
  } else if( obj.refl == GLOSS ) {
    const Vec brdf = obj.c;
    const float invGloss = 1.0f / (float)obj.gloss;
    const Vec dir = r.d.reflect(nl);
    Vec rad;
    for( int i = 0; i < obj.gloss; i++ ) {
      const Ray nr(x + nl * 0.001f,( dir + uniformHemisphereSampling(frand(),frand()) * obj.glossPower ).norm());
      rad = rad + radiance(nr,depth);
    }
    rad = rad * invGloss;
    return obj.e + ( brdf * rad );
  }
    
Ещё вареантик:
PT2 | ::3D Software rendering contest [finished]::
Страницы: 160 61 62 6366 Следующая »
ПрограммированиеФорумГрафика

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