最近有客戶試用我們的三維平台,在導入模型的時候,會出現模型全黑和不可見的情況。本文說下全黑的情況。
經過測試,發現可能有如下幾種情況。
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彪叔” 可以及時收到更多有價值的文章。