从SVF更新到SVF2后,自定义着色器中的法线中断



你好,最近在我们的Forge Autodesk Viewer中,我们通过将查看器初始化选项更改为,从使用SVF切换为使用SVF2

{
env: "MD20ProdUS",
api: "D3S",
}

正如您的团队向我们建议的那样。然而,这导致我们的自定义着色器将法线放错了位置。我们怀疑是不同包装的问题,因为在着色器中,我们使用了一个方便的函数来解包法线值。

const float PI = 3.141592;
vec3 DecodeNormal (vec2 enc)
{
vec2 ang = enc * 2.0 - 1.0;
vec2 scth = vec2(sin(ang.x * PI), cos(ang.x * PI));
vec2 scphi = vec2(sqrt(1.0 - ang.y * ang.y), ang.y);
return vec3(scth.y * scphi.x, scth.x * scphi.x, scphi.y);
}

该功能的输入仅为normal.xy

我们有一个自定义着色器,可以显示颜色渐变中的法线,当使用同一着色器应用于同一模型时,根据我们使用的查看器版本(SVF或SVF2(,我们会得到不同的结果SVFSVF2我希望这些图像是可见的,你能够解决我们的问题。当我们第一次实现自定义着色器时,我们也遇到了同样的问题,但法线拆包功能最初解决了这个问题,这就是为什么我们怀疑这是我们头疼的原因。

我们需要与查看器团队核实更多细节,但同时:

SVF2格式可以用几种不同的方式对法线进行编码(使用两个shortushort,如您所见(,并且查看器很可能在将法线数据发送到GPU时也会保持原样,这意味着您需要修改WebGL着色器来考虑这些问题。我建议您更新DecodeNormal辅助函数,以遵循链接中使用的逻辑,并查看法线是否正确。

最新更新