相关疑难解决方法(0)

从深度缓冲区获取真实的z值

从着色器中的深度缓冲区进行采样,返回0到1之间的值,如预期的那样.给定相机的近平面和远平面平面,如何计算此时的真实z值,即距相机的距离?

opengl graphics shader

52
推荐指数
2
解决办法
4万
查看次数

为什么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
查看次数

如何在iOS中的OpenGL ES中正确线性化深度?

我正在尝试使用OpenGL为iOS应用程序渲染一个阿甘场景。为了使它更好一点,我想在场景中实现深度效果。但是,我需要从OpenGL深度缓冲区获得线性化的深度值。目前,我正在片段着色器(在此处找到)中使用计算。

因此,我的地形片段着色器如下所示:

#version 300 es

precision mediump float;
layout(location = 0) out lowp vec4 out_color;

float linearizeDepth(float depth) {
    return 2.0 * nearz / (farz + nearz - depth * (farz - nearz));
}

void main(void) {
    float depth = gl_FragCoord.z;
    float linearized = (linearizeDepth(depth));
    out_color = vec4(linearized, linearized, linearized, 1.0);
}
Run Code Online (Sandbox Code Playgroud)

但是,这将导致以下输出:

结果输出 如您所见,越远,您得到的深度值越“条纹”(尤其是在船后)。如果地形图块靠近相机,那么输出就可以了。

我什至尝试了另一种计算:

float linearizeDepth(float depth) {
    return 2.0 * nearz * farz / (farz + nearz - (2.0 * depth - 1.0) * (farz - …
Run Code Online (Sandbox Code Playgroud)

opengl-es glsl objective-c ios

3
推荐指数
1
解决办法
1087
查看次数

标签 统计

glsl ×2

graphics ×2

3d ×1

c++ ×1

ios ×1

objective-c ×1

opengl ×1

opengl-es ×1

shader ×1

vulkan ×1