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