0

在优化我们的 WebGL2 渲染引擎时,我尝试将着色器接口(片段着色器和顶点着色器之间)中的一些变量指定为“平面”。这些变量确实可以被视为平坦的,并且对于整个渲染的几何图形基本上是一致的。(但它们被加载到顶点着色器中)。

前:

in vec4 v_metadata;
in vec4 v_lightmapPatchCoords;
in vec4 v_matValue0;
in vec4 v_matValue1;
in vec3 v_viewPos;
in vec3 v_worldPos;
in vec3 v_viewNormal;
in vec2 v_textureCoord;
in vec2 v_vertexCoords;
in vec2 v_trimPatchCoords;

后:

flat in vec4 v_metadata;
flat in vec4 v_lightmapPatchCoords;
flat in vec4 v_matValue0;
flat in vec4 v_matValue1;
in vec3 v_viewPos;
in vec3 v_worldPos;
in vec3 v_viewNormal;
in vec2 v_textureCoord;
in vec2 v_vertexCoords;
in vec2 v_trimPatchCoords;

但是,这种简单的更改会导致性能大幅下降。在相同的数据上,我的渲染器从 50fps 下降到 ~20fps。很难找到有关着色器接口以及它们如何影响性能的信息。我希望“平坦”变量比平滑变量更有效。

我知道我在顶点和片段着色器之间传递了大量数据,并且相信这可能是渲染中的瓶颈,但很难确认这一点。

我想知道是否由于 ANGLE 接口层,生成的 HLSL 生成效果不佳,导致效率有很大差异。

4

0 回答 0