最近有客户试用咱们的三维平台,在导入模型的时候,会呈现模型全黑和不可见的状况。本文说下全黑的状况。
通过测试,发现可能有如下几种状况。
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彪叔” 能够及时收到更多有价值的文章。