在3ds Max中準備模型

出自Light Stream (CN)
於 2026年9月3日 (四) 16:12 由 LumiBot留言 | 貢獻 所做的修訂 (Перевод с русской вики (задача №1106, LS Dev Hub))
(差異) ←上個修訂 | 最新修訂 (差異) | 下個修訂→ (差異)

這篇文章講的是模型應該是什麼樣子,才能以合適的大小、正確的朝上方向、且不丟失任何內容進入 Light Stream 的場景。這裡以 3ds Max 為例,但對任何三維編輯器的要求都是一樣的:對程序來說重要的不是模型是用什麼軟件製作的,而是*.obj文件中記錄了什麼內容。關於導入本身的介紹見文章導入OBJ模型

為 Light Stream 準備模型,追求的不是「更好看」,而是「更清楚」。這裡不會有漂亮的渲染效果:程序只用單一貼圖的簡單平塗方式顯示物體。但吸附功能是基於模型頂點工作的,模型中的對象也會成為列表中的一行——在整個項目過程中你都要翻閱這個列表——所以最重要的是正確的比例、乾淨的幾何體和有意義的命名。

哪些內容會轉移到 Light Stream,哪些不會

會轉移 不會轉移
  • 幾何體——三角形和四邊形
  • 對象的劃分及其名稱
  • 法線(明暗關係與平滑)
  • 線條——它們會變成樣條線
  • 展開貼圖坐標(UV)
  • 材質的基礎顏色和基礎貼圖
  • 修改器、構建歷史、骨骼和動畫
  • 圖層、組、「父子」關係
  • 單獨的平滑組
  • 除基礎貼圖外的所有貼圖:凹凸、反射、透明度、自發光
  • 同一對象的第二個及後續材質
  • 光源和攝像機——它們不會從*.obj文件中導入
  • 頂點顏色

單位與比例

坐標是按文件中原樣讀取的:導入時沒有縮放窗口,「輸入時」無法調整大小。

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(頂點吸附)正是依據頂點工作的,這樣固定裝置才能準確落在拐角和邊緣上。如果需要沿一面平整的牆布置一排燈具,就要在模型中沿牆邊添加相應的邊。

導出流程

  1. 在3ds Max場景中,只保留需要傳入Light Stream的內容:模型本身以及用於固定裝置的線條。
  2. 塌陷修改器,把對象轉換為多邊形網格,刪除隱藏和多餘的內容。
  3. 檢查對象名稱:必須存在,且必須使用拉丁字母。
  4. 檢查尺寸,把模型調整到「一個單位等於一毫米」的比例。
  5. 將選中內容導出為*.obj
  6. 在導出設置中:Faces——選擇TrianglesQuadsNormals——開啟;Texture coordinates(貼圖坐標)——如果有貼圖則開啟;Shapes/Lines——如果場景中有用於固定裝置的線條則開啟;Flip YZ-axis——取消勾選;材質導出——開啟。
  7. 把模型、材質文件和貼圖保存到同一個文件夾中,並從該文件夾導入。

導出得到的文件的第一行,導出器會用來寫入關於自身的說明信息——如果你要手動編輯該文件,不要刪除這一行:導入時第一行不會被讀取,你放在這個位置的任何內容都會隨之丟失。

導入後應檢查的內容

  1. 3D View(3D視圖)窗口中不選中任何內容,按Z鍵——攝像機會框住整個場景。在旁邊創建一個立方體,把它的WidthHeightLength都設為1000:如果立面旁邊這個一米見方的小立方體看起來確實是一米見方,說明比例是正確的。
  2. 查看3D Objects列表:所有部件是否都在,名稱是否可讀,線條對應的樣條線是否已導入。
  3. 用攝像機繞模型轉一圈,查找複雜面所在位置是否出現破洞,以及法線翻轉位置是否出現暗斑。
  4. 如果你導出了材質,請確認對象不是灰色的:純灰色說明既沒有找到材質,也沒有找到貼圖。

任何不一致的地方,最可靠的做法是在3ds Max中修正後重新導入:無法用Light Stream自身的工具來完善幾何體,而在編輯器中修正過的模型,還可以在其他項目中重複使用。

還有什麼會用到

  • 導入本身是如何進行的,以及在場景中該如何處理模型——見導入OBJ模型
  • 已導入對象的名稱、可見性、鎖定狀態和材質——見3D對象
  • 頂點吸附以及3D View窗口的其他按鈕——見3D 工具欄
  • 如何在做好的模型上布置固定裝置——見添加3D樣條2D 與 3D 的關聯