UnityGLTF插件加载模型时,OcclusionTexture贴图显示错误的问题处理

发布时间 2023-09-27 11:03:29作者: zerozabuu

工作中遇到使用UnityGLTF插件加载GLTF模型时,贴图显示错误的问题,如下图

 

检查材质时发现,把OcclusionTexture去掉就看起来正常了

 

 看来是插件对OcclusionTexture的解析出了问题,

 那么我们来看一下,GLTF中对OcclusionTexture的描述片段,是这样:

"name": "5木质长廊1.bmp",
"occlusionTexture": {
    "index": 0,
    "texCoord": 1
}    

可见occlusionTexture用到了UV1(第二套UV)但是插件源代码中并没有相关的处理,所以需要修改,并且

要把贴图赋给 _DetailAlbedoMap
而不是 OcclusionTexture
这一点是从和这个GLTF模型同源的已经打成UnityBundle的模型中得到的信息,如下图

 

大概知道要改什么了,下面就是看代码进行修改,

插件源代码GLTFSceneImporter.cs中,对OcclusionTexture的处理是这样的:

mapper.OcclusionTexture = _assetCache.TextureCache[textureId.Id].Texture;

优化后变成这样:

if (def.OcclusionTexture.TexCoord == 1)
{
  mapper.Material.SetTexture("_DetailAlbedoMap", _assetCache.TextureCache[textureId.Id].Texture);
  mapper.Material.SetFloat("_UVSec", 1);
}
else
{
  mapper.OcclusionTexture = _assetCache.TextureCache[textureId.Id].Texture;
}

最后的效果是这样的: