Обновление: я нашел причину. Шейдер создан для использования текстуры сияния и текстуры освещения. Я никогда не использовал 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.