Шейдер Direct3D11 / PBR - сцена остается слишком темной - есть опыт работы с шейдером BRDF (Burley / Disney)? - PullRequest
0 голосов
/ 20 февраля 2020

Я успешно погрузился в DirectX / 3D11 (SharpDX / C#), я воплотил все в жизнь и, наконец, я хотел внедрить PBR. Я очень хотел один-единственный BRDF, такой как Disney / Burley, и, к счастью, я нашел Microsoft Shipped PBREffect.fx в папке Shader, HLSL-шейдер именно для моей цели.

Наконец, все мои постоянные буферы работают, сам PBR работает нормально - но в более крупной сцене единственный источник света, который мне удалось применить, загорается очень маленьким, как зеркальные точки, а все остальное остается темным. Например, на структуре solarpanel ALBEDO вообще не виден без светящейся короны на нем. Шероховатость, AO, Normal применяется все время, потому что у меня есть окружающие огни окклюзии, видимые белые линии, и это исходит от других карт.

И у меня какие-то возможности. Я не могу реализовать другие решения для Light, потому что это может повлиять на весь PBR. Всего различных реализаций через все функции.

Есть ли у кого-то опыт работы с этим шейдером и идея, как получить "WORLD Light", чтобы у меня была базовая яркость на всех объектах также в сценах Bis. Как 1000.0f и выше в качестве пространства рендеринга.

Стефан.

3 Прикрепленные скриншоты.

[Карты / PBR идеально применяются, но только в центре внимания] https://i.stack.imgur.com/JeUH3.jpg [Латунный материал PBR - светится только на месте] https://i.stack.imgur.com/KZNK7.png [image1] https://i.stack.imgur.com/Unmvm.jpg

1 Ответ

0 голосов
/ 21 февраля 2020

Обновление: я нашел причину. Шейдер создан для использования текстуры сияния и текстуры освещения. Я никогда не использовал PBR и просто игнорировал слоты 6 и 7. Я предполагал, что это будет игнорироваться, я уже пытался закомментировать часть, но ничего не изменилось. На этот раз я редактировал Irrad./Rad. часть и я - по крайней мере, получили стандартное "окружающее" освещение назад. Мне все еще нужно найти активные источники света, которые не только освещают небольшое пятно. Поскольку PBR, как и обычные, не могут работать с Ambient, довольно нормально, но сейчас темнота ушла. Для целей Thread, вот строки для яркости / irr.:

во-первых, есть 2 функции для подрасчетов:

float3 Diffuse_IBL(in float3 N)
{
    //return IrradianceTexture.Sample(IBLSampler, N);
    return float3(1.0f, 1.0f, 1.0f) * 0.9f;  // here i send a color + an intensity val
                                             // this brought back the ambient..
}

// Approximate specular image based lighting by sampling radiance map at lower mips 
// according to roughness, then modulating by Fresnel term. 
float3 Specular_IBL(in float3 N, in float3 V, in float lodBias)
{
    float mip = lodBias * NumRadianceMipLevels;
    float3 dir = reflect(-V, N);
    //return RadianceTexture.SampleLevel(IBLSampler, dir, mip);
    return float3(1.0f, 1.0f, 1.0f)*lodBias; // just playing around - not valuable :)
}

И эти функции вызываются в конце «LightSurface», основной функции «Применить физический рендеринг в стиле Диснея к поверхности», затронутые строки :

// Add diffuse irradiance
float3 diffuse_env = Diffuse_IBL(N);
acc_color += c_diff * diffuse_env;

// Add specular radiance 
float3 specular_env = Specular_IBL(N, V, roughness);
acc_color += c_spec * specular_env;

return acc_color;

Если кто-то заинтересован в попытке попробовать, он следует единственно принятому подходу PBR «на профессиональном рынке» - «грубость-металличность-рабочий процесс». Не смущайтесь "зеркальным" в коде, это не просто зеркальное отражение, а гораздо больше вокруг ... "Стандартный" -спекулярный или Glossiness не должны использоваться, эти рабочие процессы просто "блестящие" или что-то еще. Шейдер называется «PBREffect.fx» +, он включен и может быть найден в «DirectXTK», доступном, например, на GitHub.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...