共计 924 个字符,预计需要花费 3 分钟才能阅读完成。
最近有客户试用咱们的三维平台,在导入模型的时候,会呈现模型全黑和不可见的状况。本文说下全黑的状况。
通过测试,发现可能有如下几种状况。
obj 模型没有法线向量
如果 obj 模型导出的时候没有导出法线向量,会导致模型不能承受光照,从而导出的模型是全黑的。此种状况下,高光反射也没有。
解决方案上,一种是让建模人员从新导出模型,导出的时候勾选上导出法线向量。
另外也能够从程序上兼容一下,判断模型是否有法线向量,如果没有,程序本人计算法线向量。
以 threejs 为例,调用 computeVertexNormals 计算法线向量代码如下:
if(child.geometry && !child.geometry.hasAttribute('normal')) {child.geometry.computeVertexNormals();
}
PS: 如何判断模型是否有法线向量,只须要用文本编辑器关上 *.obj 文件,查看是否有“vn”标记
mtl 文件中设置模型色彩为彩色
一些建模人员在导出 mtl 文件时候,参数 Kd 是 0 0 0,Kd 参数会被解析成模型材质的 color 属性,既色彩。
此种状况下,尽管模型是全黑,然而高光的色彩是有的,也就是在特定的角度能够看到高光:
所以解决的 方法就是把 Kd 0 0 0 的设置全副去掉,或者建模师能够从新导出模型文件,让 Kd 变成一个非全 0 的值。
mtl 也是文本文件,间接用文本编辑器能够关上查看:
PS mtl 中 Kd 代表漫反射的色彩,Ks 代表高光反射的色彩。
mtl 文件中贴图援用了本地门路
有时候建模人员在导出 mtl 文件的时候,外面的贴图门路是本地的绝对路径,如下图所示:
此时导入的模型因为找不到贴图,而变成了彩色。此种状况下,尽管模型是全黑,然而高光的色彩是有的,也就是在特定的角度能够看到高光,同上。
解决办法就是把绝对路径改成相对路径,如下图:
能够手动编辑 mtl 文件批改,也能够建模人员导出的时候设置。
导入的场景没有设置灯光
还有一种状况,模型都没有问题,然而因为场景没有设置任何灯光,导致模型看不见,此种状况须要程序上增加灯光即可。
结语
上一张批改后的效果图
如果对可视化感兴趣,能够和我交换,微信 541002349。关注公号“ITMan 彪叔”能够及时收到更多有价值的文章。