Программирование игр, создание игрового движка, OpenGL, DirectX, физика, форум
GameDev.ru / Программирование / Форум / Артефакт

Артефакт

Страницы: 1 2 3 Следующая »
IBetsПользовательwww12 июня 201820:01#0
При упаковке карт нормалей в G-Buffer возникает такой артефакт.
Возможно ли от него избавиться
+ Показать
DelfigamerПостоялецwww12 июня 201820:37#1
А что показывает сам G-Buffer? Надо вывести промежуточные буферы, чтобы понять - проблема случается при их составлении? Или уже при их использовании?
IBetsПользовательwww12 июня 201820:51#2
Delfigamer
Точно косяк в нормалях я протестил RenderDoc.
IBetsПользовательwww12 июня 201820:57#3
Delfigamer
float2 EncodeSpheremap(in float3 normal) {
    return normal.xy / sqrt(8.0 * normal.z + 8.0) + 0.5;
}

float3 DecodeSphermap(in float2 encoded) {
    float2 fenc = 4.0 * encoded - 2.0;
    float f = dot(fenc, fenc); 
    return float3(fenc * sqrt(1.0 - 0.25 * f), 1.0 - 0.5 * f);
}

uint PackNormalSphermap(in float3 normal) {
    float2 encNormal = EncodeSpheremap(normal);
    uint result = 0;
    result  = f32tof16(encNormal.x);
    result |= f32tof16(encNormal.y) << 16;
    return result;
}

float3 UnpackNormalSphermap(in uint packedNormal) {
    float2 unpack;
    unpack.x = f16tof32(packedNormal);
    unpack.y = f16tof32(packedNormal >> 16);
    return DecodeSphermap(unpack);
}
innuendoПостоялецwww12 июня 201821:00#4
IBets
> Точно косяк в нормалях я протестил RenderDoc.

молодое поколение не может даже пукнуть без RenderDoc :)

а просто в rgb16f работает нормально ?

SuslikМодераторwww13 июня 20186:26#5
IBets
> sqrt(8.0 * normal.z + 8.0)
> sqrt(1.0 - 0.25 * f)
чё это вообще такое? наверняка из-за ненормализованных нормалей получается корень из немного отрицательного числа, nan и все вытекающие. используй max(0.0f, ...) и отладочный рендер. если у тебя проблема в нормалях, то и выводи цветом нормали, а не свою мешанину из эффектов поверх них, как ты это вообще отлаживаешь?

и главный вопрос — я так и не понял, чего ты пытаешься добиться такой упаковкой. ты пытаешься упаковать нормаль в один int32, для которого ни мипы не построить, ни даже фильтрацию линейную применить нельзя, когда можно сделать то же самое нормально, используя R16G16F текстуру. ещё лучше — просто R8G8, потому что я не помню, когда последний раз были нужны float-нормали.

Правка: 13 июня 2018 6:32

MrShoorУчастникwww13 июня 20187:44#6
Suslik
> ещё лучше — просто R8G8
Отражения же не кошерные на 8 битах на канал будут. А еще в идеале надо знак Z сохранять, потому как 1 - это перспективная проекция, 2 - нормали могут быть интерполированными или вообще с нормал мапы идти.
SuslikМодераторwww13 июня 20187:58#7
MrShoor
> Отражения же не кошерные на 8 битах на канал будут
скринспейсовые отражения всё равно надо будет блюрить по самые гланды.

MrShoor
> А еще в идеале надо знак Z сохранять, потому как 1 - это перспективная проекция, 2 - нормали могут быть интерполированными или вообще с нормал мапы идти.
мы храним xyz в r8g8b8 волосы мягкие и шелковистые.

MrShoorУчастникwww13 июня 20188:22#8
Suslik
> мы храним xyz в r8g8b8 волосы мягкие и шелковистые.
Ну это волосы. А с не волосами же все по другому.
innuendoПостоялецwww13 июня 20188:24#9
Suslik
> ещё лучше — просто R8G8, потому что я не помню, когда последний раз были нужны
> float-нормали.

а у вас, простите, какой рендер ?

АлмазПостоялецwww13 июня 201817:21#10
IBetsПользовательwww13 июня 201820:11#11
innuendo
Я нашел ошибку. R16G16 пробовал происходит жесткое падение производельности. Вероятно что-то с дровами
IBetsПользовательwww13 июня 201820:12#12
Алмаз
Здесь и  брал
Mr FПостоялецwww13 июня 201820:42#13
MrShoor
> Отражения же не кошерные на 8 битах на канал будут
c best fit normals (т.е. денормализацией нормалей чтоб они все биты реально занимали) очень даже кошерные. мой любимый метод ) те, что у Араса - все дают пониже качество, особенно на тонких зеркальных бликах.

Правка: 13 июня 2018 20:44

Андрей5000Постоялецwww13 июня 201821:16#14
Да где же этот гребаный артЭфакт едрить его в корень
Страницы: 1 2 3 Следующая »

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

2001—2018 © GameDev.ru — Разработка игр