2.4 3D場景的制作步驟
1. 場景建模的使用目的
使用地形生成編輯器在模擬自然地形效果上有很大的優勢,但是也有局限性。在表現比較規整的地形,比如一現代化城市,初具規模的小鎮,地下宮殿等等就存在這樣的局限。因為使用地形編輯器建立地形時,地表貼圖的數量不能太多,選擇的地表貼圖的數量越多游戲的運行效率就越低,適合選擇2~3張貼圖。而城市中的地面上所需要的貼圖會非常多,車行道、人行道、草坪等遠不止三張,而且城鎮的街道是非常規整的,這是地形生成編輯器不能做到的。還有很重要的一點,就是用這種方法制作的地面非常省面。
2. 必備的能力
需要熟練掌握3ds max工具的操作。還需掌握一些燈光、渲染器的使用以及光照圖烘培的操作。
3. 場景建模的知識點
視角范圍:視角范圍是玩家在游戲中所能看到的游戲場景的范圍,視角是隨着玩家的移動不停變換的,基於這點才有了場景分塊的必要性。
場景分塊:在游戲中不管你的視角在哪個位置,可能你的視角方向上只能看到幾百個面的模型。如果將整個場景一起導出,游戲中會把整個場景的模型一起渲染。場景中模型的數量不宜很多,過多的模型會嚴重影響游戲的效率及運行速度。在這種情況下,可以采用分塊導出來提高效率。如果將場景分塊導出,就會只渲染視角范圍內的模型,不會渲染完全看不見的模型。
整體建模場景優化是以分割成一塊塊的近似正方型的區域來導出的。
光照圖:給場景中的建築及路面覆蓋一層光照圖。光照圖的大小對場景中陰影部分的清晰程度以及整體場景的氛圍的烘托有很大的影響,從這句話還可以看出,光照圖不單單生成陰影而且可以給模型上覆蓋新的顏色,這由環境光及燈光的顏色來決定。需要根據每個模型來設置光照圖的大小,光照圖最大不能超過1024×1024。
渲染器:用於渲染光照圖。原則上在max里能打出什么樣的效果,就能在游戲場景里得到什么效果。不同的渲染器渲染的時間和質量是不同的,渲染效果越好所花的時間越久。
燈光:用於照亮場景賦予場景氛圍。燈光的設置對場景的氛圍至關重要,沒有燈光就沒有光照圖,就沒有陰影,沒有氛圍,整個場景就會缺乏立體感。
高度圖:用於控制玩家的角色所能行走的高度及范圍。
碰撞:用於控制攝像機和模型是否碰撞。
四方連續:每張貼圖有4個方向的邊緣,四方連續的貼圖就是無論這張貼圖的任意一邊都可以和另外3個邊非常完美的結合,看不出接縫。
4. 制作流程
建模場景和灰度圖生成場景的前期准備相差無幾,即分析地形布局,了解策划需求等。所不同的是,灰度圖生成的場景是先有地表,然后再到編輯器中去添加建築,擺設等物件。由於物件擺的位置不正確(如建築沒有挨着地面等)造成的問題可以很方便在場景里進行調整。而建模場景就有很大的不同,所有的工作都在max里完成,制作上需要更加嚴謹,如果出現以上問題,需要修改的時間就會比較長。
(1)地表模型制作
對於制作流程和工作安排來說,場景中的建築可以先於地形或同時開始制作。制作建模場景是個比較長的過程,制作中地形會根據不同的視角和視覺效果而不斷調整,整個建模場景中,地形的規划和制作尤為重要。地形決定了建築和擺設放置的位置及玩家可以行走的路線。
1)根據設計要求規划場景的可走區域范圍的大小。但是整個場景不能只有可走區域,也要考慮不可行走的區域,用於遮住不想讓玩家發現的地圖角落。這個過程只需要用片大致把范圍表現出來(圖2-44)。
![]() |
內框為可走區域,設置大概的范圍(Length 173.355m Width為188.996m)。外框為不可走區域(Length為232.009m,Width為252.212m)這里的范圍大小不用非常精確,在后期的制作中還會適當調整。
2)制作地面,根據可走區域范圍制作路面分割模型。如圖2-45所示。
![]() |
從上圖可以看到場景地形的功能分布。材質表示車行道,材質表示人行路面及建築地基,材質表示草地。
3)處理地面模型上的接縫,在做路面的時候,會用到多種地表材質。如圖2-46所示,將兩種材質硬接在一起,沒有任何過渡。此時在兩種材質的地面之間需要增加細節,一種比較簡單的處理方式在兩種地面之間添加適當材質的模型,通過這個壓邊模型可以從視覺上將不同材質分開,以避免突兀的效果,如圖2-47所示。
![]() |
另一種方式是通過兩種地面材質之間的融合,結合模型UV的調整來處理過渡。如圖2-48所示。
![]() |
這塊地面是由三個模型拼接而成,分別對應三種材質,草地,沙灘及這兩張材質相融合后形成的第三種材質。如圖2-49所示。
![]() |
4)在地表模型上放置建築,擺設物件。完成地表模型后,接下來的工作就是把做好的建築、擺設、植物等模型,根據地表規划一個個的放置上去。如圖2-50、圖2-51是放置完整的場景。
![]() |
![]() |
這里需要注意,如何避免視覺上的穿幫,出入口的遮掩物為的是避免游戲邊緣地帶的穿幫現象。如在場景四周擺上茂密的樹林或其他物件,因為只是為了做遮擋,並沒有什么實質的功能,遮擋型的物件要注意簡單,面不能多,一般用幾個畫滿樹的面片來代替就可以了,如圖2-52所示。
![]() |
有時將場景設計成盆地,周圍都是山,也同樣可以起到遮擋視線的作用,如圖2-53所示。
![]() |
如果是平原地形,邊緣不能使用山或者其他大型物件遮擋,使用建模建出地圖邊緣遠處的地表(簡單模型,面要少),或者水面連接地圖邊緣,大小要參考在游戲中玩家的視野。如圖2-54所示,在場景的外圍加上看似是路徑延伸的地表,以此來引導玩家很自然地聯想到外面是連續的場景。
![]() |
如果有路或者河流通向地圖邊緣,將路和河流做成S形,如下所示。用S拐角處的山或物件遮擋玩家視線。
![]() |
將來在關卡編輯器中合成的時候,會在場景四周刷上障礙格,即玩家不可以穿越一定的地界,所以不用擔心玩家在游戲中會穿越這些遮擋物而看出破綻。
在第2)步地面的制作時,還有很多其他的技巧,甚至可以制作出僅通過灰度圖而生成的地表,地表貼圖之間融合得非常好,並且不受地表貼圖數量的限制。如圖2-55所示。
整塊地面有幾種不同的材質,如草地、泥地、石頭地等,這些材質全部平鋪在一個模型上,也沒有接縫。
截取上圖地面的一小部分,來詳細說明制作的過程。
![]() |
先觀察圖2-56。
![]() |
可以看到地面上用到的材質有7張,我們一一列出來。如圖2-57所示。
第一排貼圖以砂石地材質為主,第一張材質是基礎,必須是四方連續的,后兩張圖只是在前一張材質的基礎上加了細節,並沒有破壞邊緣的結構,所以第一排材質任意兩張任意角度拼接在一起都不會出現接縫,這樣就可以豐富地面的細節。
![]() |
第二排主要以草地材質為主,同樣也是以第一張四方連續的草地材質為基礎。
第三排的材質尤為重要,是連接草地和砂石地的過度材質。如果沒有這張材質,草地和砂石地是無論如何都無法連接在一起的,就只有通過第二步所說的押邊來處理兩張貼圖的接縫。
如何才能將上面所列的材質拼接在一起?這里我們使用新方法來處理兩張材質的接縫:使用UV工具重新排列模型原始UV分布。
在上面的第二步中並沒有描述地面模型是如何制作的,但整個地面只有一個四邊面模型,通過調整UV的范圍大小來重復材質在地面模型上的排列顯示。如圖2-58~圖2-61所示。
![]() |
![]() |
在新的方法中對於地面模型的制作也需要一定的技巧和要求,應在建模初期就考慮材質大小和地面模型分割面大小的關系,也就是說材質在地面上顯示的重復度與視覺上材質的比例,清晰程度都比較適合。如圖2-62、圖2-63所示。
![]() |
模型上所有的面都是完全重合的,在右圖中就可以看到地面上草地的材質已被重復地顯示。
以這個為基礎,選面指定由草地變化的四方連續的貼圖,就可以使草地的細節更加豐富。如圖2-64、圖2-65所示。
草地與沙地的接縫處理又比較特別,如圖2-66所示。
想把左邊的材質通過UV調整為右圖顯示的分布排列,只需要通過調整地面模型上相鄰三角面UV的角度就可以了。
![]() |
(2)場景模型的優化分塊
圖2-67所示的為場景平面圖。處於不同的位置,會看到不同區域的場景。例如,處在位置1時,可以看到醫療室、實驗樓及兩個建築之間的范圍;在位置2處,雖然落腳點相同,但是視點朝向不同,只能看到醫療室;在位置3處,可以看到體育用品店、銀行、服裝店及周圍的植物。在游戲中,在你的視角方向上能看到幾百個面的模型,也可能看到幾萬個面。
在知識點中提到過場景分塊的基本概念,這里需要詳細了解分塊的具體步驟和注意事項。
![]() |
1)合並物件
場景中的物件,有些會重復擺放多次,比如植物,路燈等,有些可能就只擺放一次,比如場景的標志性建築等。這里需要把所有用於同一張貼圖的物件合並成一個物體,便於在后面的步驟中統一調整UV。如圖2-68,圖2-69所示。
![]() |
)合並貼圖
在優化整體建模場景時,貼圖合並需要有整體優化的概念。整體建模場景優化是以分割成一塊塊的近似正方型的區域來導出的,所以貼圖的合並也要優先考慮同一區域內的貼圖的合並,最大限度減少貼圖數量。通常將類型相似的貼圖合並在一起,如透明貼圖與透明貼圖合並,不透明貼圖與不透明貼圖合並,建築與建築貼圖合並,植物與植物貼圖合並等。利用率高的貼圖和利用率低的貼圖不要合並在一起,比如樹干的貼圖利用率就很高,而且分布的區域很廣,導出的時候會分成好幾塊。建築的貼圖利用率很低,可能就一塊區域需要它,這兩張貼圖合並會生成更大的貼圖,每次繪制樹干的時候調用這張大貼圖,會降低效率。
我們以巴士和雙層商店模型為例,將兩張貼圖合並,如圖2-70,圖2-71所示,左邊是貼圖,右邊是模型。
![]() |
打開Photoshop,打開巴士和雙層商店這兩張貼圖。新建一個512×512的圖片,運用“編輯”菜單下的選項“自由變換”,或者快捷鍵Ctrl+T,將前面兩張圖片拖放到這張新圖片里,並調整大小,使之合並成一張圖片,如圖2-72所示。此時,巴士和雙層商店就合並為使用同一張貼圖的兩個物件了。
![]() |
![]() |
但是如果這時將模型合並,並把該貼圖指定給模型,肯定會出錯,因為貼圖的UV分布被打亂。如圖2-73所示。
![]() |
重新調整UV。進入“元素”層級,選擇整個“巴士”模型,然后在“修改器列表”下選擇“UVW展開”,或者直接點擊下面“UVW展開”按鈕,如圖2-74所示。點擊“參數”卷展欄下的“編輯”按鈕,打開“編輯UVW”對話框如圖2-75所示。在右邊的工具欄內選擇“拾取紋理”,然后通過“位圖”把剛才那張貼圖加載進來,以方便觀察,如圖2-76所示。利用該面板中的縮放工具將UV縮放到合適的位置如圖2-77、圖2-78所示。
|
此時,巴士的貼圖已經正常顯示,執行同樣的步驟改變雙層商店的UV,如圖2-79。
上面的例子中只是把兩個物件的貼圖合並,在實際制作中,可以將4個甚至更多的貼圖合並在一起,主要是根據場景的布局,貼圖大小等。
第三步,再次合並相同貼圖的模型。
第二步操作后,會產生更多的使用同一張貼圖的模型,同樣需要把場景中所有使用同一張貼圖的模型合並。
具體步驟:選擇巴士,進入“可編輯多邊形”的“元素”層級,點擊“編輯幾何體”卷展欄下的“附加”按鈕,然后點選雙層商店,就將兩個模型合並在一起,如圖2-80。
![]() |
3)根據場景布局分塊。這是最關鍵的一步,需要記住5個原則。
第一,每個分塊中所包含的模型三角形面數不超過10000個。如圖2-81所示。
![]() |
第二,因為無論怎么分塊,在max中的選擇框都是矩形方式,所以要盡可能的用游戲中的視角考慮分塊,在同一視角下分塊的數量越少越好,這是個經驗積累的過程。如圖2-82、圖2-83所示。
![]() |
![]() |
第三,地面的模型單獨成一塊,不要切割。可能這里有人會問,整個地面如果不切割那不是在任何時候都會把地面渲染出來,包括不在視角中的模型。主要原因是,如果地面使用了切割必然模型上需要分離,然而在使用光照圖打包后的模型,如果一個面上有點沒有合並就會出現明顯的黑邊,地面上是不允許出現黑邊的,必須是完整的。另外一個原因就是,本身地面的模型面數比較少,就算放在一起對整個場景的效率影響不大。如圖2-84所示。
![]() |
第四,與攝像機產生碰撞的物體和不產生碰撞的物體不能分在一個區塊中。在關卡編輯器中,每個拖到場景中的模型都會有個碰撞的屬性,0為不碰撞,1為碰撞。,一些不規則的物體,如花圃、樹葉、灌木,由於他們面之間互現穿插導致攝像機一旦出現在這里就會做無規則的運動。一般來說我們會取消它的碰撞。
第五,動態物件應單獨分組。如果場景中有一些動態的物件,譬如隨風搖擺的大樹、晃動的旗子等,它們不需要導出pologonsoup,但是仍然要在建模場景中擺放它們的靜態模型,目的是在其位置上產生陰影,將來在關卡編輯器中整合的時候添加它的動態模型。如圖2-85所示,在場景中擺放靜止的大樹,在圖2-86中,雖然沒有將這些大樹導出polygonsoup,但是地面上會留有陰影。
![]() |
(3)設置燈光
基於3D游戲的現狀,“接近真實”是一種常見選擇。要達到這種真實效果通過模型的精確、細膩是遠遠不夠的。如,動作冒險影片的照片和人站在街上的普通照片之間的視覺差異,兩張照片看起來都具有真實性,但動作片已經經過小心剪輯,形成了一種強化、聚焦的現實。縮短的焦距、小心高速的光線和攝相機角度產生了比現實更真實的效果,這種真實對於能否產生心跳、手心出汗的效果至關重要。對於一幀靜態的圖片或是連續的動畫來說,要體現出它的真實感與藝術性就必須精心地處理燈光效果。
在三維游戲場景中,燈光的作用不僅僅是將物體照亮,還要通過燈光效果向玩家傳達更多的信息。也就是通過燈光來決定這一場景的基調或是感覺,烘托場景氣氛。在燈光中表達出一種基調,對於整個圖像的外觀是至關重要的,燈光有助於表達一種情感,或引導觀眾的眼睛到特定的位置,可以為場景提供更大的深度,展現豐富的層次。
要達到場景最終的真實效果,我們需要建立許多不同的燈光,因為在現實世界中光源是多方面的,如陽光、燭光、瑩光燈等,在不同的光源下所觀察到的事物效果也會不同。
3ds max中主要有6種燈光,包括:目標聚光燈、目標平行光、自由聚光燈、自由平行光、泛光燈、天光。這6種燈光可通過Create命令面板中Lights項目欄中創建,如圖2-87所示。
我們可通過以上5種燈光對虛擬三維場景進行光線處理,使場景達到真實的效果。
![]() |
1)聚光燈。目標聚光燈和自由聚光燈,這種燈光可通過照射方向和照射范圍對物體進行選擇性的照射,如圖2-88所示。
![]() |
2)泛光燈。泛光燈是一個點光源,可以照亮周圍物體,沒有特定的照射方向,只要不是被燈光排除的物體都會被照亮。在三維場景中泛光燈多作為補光使用,用來增加場景中的整體亮度。
如圖2-89所示。
![]() |
3)平行光。目標平行光、自由平行光可以用來模擬陽光效果,也可以對物體進行選擇性的照射,是在三維場景中常用的一種燈光。如圖2-90所示。
![]() |
4)天光。“天光”燈光建立日光的模型,意味着與光跟蹤器一起使用,可以設置天空的顏色或將其指定為貼圖。對天空建模並作為場景上方的圓屋頂。使用默認掃描線渲染器渲染時,將天光設為高級照明效果最佳。如圖2-91所示。
![]() |
除了通常類型的燈光外,很多三維動畫軟件以白熾燈、立體光源和特殊材料屬性的形式提供許多特殊效果。嚴格說來,某些並不屬於燈的類型,在場景中,它們通常是在可見光效果的外觀上添加進來的。一個簡單的例子是可見光源的閃耀或發光。由於這些效果在3D中不能自動產生,你需要在渲染中專門把它們包括進來,並且考慮其外觀和長處。
渲染功能將顏色、陰影、照明效果等加入到幾何體中,從而可以使用所設置的燈光、所應用的材質及環境設置(如背景和大氣)為場景的幾何體着色。使用“渲染場景”對話框可以創建渲染並將其保存為文件。渲染也可顯示在屏幕上或渲染幀窗口中。
3ds max附帶三種渲染器,其他渲染器可能作為第三方插件提供。3ds max附帶的渲染器有默認掃描線渲染器、mental ray渲染器和VUE文件渲染器。
用於渲染的主命令位於主工具欄上,調用這些命令的另一種方法是使用默認的“渲染”菜單,該菜單包含與渲染相關的其他命令,如圖2-92所示。
![]() |
場景中燈光設置可以使用max提供的所有燈光種類以及渲染器,不同種類的燈光和渲染器渲染的速度會很大不同,這里就不再詳細說明,可以參考max中關於燈光渲染的專門書籍。
(4)渲染光照圖與導出模型
在設置完燈光后,我們對每個需要導出的模型渲染光照圖,把燈光信息和陰影信息單獨保存成一整張圖片,然后通過引擎的圖片疊加方式,把模型本身的貼圖和光照圖疊加,最終完成整個場景。如何渲染導出請參考max導出工具章節。
(5)在關卡編輯器中擺放分塊場景模型
在關卡編輯器中,擺放物件和分塊場景的操作是一樣的,只是選擇的type類型不同,如圖2-93、圖2-94、圖2-95所示。
![]() |
![]() |
在type中選擇transdyna(動態類型節點),這個節點能保證所拖到編輯器的分塊模型都以原點中心為坐標軸,不會出現不同分塊的模型位置對不上的現象。
至此場景模型的制作和導出就全部完成了,接下來生成網格高度,這部分操作和其他地形的制作沒有兩樣。
5. 常見問題及解決方案
(1)分塊技巧
將一塊區域的模型以父子關系連接在一起,比如樹和樹下的灌木、草,可以以樹為父結點,將灌木和草以子節點連接上去。此法效率比較高,在引擎讀入的時候就以一個模型載入。
(2)動畫文件效率
關鍵幀動畫模型作為擺設放在場景里,數量盡量少,過多的數量會極大地影響游戲的效率。
如果一個動畫模型僅僅只是小部分有動畫,那么把這小部分單獨分離成一個動畫模型,另外的部分導成靜止的普通模型,再在編輯器里組合成一個cluster節點再放到場景中,會比前一種的效率明顯高。動畫文件的效率優先級別為:矩陣動畫>keyframe動畫文件。動畫幀物件的數量
也會影響到場景的運行效率。
(3)pologonsoup與keyframe文件的縮放與移動
從MAX中導出的pologonsoup和keyframe格式的文件,整合到關卡編輯器中時,不要同時進行移動和縮放操作,否則攝像機不會與其發生碰撞,在放置分塊場景的時候更需要注意,甚至不要進行移動和縮放。
再分享一下我老師大神的人工智能教程吧。零基礎!通俗易懂!風趣幽默!還帶黃段子!希望你也加入到我們人工智能的隊伍中來!https://www.cnblogs.com/captainbed