我怎样才能在四边形中删除这种颜色插值伪像?
How could I remove this colour interpolation artefact across a quad?
我一直在网上阅读 vulkan 教程,在这里:https://vulkan-tutorial.com。然而,这个问题应该适用于任何 3D 渲染 API。
在本课 https://vulkan-tutorial.com/Vertex_buffers/Index_buffer 中,教程刚刚介绍了使用索引渲染以便在绘制以下简单的双三角形四边形时重用顶点:
这四个顶点被指定为红色、绿色、蓝色和白色作为顶点属性,片段着色器按预期将这些颜色插值到三角形中。这会导致两个三角形相交处的对角线上出现丑陋的视觉假象。据我了解,插值只会发生在每个三角形上,因此两个三角形相交的地方插值不会越过边界。
一般情况下,在任何渲染中 api,如果没有这条硬线,您怎么能在所有四个角上平滑地插值颜色以获得漂亮的色轮效果?
从图形 api 的角度来看,这是正确的输出。您可以在着色器代码中实现自己想要的输出(颜色渐变)。您基本上需要自己插入颜色。要了解如何执行此操作,请参阅 this answer:
中的一段 glsl 代码
uniform vec2 resolution;
void main(void)
{
vec2 p = gl_FragCoord.xy / resolution.xy;
float gray = 1.0 - p.x;
float red = p.y;
gl_FragColor = vec4(red, gray*red, gray*red, 1.0);
}
我一直在网上阅读 vulkan 教程,在这里:https://vulkan-tutorial.com。然而,这个问题应该适用于任何 3D 渲染 API。
在本课 https://vulkan-tutorial.com/Vertex_buffers/Index_buffer 中,教程刚刚介绍了使用索引渲染以便在绘制以下简单的双三角形四边形时重用顶点:
这四个顶点被指定为红色、绿色、蓝色和白色作为顶点属性,片段着色器按预期将这些颜色插值到三角形中。这会导致两个三角形相交处的对角线上出现丑陋的视觉假象。据我了解,插值只会发生在每个三角形上,因此两个三角形相交的地方插值不会越过边界。
一般情况下,在任何渲染中 api,如果没有这条硬线,您怎么能在所有四个角上平滑地插值颜色以获得漂亮的色轮效果?
从图形 api 的角度来看,这是正确的输出。您可以在着色器代码中实现自己想要的输出(颜色渐变)。您基本上需要自己插入颜色。要了解如何执行此操作,请参阅 this answer:
中的一段 glsl 代码uniform vec2 resolution;
void main(void)
{
vec2 p = gl_FragCoord.xy / resolution.xy;
float gray = 1.0 - p.x;
float red = p.y;
gl_FragColor = vec4(red, gray*red, gray*red, 1.0);
}