new*_*cle 6 debugging shader glsl
如何调试OpenGL着色器?例如.:
void main(void)
{
vec2 uv = gl_FragCoord.xy;
gl_FragColor = vec4(uv,222,1);
}
Run Code Online (Sandbox Code Playgroud)
有没有办法让我知道紫外线的价值是多少?
调试着色器的方法有很多,大多数方法都是视觉的,而不是输出整个图像的完整像素数据。
由于着色器以高度并行的方式运行,因此您可以一次输出大量视觉数据。
还有一些外部应用程序可以帮助您调试 glsl 着色器以及整个渲染管道。
这是最简单的调试形式,但最难理解结果。您只需将您想要看到的数据输出到屏幕上,例如知道您想要的 uv 值是多少。
你可以这样做:
void mainImage( out vec4 fragColor, in vec2 fragCoord )
{
// Normalized pixel coordinates (from 0 to 1)
vec2 uv = fragCoord/iResolution.xy;
// Output to screen
fragColor = vec4(uv, 0.0 ,1.0);
}
Run Code Online (Sandbox Code Playgroud)
在此图中,您可以看到归一化 uv 的范围为 0 到 1。黄色平均 uv 为 vec2(1.0,1.0),黑色平均 vec2(0.0,0.0)。
可视化调试的另一个示例:
(来源: https: //www.shadertoy.com/view/ts2yzK)
这是来自 Raymarching 项目。该图像中有两件事,一是我调试光线的深度,二是调试是否有命中。
该图像可以查看您击中或未击中的内容,因为白色表示击中,黑色表示未击中。
另一方面,该图像不利于显示图像的深度。由于以下两点,您可能很难调试这样的图像:
这样的值引导我们进行另一种类型的调试
Renderdoc 是最好的调试器之一。是的,还有很多其他的,但是这个是免费使用的,并且用途非常广泛。
您可以通过查看着色器之前和之后来调试顶点 glsl 着色器。您可以看到片段着色器的每个像素及其值。
您还可以查看如何在 GPU 上存储数据以及更多内容。
在调试时,无论是否可视化,您都必须知道自己在寻找什么,至少您会找到答案。可视化调试是最难调试的事情之一,因为由于着色器的高度并行性,通常无法逐步执行代码。
许多错误也是因为我们忘记了一些小事情,例如规范化值、忘记负号等等小事情。
要发现错误并正确调试,您必须彻底且耐心。
| 归档时间: |
|
| 查看次数: |
752 次 |
| 最近记录: |