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

ds pbr + reflections

Страницы: 1 2 3 Следующая »
#0
(Правка: 21:29) 21:12, 1 июля 2021

привет

хочу спросить как делают.

pbr выполнено через ds, соответстно пообъектных лайт пассов нету

1) ssr идеально ложится но там потери ибо скринспасе.
там где ssr невидимо показывают некий кубмап.

так что за кубмап - с какой позиции генерить? с позиции камеры? неточно,зато один. наот-----ись сойдет. Мол,что-то отражается там и ладно.

2) с шерховатостью кубмапы всё понятно. в статьях написано как ее блюрить:
https://habr.com/ru/post/429744/

кстати автору респект. чотко

а как блюрить ssr для шерховатости ? тоже самое только типа одна грань? так тогда на ребрах pbr объекта будут артефакты,сдается мне, ибо совпадение с рефлекшен мапой будет не пиксель в пиксель

и всё это блюрить в runtime ессно


#1
2:37, 2 июля 2021

Во время того как ты источники света считаешь засэмплить кубмапу не вариант?

#2
(Правка: 4:54) 4:54, 2 июля 2021

относись к ssr как к маске — если отражённый луч нашёл пересечение, то цвет пикселя, из которого выпущен этот луч, получает вместо specular части environment light'а, вклад от ssr. то есть specular ibl и ssr можно считать взаимо исключающими для каждого пикселя gbuffer'а, потому что они по сути моделируют одно и то же физическое явление, и если предположение ssr зафейлилось (оккюдер находится за экраном), то используется ibl вклад как fallback.

#3
6:56, 2 июля 2021

Ты можешь просто перевернуть альбеду вверх ногами и отсеч по рефлекшн-матеиралам. И заблюрить. Тебе так нужна точность?

#4
12:25, 2 июля 2021

lookid
> Ты можешь просто перевернуть альбеду вверх ногами и отсеч по
> рефлекшн-матеиралам. И заблюрить.
и без учета глубины сможешь увидеть отражающийся в далеком озере объект, который находится у тебя перед носом))

#5
13:35, 2 июля 2021

Misanthrope
У него нет озер. У него всё в пределах комнаты.

#6
(Правка: 11:29) 11:29, 3 июля 2021

отражения и в воде есть тоже.

так что - кубмапом не надо маскировать? просто не отражать ничего чтоль в тех местах? в уе4 есть такие демы - делают

#7
(Правка: 12:13) 11:31, 3 июля 2021

Suslik
> ibl вклад как fallback

у меня ибл только в части диффузного амбиента - где я беру размыленный енвмап окружения для имитации амбиента

#8
(Правка: 1:08) 1:07, 12 июля 2021

ок
делаю простую реализацию.
не понимаю что за баги. потеря инфы? шлейфы какие-то

Изображение удалено
Изображение удалено
Изображение удалено
vec3 GetNormal(vec2 tc)
{
  vec4 nts = texture( sceneNormalT, tc.xy );
  vec3 vsN = 2.0 * nts.xyz - 1.0;  // viewSpace
  return vsN;
}

// uv 0..1
vec3 UnProject(in vec2 UV,in float depth,in mat4 InverseViewProjection)
{
  vec4 position = vec4(1.0f); 
 
  position.x = UV.x * 2.0f - 1.0f; 
  position.y = UV.y * 2.0f - 1.0f;
  position.z = depth * 2.0f - 1.0f; 
 
  // Transform Position from Homogenous Space to World Space 
  position = InverseViewProjection * position; 
 
  position /= position.w;

  return position.xyz;
}

vec3 GetPosition(vec2 tc)
{
  float depth = texture(sceneDepthT,tc.xy).x;  
  vec3 _3d = UnProject(tc.xy,depth,iprojMatr);
  return _3d.xyz;
}

