我們經常見到的*.obj文件有兩種:第一種是基於COFF(Common Object File Format)格式的OBJ文件(也稱目標文件),這種格式用於編譯應用程序;第二種是Alias|Wavefront公司推出的OBJ模型文件。我要講的OBJ文件格式是指第二種-OBJ模型文件。 說起3D文件格式,大家一定不會感到陌生,"*.3ds","*.max","*.lw","*.mb","*.dxf","*.obj",相信人人都能列舉出幾種來。但是說起OBJ文件的具體特徵,卻很少有人能給出較爲圓滿的描述。 很多人認識OBJ文件是從使用Poser開始的,Poser是一款人體建模軟件,要把Poser生成的人體導出到其它3D軟件中進行再加工,就用到了OBJ文件。OBJ文件是一種標準的3D模型文件格式,很適合用於3D軟件模型之間的互導。比如你在3dsMax或LightWave中建了一個模型,想把它調到Maya裏面渲染或動畫,導出OBJ文件就是一種很好的選擇。目前幾乎所有知名的3D軟件都支持OBJ文件的讀寫,不過很多軟件需要通過插件才能做到這一點。
另外,作爲一種優秀的文件格式,很多遊戲引擎也都支持OBJ文件的讀取。 瞭解OBJ文件格式有什麼用呢?如果你不學編程的話,用處確實不大。不過,3D軟件模型之間的互導是一件很常見的事情,不幸的是,目前的3D軟件模型導出功能都不那麼完美,經常會出現缺面少線的情況,有時還會遇到導出的模型根本打不開的情況。如果情況非常緊急的話,你一定會不惜一切代價仔細研究,期望找到原因,解決問題。在這種情況下,我的教程也許會對你有很大幫助
OBJ文件是一種文本文件格式,這就意味着你可以直接用寫字板打開進行查看修改,如果你能看懂每一行的內容是什麼意思,相信距離你成功的解決問題已經不遠了。
OBJ文件是Wavefront公司爲它的一套基於工作站的3D建模和動畫軟件"Advanced Visualizer"開發的一種文件格式。
OBJ新版本是v3.0,代替以前的v2.11版本。
OBJ3.0格式支持多邊形(Polygon),直線(Lines),表面(Surfaces),和自由形態曲線(Free-form Curves)。
直線和多角形通過它們的點來描述,曲線和表面則根據於它們的控制點和依附於曲線類型的額外信息來定義。這些信息支持規則和不規則的曲線,包括那些基於貝塞爾(Bezier)曲線,B樣條(B-spline),基數(Cardinal/Catmull-Rom樣條),和泰勒方程(Taylor equations)的曲線。
OBJ文件 — 特點
(1)OBJ是一種3D模型文件,因此不包含動畫、材質特性、貼圖路徑、動力學、粒子等信息。
(2)OBJ文件主要支持多邊形(Polygons)模型。
(3)OBJ文件支持三個點以上的面。
(4)OBJ文件支持法線和貼圖座標。
OBJ文件不支持有孔的多邊形面
OBJ文件不包含面的顏色定義信息,不過可以引用材質庫,材質庫信息儲存在一個後綴是".mtl"的獨立文件中。關鍵字"mtllib"即材質庫的意思。材質庫中包含材質的漫射(diffuse),環境(ambient),光澤(specular)的定義值, "usemtl"指定了材質之後,以後的面都是使用這一材質,直到遇到下一個"usemtl"來指定新的材質。
OBJ文件 — 基本結構
OBJ文件由一行行文本組成,註釋行以一個“井”號(#)爲開頭,空格和空行可以隨意加到文件中以增加文件的可讀性。有字的行都由一兩個標記字母也就是關鍵字(Keyword)開頭,關鍵字可以說明這一行是什麼樣的數據。多行可以邏輯地連接在一起表示一行,方法是在每一行最後添加一個連接符(/)。
注意連接符(/)後面不能出現空格或tab格,否則將導致文件出錯。
下列關鍵字可以在OBJ文件使用。
在這個列表中, 關鍵字根據數據類型排列,每個關鍵字有一段簡短描述。
頂點數據(Vertex data):
v 幾何體頂點 (Geometric vertices)
vt 貼圖座標點 (Texture vertices)
vn 頂點法線 (Vertex normals)
vp 參數空格頂點 (Parameter space vertices)
自由形態曲線(Free-form curve)/表面屬性(surface attributes):
deg 度 (Degree)
bmat 基礎矩陣 (Basis matrix)
step 步尺寸 (Step size)
cstype 曲線或表面類型 (Curve or surface type)
元素(Elements):
p 點 (Point)
l 線 (Line)
f 面 (Face)
curv 曲線 (Curve)
curv2 2D曲線 (2D curve)
surf 表面 (Surface)
自由形態曲線(Free-form curve)/表面主體陳述(surface body statements):
parm 參數值 (Parameter values )
trim 外部修剪循環 (Outer trimming loop)
hole 內部整修循環 (Inner trimming loop)
scrv 特殊曲線 (Special curve)
sp 特殊的點 (Special point)
end 結束陳述 (End statement)
自由形態表面之間的連接(Connectivity between free-form surfaces):
con 連接 (Connect)
- 成組(Grouping):
g 組名稱 (Group name)
s 光滑組 (Smoothing group)
mg 合併組 (Merging group)
o 對象名稱 (Object name)
- 顯示(Display)/渲染屬性(render attributes):
bevel 導角插值 (Bevel interpolation)
c_interp 顏色插值 (Color interpolation)
d_interp 溶解插值 (Dissolve interpolation)
lod 細節層次 (Level of detail)
usemtl 材質名稱 (Material name)
mtllib 材質庫 (Material library)
shadow_obj 投射陰影 (Shadow casting)
trace_obj 光線跟蹤 (Ray tracing)
ctech 曲線近似技術 (Curve approximation technique)
stech 表面近似技術 (Surface approximation technique)