奇怪的 rchit.glsl 着色器行为与 hitAttributeEXT 变量

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

当我遇到一个视觉错误时,我正在处理一些 Vulkan 光线跟踪渲染器。当我尝试调试它时,我注意到它归结为我的

rchit.glsl
(射线最近命中)代码并且与
hitAttributeEXT
变量有关。在将其分解为最简单的可重现场景后,我变得目瞪口呆,每当对所述参数执行计算时,我都会得到莫名其妙的图形输出。

#version 460
#extension GL_EXT_ray_tracing : require
#extension GL_EXT_nonuniform_qualifier : enable
#extension GL_EXT_scalar_block_layout : enable

layout(location = 0) rayPayloadInEXT vec3 hitValue; // This is simply the resulting output

hitAttributeEXT vec2 attribs; // barycentric coordinates of the triangle hit by a ray

void main()
{
    // For testing purposes I either uncommented or commented out a separate section
    // Raytracing Shader Test 1
    // setting hit value directly as attribs (this works as expected)
    hitValue = vec3(1.0, attribs);

    // Raytracing Shader Test 2
    // Adding a branch (this does not work as expected)
    if (attribs.x > 0.5)
    {
        hitValue = vec3(1.0, 1.0, 1.0);
    } else {
        hitValue = vec3(0.0, 0.0, 0.0);
    }

    // Raytracing Shader Test 3
    // fixed value for sanity check
    hitValue = vec3(0.0, 1.0, 0.0);
}

在下面,我用一个投影的 ico-sphere 做了几个测试。

光线追踪着色器测试 1

所以这里的事情似乎按预期工作,三角形在一个角上有红色,在另一个角上有红色+蓝色=紫色,在最后一个角上有红色+绿色=黄色。

https://i.stack.imgur.com/donwi.png

光线追踪着色器测试 2

所以这让我很困惑,在我的着色器设置下,我什至看不出红色是怎么可能的。

https://i.stack.imgur.com/krbRv.png

光线追踪着色器测试 3

使用恒定的颜色输出

https://i.stack.imgur.com/lkADP.png

常规光栅化

只是在某些情况下,这就是对象在光栅化渲染器下的真实外观。

https://i.stack.imgur.com/gkoC8.png


一些额外的信息

Vulkan 版本:

  • “vulkan-headers/1.3.211.0”,

  • “vulkan-loader/1.3.211.0”,

  • “vulkan-validationlayers/1.3.211.0”,

来自 VulkanSDK-1.3.211.0 的 glslc:

$ glslc --version

shaderc v2022.1 v2022.1

spirv-tools v2022.2-dev v2022.1-61-geed5c76a

glslang 11.1.0-457-gabbe4664

Target: SPIR-V 1.0

glslc 命令:

glslc --target-env=vulkan1.3 rayhit_shader.rchit -o rayhit_shader.spv

c++ glsl vulkan raytracing
© www.soinside.com 2019 - 2024. All rights reserved.