在3ds Max中準備模型
這篇文章講的是模型應該是什麼樣子,才能以合適的大小、正確的朝上方向、且不丟失任何內容進入 Light Stream 的場景。這裡以 3ds Max 為例,但對任何三維編輯器的要求都是一樣的:對程序來說重要的不是模型是用什麼軟體製作的,而是*.obj文件中記錄了什麼內容。關於導入本身的介紹見文章導入OBJ模型。
為 Light Stream 準備模型,追求的不是「更好看」,而是「更清楚」。這裡不會有漂亮的渲染效果:程序只用單一貼圖的簡單平塗方式顯示物體。但吸附功能是基於模型頂點工作的,模型中的對象也會成為列表中的一行——在整個項目過程中你都要翻閱這個列表——所以最重要的是正確的比例、乾淨的幾何體和有意義的命名。
哪些內容會轉移到 Light Stream,哪些不會
| 會轉移 | 不會轉移 |
|---|---|
|
|
單位與比例
坐標是按文件中原樣讀取的:導入時沒有縮放窗口,「輸入時」無法調整大小。
Light Stream 的場景以毫米為單位:文件中的一個長度單位等於一毫米。高度30米的建築立面在文件中應占30 000個單位,而LED燈條上單個像素點則是三四十個單位。檢查比例最簡單的方法是用程序自身創建的立方體:在Properties(屬性)窗口的Cube(立方體)部分,把Width(寬度)、Height(高度)和Length(長度)都設為1000——這是一個一米見方的小立方體,把它放在模型旁邊進行比較。
在3ds Max中,最方便的做法是:將系統單位設置為毫米,並按真實尺寸建模——這樣導出時就不需要重新換算,縮放係數保持為1。如果場景是用其他單位搭建的,就在導出時設置縮放係數:從米——1000,從厘米——10,從英寸——25.4。
單位錯誤是導入後「什麼都看不見」最常見的原因。以米為單位導出的模型會比實際需要小一千倍,淹沒在固定裝置(fixtures)之中;而不小心放大了一千倍的模型則會跑到離坐標原點幾公里遠的地方,攝像機里只會顯示一片空白。
朝向
Light Stream 場景中朝上的是Z軸——這與3ds Max中一致。因此在OBJ導出設置中,應取消勾選Flip YZ-axis(交換坐標軸以適應Y軸朝上的約定)選項:如果勾選了它,模型進入場景後會側倒。如果模型確實側倒了,切換一下這個選項,重新導出即可。
導出之前,最好重置變換,並在3ds Max中把模型放到它相對於坐標原點應處的位置:對象之間的相對位置以及文件中的坐標,在導入時會被完整保留。
對象劃分與命名
文件會被解析為若干獨立對象,每個對象在3D Objects(3D對象)窗口中都會成為一行,各自擁有自己的可見性複選框、材質和鎖定狀態。規則很簡單:
- 所有幾何體都必須屬於命名對象。寫在文件中第一個對象之前的內容不會被導入。
- 每個對象都必須有名稱。未命名的對象或組會中斷文件的讀取:寫在它之後的內容將無法進入場景,模型會只導入一半。
- 名稱必須使用拉丁字母,不能使用西里爾字母。這既適用於對象名稱,也適用於模型所引用的文件名——材質文件和貼圖文件。其中的俄文字母在導入時會變成一串問號,同名的貼圖也就無法被找到。
- 不要將對象命名為
light。這是一個保留名稱:名為該名稱的對象的幾何體不會被當作普通裝飾物,而是被當作發光部件——它不會以自身材質渲染,而是以光的方式渲染,在場景中不可見,除非該對象被選中。 - 按含義劃分:如「facade」(立面)、「roof」(屋頂)、「column_left」(左立柱)。由單一整體部件構成的模型在列表中只會是一行——之後就無法單獨隱藏或改變它某一部分的顏色。
- 也不要走向另一個極端:幾百個細小對象會把3D Objects列表變成一條無窮無盡、難以查找的長條。
多邊形
Light Stream 只能讀取三角形和四邊形。擁有五個或更多頂點的面會被靜默跳過——場景中對應的位置會出現破洞。
因此在導出設置的Faces(面)組中,應選擇Triangles(三角形)或Quads(四邊形),而不是Polygons(多邊形)。導出前請塌陷修改器,並將對象轉換為多邊形網格:NURBS、面片、帶布爾運算的實體以及其他未被計算的對象,要麼無法進入OBJ文件,要麼進入後與視口中看到的樣子不一致。
對幾何體還有一個要求:不要導出頂點顏色。如果導出器在頂點坐標之外還附加了頂點顏色,這樣的頂點將完全無法被讀取,頂點編號會發生錯位——面就會按錯誤的點來構建:模型會出現內外翻轉或從中間斷開的情況。
法線
必須將法線寫入文件——在導出設置中對應Normals(法線)選項。程序依據法線計算明暗關係:沒有法線,對象根本不會被打光,在場景中只會呈現為沒有立體感的純黑色剪影。
平滑組本身不會被讀取,但也不需要單獨設置:導出器會把平滑的結果寫入法線中,對象進入場景後會保持在編輯器中同樣的平滑或多面效果。
明暗關係只針對用純色著色的部件計算。帶貼圖的對象會以平面方式渲染,不做明暗處理——法線對它沒有影響。
Light Stream 沒有背面剔除:一個面從兩側都能看見,因此內外翻轉的部件不會消失。但方向背離光源的法線會消除明暗效果:這樣的面會明顯比相鄰的面暗。如果導入後模型上出現暗斑,請檢查編輯器中法線的方向。
用於固定裝置的線條
寫入文件的線條會作為現成的樣條線進入場景——可以直接沿它們布置固定裝置(Fixtures),無需手動描繪邊緣。這是把燈帶、燈串和輪廓燈光路徑傳入Light Stream最方便的方法:在3ds Max中按實際位置用樣條線畫好,進入程序後只需把它們與映射關聯起來即可。
要讓線條能夠導入:
- 開啟其導出功能——在OBJ導出設置中勾選Shapes/Lines(形狀/線條);
- 將樣條線轉換為具有所需點數的折線:曲線在文件中是按線段記錄的,步長越小,進入場景的點就越多;
- 把各段連接成一條線。文件中的每一條線都會成為一條獨立的樣條線,因此由未連接的線段拼成的路徑,導入後會變成一堆零散的短樣條線;
- 如果樣條線沒有出現,請關閉貼圖坐標的導出:有些導出器也會把貼圖坐標寫入線條記錄,而這樣的記錄會被Light Stream跳過。
樣條線的名稱取自的不是線條本身,而是記錄該線條的對象——因此最好把線條整理到單獨且有意義命名的對象中,例如「line_roof」(屋頂線)、「contour_window」(窗輪廓線)。這樣的對象本身不會出現在3D Objects列表中:如果它不含任何面,進入場景的就只有樣條線。
不需要為固定裝置單獨建立對象:3ds Max中的光源根本不會保存到OBJ文件中。如果希望把已經布置好的燈具也傳入程序,可以把模型導出為*.fbx格式——從該格式中,除了對象和樣條線之外,單個固定裝置也會被導入。
材質與貼圖
OBJ把材質存儲在模型旁邊的一個單獨文件中,而貼圖則是另外的圖片文件,因此請開啟材質導出,並始終把模型作為完整的一個文件夾整體轉移。
關於材質,需要事先了解以下幾點:
- 一個對象對應一種材質。多組件材質(Multi/Sub-Object)只會轉移其中一個部分——文件中最後提到的那一個,並且它會被應用到整個對象上。如果部件的不同部分需要不同顏色,請按材質把該部件拆分成不同對象。
- 材質中只會取用基礎顏色和基礎貼圖。透明度、反射、凹凸、自發光以及任何程序化貼圖都會被忽略——最好把它們「烘焙」成普通圖片,或者不要依賴它們。
- 貼圖就是普通的JPG、PNG、BMP或GIF圖片。把它們放在模型旁邊或子文件夾中:程序會按名稱在模型旁邊及所有子文件夾中查找文件。文件名必須使用拉丁字母。
- 貼圖需要展開坐標(UV)。沒有展開坐標的對象,貼圖會被塗抹成單一顏色。
- Light Stream中沒有自發光材質。如果某個部件需要看起來像在發光——例如招牌、屏幕、發光線條——請在導入後,在Properties(屬性)窗口的Material(材質)部分為它啟用Glow(發光)選項。
顏色、貼圖和發光效果也完全可以在程序中手動指定,因此對於輔助性的幾何體,完全可以不在編輯器中設置材質:沒有材質的對象導入後會顯示為灰色。
模型複雜度
模型會被完整嵌入到項目文件內部,因此它的體積就是項目的體積、打開項目所需的時間,以及每一幀預覽時對顯卡造成的負擔。而且在程序中,網格所占用的空間比在編輯器中更大:每個面都要連同自己的頂點一起存儲。
導出前合理的最低限度準備工作:
- 刪除對象上看不見的所有內容:內部結構、背面、隱藏部件、輔助對象、重複的副本;
- 去掉預覽中看不出來的細節:螺栓、型材、紋理細節、一毫米的倒角;
- 減少圓角和管道的分段數量——平滑度的代價很高;
- 在需要的地方保留頂點:Snap to Vertices(頂點吸附)正是依據頂點工作的,這樣固定裝置才能準確落在拐角和邊緣上。如果需要沿一面平整的牆布置一排燈具,就要在模型中沿牆邊添加相應的邊。
導出流程
- 在3ds Max場景中,只保留需要傳入Light Stream的內容:模型本身以及用於固定裝置的線條。
- 塌陷修改器,把對象轉換為多邊形網格,刪除隱藏和多餘的內容。
- 檢查對象名稱:必須存在,且必須使用拉丁字母。
- 檢查尺寸,把模型調整到「一個單位等於一毫米」的比例。
- 將選中內容導出為
*.obj。 - 在導出設置中:Faces——選擇Triangles或Quads;Normals——開啟;Texture coordinates(貼圖坐標)——如果有貼圖則開啟;Shapes/Lines——如果場景中有用於固定裝置的線條則開啟;Flip YZ-axis——取消勾選;材質導出——開啟。
- 把模型、材質文件和貼圖保存到同一個文件夾中,並從該文件夾導入。
導出得到的文件的第一行,導出器會用來寫入關於自身的說明信息——如果你要手動編輯該文件,不要刪除這一行:導入時第一行不會被讀取,你放在這個位置的任何內容都會隨之丟失。
導入後應檢查的內容
- 在3D View(3D視圖)窗口中不選中任何內容,按Z鍵——攝像機會框住整個場景。在旁邊創建一個立方體,把它的Width、Height和Length都設為1000:如果立面旁邊這個一米見方的小立方體看起來確實是一米見方,說明比例是正確的。
- 查看3D Objects列表:所有部件是否都在,名稱是否可讀,線條對應的樣條線是否已導入。
- 用攝像機繞模型轉一圈,查找複雜面所在位置是否出現破洞,以及法線翻轉位置是否出現暗斑。
- 如果你導出了材質,請確認對象不是灰色的:純灰色說明既沒有找到材質,也沒有找到貼圖。
任何不一致的地方,最可靠的做法是在3ds Max中修正後重新導入:無法用Light Stream自身的工具來完善幾何體,而在編輯器中修正過的模型,還可以在其他項目中重複使用。
還有什麼會用到
- 導入本身是如何進行的,以及在場景中該如何處理模型——見導入OBJ模型。
- 已導入對象的名稱、可見性、鎖定狀態和材質——見3D對象。
- 頂點吸附以及3D View窗口的其他按鈕——見3D 工具欄。
- 如何在做好的模型上布置固定裝置——見添加3D樣條和2D 與 3D 的關聯。