АкронимЛета
Если убрать то получается вот такая картинка:
BingoBongo
Это похожий, но совершенно неправильный результат по идее.
KaronatoR
Так ведь ничего не поменялось
АкронимЛета
Да (((
И я не понимаю почему (((
KaronatoR
Т.е. с той строкой и без одинаковый вывод?
АкронимЛета
Да, только что перепроверил. Результат 1 в 1. о_О
KaronatoR
> KaronatoR
А ты увеличил кол-во сэмплов?
Оу. Вот нет. Это были скрины для 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 раз перепроверил.
KaronatoR
> occlusion = asin(occlusion) / (PI / 2.0);
Замени на:
occlusion = 1.0 - occlusion;
Должна получится правильная картинка
АкронимЛета
KaronatoR
А много направлений?
Это одно направление. Совсем совсем одно.
Какая-то совсем несимметричная картинка получается.
Так точно должно быть?
Особенно вот то что рядом с кубиками - хоть убей не понимаю.
АкронимЛета
Если сделать вот так:
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); } }
То экран полностью черный
KaronatoR
Он чёрный, потому что нужно суммировать синус после каждого направления
Напиши так:
if (gamma > oldAngle) { oldAngle = max(gamma, oldAngle); debugDirection = sampleDirVS; }
И выведи debugDirection на экран.
Тема в архиве.