使用 XNA 建立遊戲/3D 開發/天空盒
天空盒給遊戲一個周圍的環境和基礎。無論是賽車、第一人稱射擊遊戲還是太空模擬,天空盒都讓遊戲感覺更真實。在最原始的版本中,它只是將 6 張影像投影到無窮遠處一個假想立方體的各個側面。在這裡,我們將向你展示如何輕鬆地建立簡單的天空盒。但天空盒也可以更復雜。它們可以是圓頂形狀的,可以模擬日落和黎明,以及升起的太陽。另外還提供瞭如何建立這些天空盒的示例。
首先你需要為每個立方體面建立六張影像。有多種方法可以實現這一點。然而,這取決於你想要在場景中呈現什麼。因此你可以拍攝一些數碼照片並從中生成天空盒。另一種可能性是使用其他人建立的天空盒(公有領域)。當然,如果你從頭開始建立一切,你將擁有最大的自由。這就是我們要做的事情。在下面的示例中,我們將使用 Terragen 2(非商業版本)。
我的重點是為你帶來快速的結果,而不是深入的資訊。如果你想更深入地研究,請檢視我為我的指南提供的教程。
啟動 Terragen 後,你會看到預設場景,包括一個帶有大氣層的扁平星球。第一步是將這個扁平空間改造成更有趣的地形。

你可以使用 高度場 和 過程生成 在 Terragen 2 中生成地形。

- 點選“立即生成”按鈕,等待程序完成。3D 預覽現在顯示了新的地形。
- 放大右上角 Terragen 視窗的“導航面板”

- 它將變為完整的導航控制
- 你可以使用這些控制元件在場景中導航。點選“立即生成”按鈕,使用這些引數進行試驗,以瞭解它們如何影響地形。
- 然後找到一個你喜歡的點,例如山頂或山丘。
- 在 3D 預覽部分下面的工具欄中找到“複製到當前相機”按鈕。點選它將改變渲染相機到你當前的視角。執行此操作。

- 點選頂部工具欄中的“開啟渲染檢視”(R)按鈕,然後按下“渲染”按鈕。

等待渲染器完成,欣賞你的第一個渲染檢視。現在使用“導航控制元件”移動到地面上方的位置,這樣你就可以看到地平線。你會注意到仍然有很多平坦的表面。這是因為高度場的限制。現在,我們可能想要使用過程生成來改變這一點。

- 首先透過選擇“高度場著色器”並取消選中“啟用”複選框來停用它。
- 現在表面將再次變得平坦。
- 點選“新增地形”,然後選擇“動力分形”。
- 節點列表中將出現一個新的“動力分形”節點。你可能想要給它一個好名字,並將其重新命名為“山脈”。
- 注意整個地形是如何改變的。到處都是山脈!
- 現在再次使用“導航控制元件”選擇一個合適的視角點。選擇一個具有良好海拔高度組合的點,例如被山脈環繞的谷底。
- 然後再次點選 3D 預覽部分下面的工具欄中的“複製到當前相機”按鈕。
- 點選頂部工具欄中的“開啟渲染檢視”(R)按鈕,然後按下“渲染”按鈕。

現在我們將使用著色器新增更鮮明的顏色和紋理。
- 點選節點列表上方的“新增層”按鈕,然後從下拉選單中選擇“表面層”。節點列表中將出現一個新的著色器節點。
- 現在轉到新新增的著色器的“顏色選項卡”,並使用“顏色選擇器”選擇綠色/黃色色調。
- 你可能想要將其重新命名為“草”,因為我們將使用這個著色器來為世界新增草。
- 轉到“海拔高度約束”選項卡,並選中“限制最大海拔高度”複選框。
- 將“最大海拔高度”設定為 400-500 之間的值。
- 將“最大海拔高度模糊區域”更改為約 100 的值(海拔高度約束處的截止點的銳利程度)。
- 轉到“坡度約束”選項卡,並選中“限制最大坡度”複選框。
- 將“最大坡度角”設定為約 30 的值。
- 將“最大坡度模糊區域”更改為約 15 的值。
你可能想要花一些時間調整上面提到的所有引數,以便將所有東西都按照你想要的方式塑造。渲染以檢視調整的效果。
- 轉到覆蓋和分解選項卡。覆蓋控制此圖層將覆蓋的底層表面的數量。分形分解控制圖層的分佈。
- 將覆蓋設定為 0.7,將分形分解設定為 1 以獲得良好的效果,但可以根據需要進行調整。
如您所見,Terragen2 是一個強大的工具,但這僅僅是開始。您可以繼續新增雪山、快速山谷和水,然後整合大氣和閃電。我們現在將其留待處理,並開始構建我們的天空盒。

