三維引擎匯入obj模型全黑總結

netcy發表於2021-12-10

最近有客戶試用我們的三維平臺,在匯入模型的時候,會出現模型全黑和不可見的情況。本文說下全黑的情況。

經過測試,發現可能有如下幾種情況。

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 也是文字檔案,直接用文字編輯器可以開啟檢視:

image.png

PS mtl中 Kd 代表漫反射的顏色, Ks代表高光反射的顏色。

mtl檔案中貼圖引用了本地路徑

有時候建模人員在匯出mtl檔案的時候,裡面的貼圖路徑是本地的絕對路徑,如下圖所示:

image.png

此時匯入的模型因為找不到貼圖,而變成了黑色。此種情況下,雖然模型是全黑,但是高光的顏色是有的,也就是在特定的角度可以看到高光,同上。

解決方法就是把絕對路徑改成相對路徑,如下圖:

image.png

可以手動編輯mtl檔案修改,也可以建模人員匯出的時候設定。

匯入的場景沒有設定燈光

還有一種情況,模型都沒有問題,但是由於場景沒有設定任何燈光,導致模型看不見,此種情況需要程式上新增燈光即可。

結語

上一張修改後的效果圖

image.png

如果對視覺化感興趣,可以和我交流,微信541002349。 關注公號“ITMan彪叔” 可以及時收到更多有價值的文章。

相關文章