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

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

 

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

 

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

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

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

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

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

 

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

首选改用Standard Shader

sceneImporter.CustomShaderName = "Standard";

然后找一下对OcclusionTexture的处理

在插件源代码GLTFSceneImporter.cs中:

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);
  mapper.Material.EnableKeyword("_DETAIL_MULX2");//要开启对应的关键字,不然不生效哈 }
else {   mapper.OcclusionTexture = _assetCache.TextureCache[textureId.Id].Texture; }

最后的效果是这样的:

 

参考文章:

https://blog.csdn.net/linjf520/article/details/91411613

https://blog.csdn.net/sun_surprise/article/details/105709308

https://blog.csdn.net/puremilk684/article/details/62046147

posted @ 2023-09-27 11:00  zerozabuu  阅读(71)  评论(0编辑  收藏  举报