我测试了似乎高版本的Unity已经解决了这个镜像模型导入后的问题?不需要以上的解决方案导进去显示也是正常的(我使用的untiy 2020.2.4 URP管线)。
但无奈的是楼底下程序部门还一直使用旧版本的Unity 5.2,让他们换SRP得重构之前写的代码,我嘴皮子都磨烂了还是不肯换2333,换用SRP这个东西估计一时半会儿是没法在新项目上落实了。(悲)
基于这个eggpain的问题我写了一个unity脚本供参考,似乎也可以解决这个问题,hhh,不多说了代码奉上。
using System.Collections;
using System.Collections.Generic;
using UnityEngine;
public class FlipNormal : MonoBehaviour
{
public GameObject InvertObject;
//选择一个要反转的物体
//仅仅翻转法线还不够,必须根据三角形遍历顺序把1-2-3改变成3-2-1,这样渲染管线应用阶段才会读翻转后的法线(在obj里表现为同时反转v和vn);
//三角形换序的同时别忘了submesh也要继承,不然submesh对应的子材质就会变成仅有一个(Cuz Every material has a separate tri list)
Material[] materials = InvertObject.GetComponent<Renderer>().materials;
int SubmeshNum = materials.Length;//统计子材质数量
for (int j = 0; j < SubmeshNum; j++)
{
int[] triangles = InvertObject.GetComponent<MeshFilter>().sharedMesh.GetTriangles(j);//按每个submesh遍历三角形
for (int index = 0; index < triangles.Length; index += 3)//submesh的每个三角形换序
{
int intermediate = triangles[index];
triangles[index] = triangles[index + 2];
triangles[index + 2] = intermediate;
}
InvertObject.GetComponent<MeshFilter>().sharedMesh.SetTriangles(triangles, j);//更新反转后的submesh三角形
}
//==============================================