Direct3D11 / PBR着色器-场景太暗-使用BRDF(Burley / Disney)着色器有什么经验吗?

问题描述 投票:0回答:1

我成功地潜入DirectX / 3D11(SharpDX / C#),使一切变得栩栩如生,最后,我想实现PBR。我非常想要像Disney / Burley这样的单一BRDF,幸运的是,我在Shader文件夹中找到了Microsoft Shipped PBREffect.fx,正是我的目标是HLSL Shader。

最后,我所有的常量缓冲区都在传递,PBR本身可以正常工作-但在更大的场景中,我成功施加的唯一灯光非常小,像镜面反射点一样,其他所有灯光都保持黑暗。例如,在太阳能电池板纹理上,如果没有空间电晕,则根本看不到ALBEDO。粗糙度,AO,法线一直都在应用,因为我的环境光是可见的白线,这来自其他贴图。

而且我处于某种可能性之外。我无法实现其他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

shader lighting direct3d11 pbr
1个回答
0
投票

更新:我找到了原因。着色器是为使用“辐射纹理”和“辐照纹理”而构建的。我从未使用过PBR,只是忽略了插槽6和7。我以为它将被忽略,我已经尝试将零件注释掉,但是没有任何变化。这次,我编辑了Irrad./Rad。部分和我-至少恢复了标准的“环境”照明。我仍然需要找到一些不仅点亮一点点的主动灯。因为PBR和法线无法在Ambient上使用,所以很正常,但是现在,黑暗消失了。为了线程的目的,这是发光度/ 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方法,即“粗糙度-金属度-工作流程”。不要被代码中的“镜面反射”所迷惑,它不仅是镜面反射,而且还有更多。.“标准”-镜面反射或光泽度不应该使用,这些工​​作流程仅仅是“闪亮”或其他。着色器称为“ PBREffect.fx”,并且包含它,例如可以在GitHub上的“ DirectXTK”中找到。

© www.soinside.com 2019 - 2024. All rights reserved.