現在,您必須決定您想在專案的天空盒中呈現哪個視角。繼續並使用導航控制元件找到一個好位置。
切換到相機佈局
在這裡,您將看到新相機的列表以及預設的渲染相機。我們將使用這六個相機來渲染天空盒所需的所有檢視。但首先,我們必須配置它們。
- 選擇第一個相機,並將其重新命名為北。三個位置欄位描述了您的實際位置,並將與我的不同。
- 將旋轉欄位的三個值設定為 0。
- 選擇透視單選按鈕,然後選擇使用水平視野單選按鈕。將值更改為 90 度。
按以下表格編輯其他相機
| 相機 01 | 相機 02 | 相機 03 | 相機 04 | 相機 05 | 相機 06 | |
|---|---|---|---|---|---|---|
| 名稱 | 北 | 東 | 南 | 西 | 上 | 下 |
| 位置 | a/b/c | a/b/c | a/b/c | a/b/c | a/b/c | a/b/c |
| 旋轉 | 0/0/0 | 0/90/0 | 0/180/0 | 0/270/0 | 90/0/0 | 270/0/0 |
| 透視 | 已選中 | 已選中 | 已選中 | 已選中 | 已選中 | 已選中 |
| 水平 FOV | 已選中 | 已選中 | 已選中 | 已選中 | 已選中 | 已選中 |
| 值 | 90 | 90 | 90 | 90 | 90 | 90 |
注意:a/b/c 是您的位置值的佔位符。找到要用於天空盒的相機位置後,您只需將相同的值複製到所有六個相機即可。
- 選擇快速渲染,並使用渲染器詳細資訊檢視中的新增將六個相機中的一個分配給它。
- 單擊渲染影像以檢視其低質量渲染。
- 您可能想要重複此操作以檢查所有相機。
Terragen 2 中有兩個預配置的渲染器。完整渲染旨在生成高質量的輸出。因此,您只會在想要測試專案真實外觀或想要渲染和匯出時使用它。這取決於您的設定,但預計此渲染器將花費一些時間。快速渲染旨在讓您快速瞭解,因此渲染時間很短。當然,您可以根據需要配置它們,或建立其他渲染器。
現在,我們將配置完整渲染器,然後為天空盒建立所有影像。
- 選擇完整渲染,並將影像寬度和影像高度更改為 512。
- 使用新增按鈕選擇一個相機,並將其分配給渲染器。
- 在質量選項卡中,將細節引數設定為 1。
- 現在,從相機下拉列表中選擇第一個相機,然後按渲染影像按鈕。
- 等待渲染器完成。
- 單擊儲存按鈕將影像儲存到磁碟。由於我們將與 XNA 一起使用,您可能需要將其儲存為 Windows 點陣圖 (.bmp)
- 然後渲染其他相機。
關於在場景中使用 GI 的說明
您可能想要透過將GI 相對細節、GI 樣本質量和GI 模糊半徑設定為零來關閉 GI(全域性照明)。
這是因為 GI 會導致天空盒中出現可見的邊緣。您可能需要調整照明配置以照亮場景。

渲染完所有相機後,您可能想要在您喜歡的影像編輯程式中對齊影像,並檢查它們是如何拼湊在一起的。

將天空盒新增到 XNA 專案的一種方法是生成立方體貼圖檔案,您可以稍後輕鬆載入它。一個快速簡便的方法是使用 ATI 的名為CubeMapGen 的工具。

在 CupeMapGen 中
- 選擇D3D 立方體作為匯出影像佈局。
- 在顯示部分選擇天空盒複選框。
- 現在,您可以將天空盒影像應用到立方體面,方法是從下拉選單中選擇立方體面,然後載入相應的影像,並單擊載入立方體貼圖面按鈕。
根據之前建立的天空盒影像的對齊方式,軸對映如下
| 東 | 西 | 上 | 下 | 北 | 南 |
|---|---|---|---|---|---|
| X+ | X- | Y+ | Y- | Z+ | Z- |
完成時,透過單擊儲存立方體貼圖 (.dds) 按鈕將立方體貼圖儲存為 DDS 檔案。
與天空盒相同的概念,但使用的是球體而不是立方體。可用於模擬大氣和太陽運動(黎明、黃昏)。
請參閱有關如何建立這些的教程。
http://www.planetside.co.uk/wiki/index.php/Terragen_2_Tutorials#360.C2.BA_Panoramas_.2F_SkyBoxes
http://www.planetside.co.uk/wiki/index.php/Main_Page
http://en.wikipedia.org/wiki/Skybox_(video_games)
http://wiki.delphigl.com/index.php/Skybox
http://wiki.delphigl.com/index.php/Skybox
http://www.stromcode.com/2008/03/30/building-an-xna-skybox-with-blender/
http://rbwhitaker.wikidot.com/skyboxes-1
http://wiki.delphigl.com/index.php/Tutorial_Skyboxen
準備好的可免費使用的天空盒(公有領域)
http://rbwhitaker.wikidot.com/texture-library
http://wiki.delphigl.com/index.php/Skydome
http://www.xnamag.de/article.php?aid=40
http://www.flipcode.com/archives/Sky_Domes.shtml
https://wikibook.tw/wiki/Blender_3D:_Noob_to_Pro/Build_a_skybox
http://en.wikipedia.org/wiki/Cube_mapping
http://www.planetside.co.uk/docs/tg2/first-scene.pdf
http://www.outpt.co.uk/how-to-create-a-terragen-2-skybox/
arie