首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >OpenGL SSAO奇怪的工件

OpenGL SSAO奇怪的工件
EN

Stack Overflow用户
提问于 2020-05-26 23:56:57
回答 1查看 105关注 0票数 0

尝试在我的OpenGL应用程序中实现SSAO。但却想出了一些奇怪的艺术品。我怎么才能解决这些黑色的东西呢?下面是SSAO的片段着色器

代码语言:javascript
复制
"int KERNEL_MAX = 128;"
    "uniform vec3 kernel[128];"

    "uniform mat4 P;"
    "uniform sampler2D tex;"
    "uniform sampler2D texPos;"
    "uniform sampler2D texNormal;"
    "uniform sampler2D texDepth;"
    "uniform vec3 camPos;"

    "void main () {"

    "   vec4 pixel_color = texture2D(tex, v_uv);"
    "   vec3 pixel_pos = texture2D(texPos, v_uv).rgb;"
    "   vec3 pixel_normal = texture2D(texNormal, v_uv).rgb;"
    "   float pixel_depth = texture2D(texDepth, v_uv).r;"

    "   float occlusion = 0.0;"
    "   for (int i = 0; i < KERNEL_MAX; ++i) {"
    "       vec3 sample_ray = pixel_pos + kernel[i] * sign(dot(pixel_normal, kernel[i])) * 0.1;"
    "       vec4 sample_pos = (P * vec4(sample_ray, 1.0));"
    "       sample_pos.xy /= sample_pos.w;"
    "       sample_pos.xy = sample_pos.xy * 0.5 - 0.5;"

    "       float sample_depth = texture2D(texDepth, sample_pos.xy).r;"
    "       if (sample_depth < pixel_depth) { occlusion += 1.0; }"
    "   }"

EN

回答 1

Stack Overflow用户

发布于 2020-05-27 00:17:57

通常,在Screen Space Ambient Occlusion算法中使用偏差:

代码语言:javascript
复制
const float bias = 0.0001;
if (sample_depth < pixel_depth - bias) { occlusion += 1.0; }
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/62026305

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档