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

LOD Noise fade

#0
15:13, 14 июня 2015

Хочу реализовать одну старую и достаточно популярную идею переключения ЛОДов, реализованную в Unreal Engine, Unigine и черт еще знает где (даже в моих старых демках)
Если кто не в курсе, как оно работает - один ЛОД попиксельно переходит в другой. Если показывать псевдокодом, будет что-то вроде

if (random_from_0_to_1(screenPosition.xy) > t)
  drawFirstLOD();
else
  drawSecondLOD();
Где t, очевидно, коэффициент перехода.

Выглядит это хуже, чем альфа-переход, зато отлично дружит с DeferredShading-ом и при похожести ЛОДов практически незаметно.
Вопрос - как реализовать функцию шума максимально быстро? Не хотелось бы городить кучу шейдеров, хочу обойтись одним для смены ЛОДа и для отрисовки модели.

#1
15:19, 14 июня 2015

-Eugene-
> Вопрос - как реализовать функцию шума максимально быстро?

texture lookup по screenPosition.xy ?

#2
16:39, 14 июня 2015

innuendo
Это и была моя реализация. Маленькая текстура смотрится тупо, большая убьёт кеш и просто нерационально. И вообще дергать текстуру вместо математики, это плохо.

#3
17:00, 14 июня 2015

-Eugene-
где-то скопипастил, не помню где\

float rnd(in float2 uv)
{
    float2 noise = (frac(sin(dot(uv ,float2(12.9898,78.233)*2.0)) * 43758.5453));
    return abs(noise.x + noise.y) * 0.5;
}
#4
18:47, 14 июня 2015

-Eugene-
> Маленькая текстура смотрится тупо, большая убьёт кеш и просто нерационально

Маленькую текстурку можно вращать, можно аля тут http://docs.nvidia.com/gameworks/index.html#gameworkslibrary/grap… ingsample.htm

-Eugene-
> И вообще дергать текстуру вместо математики, это плохо.

Э... есть обратные примеры ... тот же честный Fresnel для CT

#5
10:31, 15 июня 2015

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

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

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