最近有客户试用咱们的三维平台,在导入模型的时候,会呈现模型全黑和不可见的状况。本文说下全黑的状况。

通过测试,发现可能有如下几种状况。

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彪叔” 能够及时收到更多有价值的文章。