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

Отладка HBAO (Horizon Based Ambient Occlusion) (4 стр)

Страницы: 13 4 5 611 Следующая »
#45
22:13, 1 мая 2020

АкронимЛета
Если убрать то получается вот такая картинка:

Изображение

BingoBongo
Это похожий, но совершенно неправильный результат по идее.

#46
22:32, 1 мая 2020

KaronatoR
Так ведь ничего не поменялось

#47
22:34, 1 мая 2020

АкронимЛета
Да (((
И я не понимаю почему (((

#48
22:36, 1 мая 2020

KaronatoR
Т.е. с той строкой и без одинаковый вывод?

#49
22:56, 1 мая 2020

АкронимЛета
Да, только что перепроверил. Результат 1 в 1. о_О

#50
22:58, 1 мая 2020

KaronatoR
> KaronatoR
А ты увеличил кол-во сэмплов?

#51
23:03, 1 мая 2020

Оу. Вот нет. Это были скрины для 2 семплов. Поставил 8, результат:

Изображение

Кот для подтверждения:

            float4 frag(v2f_img input): COLOR {
                const float PI = 3.14159265;

                float2 uv = input.uv;

                float3 pointVS = screenToView(uv);

                float4 raw_normal = tex2D(_Tex1, uv);
                float3 normal = normalize(2 * (raw_normal.xyz - 0.5));
                float3 normalVS = normalize(mul((float3x3)UNITY_MATRIX_IT_MV, normal));

                const float radiusSS = 50.0 / 1024.0;
                const int stepsCount = 8;

                float2 deltaUV = float2(radiusSS / (stepsCount + 1.0), 0.0);

                float occlusion = 0.0;

                float oldAngle = -10.0;

                for (int j = 0; j < stepsCount; j++) {
                    float2 sampleUV = uv + j * deltaUV;
                    float3 sampleVS = screenToView(sampleUV);
                    float3 sampleDirVS = sampleVS - pointVS;

                    float gamma = (PI / 2.0) - acos(dot(normalVS, normalize(sampleDirVS)));

                    if (gamma > oldAngle) {
                        oldAngle = max(gamma, oldAngle);
                    }
                }
                occlusion += sin(oldAngle);

                occlusion = asin(occlusion) / (PI / 2.0);
                return float4(occlusion, occlusion, occlusion, 1.0);
            }

Важный момент!
И со строчкой asin(occlusion) и без результат одинаковый. Честное слово, я 10 раз перепроверил.

#52
23:09, 1 мая 2020

KaronatoR
> occlusion = asin(occlusion) / (PI / 2.0);
Замени на:
occlusion = 1.0 - occlusion;

Должна получится правильная картинка

#53
23:18, 1 мая 2020

АкронимЛета

Изображение
#54
23:19, 1 мая 2020

KaronatoR
А много направлений?

#55
23:24, 1 мая 2020

Это одно направление. Совсем совсем одно.

#56
23:27, 1 мая 2020

Какая-то совсем несимметричная картинка получается.
Так точно должно быть?
Особенно вот то что рядом с кубиками - хоть убей не понимаю.

#57
23:44, 1 мая 2020

АкронимЛета
Если сделать вот так:

                for (int j = 0; j < stepsCount; j++) {
                    float2 sampleUV = uv + j * deltaUV;
                    float3 sampleVS = screenToView(sampleUV);
                    float3 sampleDirVS = sampleVS - pointVS;
                    return float4(sampleDirVS, 1.0);

                    float gamma = (PI / 2.0) - acos(dot(normalVS, normalize(sampleDirVS)));

                    if (gamma > oldAngle) {
                        oldAngle = max(gamma, oldAngle);
                    }
                }

То экран полностью черный

#58
23:44, 1 мая 2020

KaronatoR
Он чёрный, потому что нужно суммировать синус после каждого направления

#59
23:46, 1 мая 2020

Напиши так:

 if (gamma > oldAngle) {
  oldAngle = max(gamma, oldAngle);
  debugDirection = sampleDirVS;
}

И выведи debugDirection на экран.

Страницы: 13 4 5 611 Следующая »
ПрограммированиеФорумГрафика

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