2010-12-17 75 views
5

對於我正在開發的計算機遊戲,我想繪製非常大(〜500像素)的行星圖形緩慢旋轉。這些圖形是爲了留下深刻的印象。這樣做的最好方法是什麼?遊戲中大而緩慢旋轉的行星圖形

  • 我可以預先渲染每個幀,但是在500px和10秒的旋轉週期內,這是每個星球上可觀的數據量。
  • 我可以使用3D引擎並將行星的紋理映射到接近球體的網格上,但在500px處,我擔心多邊形數量必須很大以使其看起來不錯。
  • 我可以編寫一種自定義3D引擎,它通過將每個視圖像素的x/y座標轉換爲球體紋理的座標空間,從而高效地渲染紋理球體,但是這是涉及到的,不會受益於圖形加速。
  • 我還沒有想到的其他東西?

下面是我的意思是一個動畫GIF的例子。 (在100x100像素和60幀,它已經相當龐大,很抱歉。)試想一下,這個非常非常大,旋轉慢得多,和動畫更流暢:

alt text

但是,如果這是500×500像素和10× 25 = 250幀,我們會談論數百MB的數據,所以這種直接的方法不起作用。

+0

這可能在http://gamedev.stackexchange.com/更有針對性。 – Jon 2010-12-18 01:34:30

回答

6

Fracplanet可以保存「球體貼圖」紋理貼圖(和凹凸貼圖);看到gallery底部的圖像。這些應用程序隨後會被讀入應用程序並映射到相對較低分辨率的球體幾何圖形上,以達到我想要的效果。此方法將使用比預渲染動畫方法更少的內存或使用原始全分辨率多邊形模型。

是的,這基本上是你的第二個要點,但我不會那麼快地將這種方法排除在外,我想你會發現你可以用比預期更低的分辨率範圍逃脫;眼睛注意到紋理中的精細細節遠遠超過它注意到它所覆蓋的幾何體的低分辨率。現代的tessellation hardware意味着你可以讓GPU很容易地爲你生成和渲染一個荒謬的多邊形球體。

替代想法:渲染一個足夠大的單一方形四邊形多邊形以覆蓋地球。對於其中的每個像素,執行一個像素着色器來計算屏幕光線球面交點(如果有的話)。查看行星紋理的顏色(考慮時間和行星旋轉)。避免需要大量多邊形併爲您提供精確的球體。

+0

在最後一段中,沒有一種高度圖技術可以用於製作球形外觀? – 2011-04-27 17:39:39

1

如果您要進行預渲染,那麼根據玩家實際看到玩家的可能性,將會如何在遊戲運行時渲染所需幀的算法 - 從「確定」到越來越不可能基於遊戲引擎在哪裏允許玩家可能在x秒時間內與在那個時候應該在哪個幀中查看幀一起到「不可能」並且因此不被渲染?

+0

+1我不確定它是否完全回答了這個問題,但我真的很喜歡這樣的可能性的預測...... – Basic 2010-12-18 01:45:23

+0

好吧,聽起來像OP有他的基本策略 - 我建議一種方法來使他們否則他們可能無法工作。爲了詳細說明這一點,在需要的時候,專門用於渲染背景的時間將會被擡高,因爲你不能讓引擎離開。儘可能簡單地減少不必要的工作,但是你仍然必須確保你也做了必要的工作。 – 2010-12-18 10:31:30

0

您可以移動相機關於物體的位置(這隻有在所有物體居中的情況下才起作用),或者轉換物體。後者通常是完成的。

我可以推薦看看容易學習的sf.net/projects/a3d。 draw_asteroids使用glRotate呼叫,所以就是這樣。此外,如果我聽到了正確的話,Doom3引擎引入了bezier行,所以遊戲(或球體)中的圓角應用於此案例 - 不需要由量化點組成(產生你正在考慮的醜陋網狀網絡)。

1

如果你的行星總是與屏幕正交旋轉,那麼只有一個行星紋理可以滾動並被一個圓圈遮住。

如果你想要一個任意的旋轉軸,你會想問自己哪個更容易,3D解決方案或使用一對壓縮紋理來保存所有的幀。如果你已經很容易使用3D流水線。

如果你製作一個256x256的幀,你可以在1024的紋理上適合16個幀,所以60幀只需要4個紋理。使用DXT3壓縮,你可以預計這是每個紋理約1 MB(非常合理)。

+2

但地球上不同的緯度當然會以不同的速度滾動? – Zarkonnen 2010-12-17 19:53:32

+0

另外,考慮到我希望旋轉週期約爲10秒,那更像是500x500的250幀,或者是大約220 MB的未壓縮數據...... – Zarkonnen 2010-12-17 19:55:42

2

如果你想要圖形加速,那麼多邊形很便宜 - 相當多的多邊形不是問題。

我推薦一個立方體貼圖貼圖和一個相應的類似立方體的三角形網格:從一個頂點網格開始,以一個立方體的(表面)爲原點,並將每個三維座標標準化爲單位半徑。這將使計算您的紋理座標變得容易。

請記住,您需要爲您的紋理選擇正確的投影:在上述情況下,您需要每個立方體面的切線投影以匹配您的網格。

2

這樣做的古老方式是預先創建一個球體的圖像,而不是將紋理UV存儲在每個像素中的表面紋理的顏色作爲查找表存儲。 現在,您可以通過繪製預渲染圖像來渲染球體,但是可以從圖像中的UV中查找行星表面紋理中的相應紋素。爲了使地球旋轉,您可以向查找表格圖像中找到的uv座標添加偏移量。確保你使用了模數加法,所以紋理很好地包裹起來。 如果您想要在地球上添加陰影,您可以將其添加爲紋理頂部的單獨通道。

這種方法很可能比沒有內置圖形加速的硬件上的紋理多邊形版本快得多,並且您還可以根據需要使用盡可能多的多邊形渲染它,因爲渲染是預處理。