小编Axi*_*iom的帖子

为什么SSAO仅在某些角度/距离下工作?

我正在尝试将LearnOpenGL SSAO教程用作资源时复制Sascha Willems SSAO示例。但是我的SSAO代码仅部分覆盖了特定角度/距离的模型,并且在靠近对象时也具有非常强的自我遮挡效果。

左侧是我的渲染器,右侧是Sascha Willems SSAO示例

编辑:从RenderDoc的正确图像上有一些奇怪的伪像。对于那个很抱歉。

有关渲染器变量的一些注意事项:

  • 位置+深度图像使用VK_FORMAT_R32G32B32A32_SFLOAT格式,在RenderDoc中看起来正确。[ 1 ] [ 2 ]
  • 正常图像使用VK_FORMAT_R8G8B8A8_UNORM格式,并且在RenderDoc中看起来正确。[ 1 ]
  • 位置+深度和法线图像使用带有VK_SAMPLER_ADDRESS_MODE_CLAMP_TO_EDGE的VkSampler。
  • SSAO图像为VK_FORMAT_R8_UNORM,并且正在由着色器正确写入。[ 1 ]
  • SSAO噪声图像使用VK_FORMAT_R32G32B32A32_SFLOAT格式,并且在RenderDoc中看起来正确。[ 1 ]
  • SSAO噪声图像使用带有VK_SAMPLER_ADDRESS_MODE_REPEAT的VkSampler。

SSAO噪音

// Random Generator
std::default_random_engine rndEngine(static_cast<unsigned>(glfwGetTime()));
std::uniform_real_distribution<float> rndDist(0.0f, 1.0f);

// SSAO random noise
std::vector<glm::vec4> ssaoNoise(SSAO_NOISE_DIM * SSAO_NOISE_DIM);
for (uint32_t i = 0; i < static_cast<uint32_t>(ssaoNoise.size()); i++)
{
    ssaoNoise[i] = glm::vec4(rndDist(rndEngine) * 2.0f - 1.0f, rndDist(rndEngine) * …
Run Code Online (Sandbox Code Playgroud)

c++ 3d graphics glsl vulkan

5
推荐指数
1
解决办法
163
查看次数

标签 统计

3d ×1

c++ ×1

glsl ×1

graphics ×1

vulkan ×1