vec2 ProjectTC(vec3 currentRay)
{
  // project point onto screen
  vec4 samplingPosH = projMatr * vec4(currentRay, 1.0);
  samplingPosH /= samplingPosH.w; // NDC
    
  // 0...1
  vec2 nuv = vec2(0.5,0.5) * samplingPosH.xy + 0.5;
  return nuv;
}

vec4 RayMarch(vec3 dir, inout vec3 hitCoord, out float dDepth)
{
    dir *= step;
  
    float depth=0;
    vec4 projectedCoord = vec4(0.0);
 
    for(int i = 0; i < maxSteps; i++)
    {
        hitCoord += dir;
 
  projectedCoord.xy = ProjectTC(hitCoord);
 
  vec3 newPos = GetPosition(projectedCoord.xy);
        depth = newPos.z;
    
        dDepth = hitCoord.z - depth;

        //if((dir.z - dDepth) < 1.2)
        {
            if(dDepth < 0.001)
            {   
                vec4 Result;
        
    Result = vec4(projectedCoord.xy,dDepth,1.0);
        
                return Result;
            }
        }  
    }
     
    return vec4(projectedCoord.xy, depth, 0.0);
}

void ssr1(in vec2 st,inout vec4 ocol)
{
  vec3 viewNormal = GetNormal(st.xy);  
  vec3 viewPos = GetPosition(st.xy);
  
  vec3 nvp = normalize(viewPos);
  vec3 nvn = normalize(viewNormal);

  vec3 reflected = normalize(reflect(nvp, nvn));

  vec3 hitPos = viewPos;
  float dDepth;
  vec3 jitt = vec3(0.0);
  ..............
  vec4 coords = RayMarch((vec3(jitt) + reflected * max(minRayStep, -viewPos.z)), hitPos, dDepth);
}

viewNormal  - viewspaceN
viewPos.z - вроде как расстояние линейное до near - всегда от камеры направлено
технику поюзал - чет хрень какая-то, или ошибка где-то..

#9
4:56, 12 июля 2021

The Andreyp
построить отражения в SSR — это самая простая часть. сложное — это что делать с отражениями, которые нашлись неправильно.

#10
20:03, 13 июля 2021

The Andreyp
скопипастил код откуда-то?

#11
(Правка: 22:24) 22:17, 18 июля 2021

не понимаю,нафига мне вообще этот SSR если он чаще проваливается чем работает изза потери инфы и нужно блендить эти места с кубмапой, которая генерится каждый кадр из позиции глаза?

и как вообще понять что SSR отрабатывает как надо и эти артефакты норма?

Переделал немного реализацию. Сейчас черный там где не было пересечения - не нашлось. Там бы надо тупо кубмап показывать. И сдается мне будут конкретные расхождения между кусками отражений сср кубмап

Изображение удалено
Изображение удалено
#12
0:53, 19 июля 2021

The Andreyp
Тебе не нужен здесь ssr. Сделай через parallar corrected cubemapes. А ssr для динамических объектов + заблюрить.

#13
(Правка: 9:48) 9:45, 19 июля 2021

The Andreyp
среди прочего, у тебя неправильный блендинг между освещением материала и вкладом от ssr. также выглядит неправильно то, что у тебя вклад от энвайронмента (хоть и неправильный) есть только на полу и больше ни на чём, когда он должен быть на всём. ну и ещё миллион других проблем, к самому трассировщику пока даже не относящиеся — например, почему у тебя отражение объекта оказалось ярче самого объекта?

The Andreyp
> нужно блендить эти места с кубмапой, которая генерится каждый кадр из позиции глаза
если у тебя бюджета кадра хватает, чтобы рендерить каждый кадр кубмапу, то вообще не парься и юзай её. хоть у тебя при этом не будет нормальных контактных отражений, всё остальное будет гораздо проще — например, glossiness.

#14
(Правка: 10:11) 10:08, 19 июля 2021

Suslik
Не смотри на бленд и шадинг отражений .никто их с пбр не мешал .

Я тупо отлаживаю отражения пока

Страницы: 1 2 3 Следующая »
ПрограммированиеФорумГрафика