2006年12月16日 星期六

G3D - 為什麼在Linux 3D運算效能差?

Standard

還記得近十年前,166、200、233MHz 的 CPU 就已經可以將 3D 遊戲跑的有形有色,當初令我一度沉迷在摩托雷神、極速快感的遊戲當中。可是直到今天CPU速度都破1G、2GHz以上了,在Linux 中 的 3D 遊戲,那怕是幾顆小球滾來滾去的撞球遊戲,都還是慢的可以。一向以技術掛帥不斷改進的Linux,卻在這方面還比不上十年前的 Windows 95?

沒錯,其實是因為 3D 卡的驅動程式沒裝,所以3D遊戲才會這麼慢。可是,十年前那時候我好像也沒裝3D加速卡。那到底是為什麼,Linux在 3D 顯示運算這麼的落後?

事實上,在 Linux 裡顯示 3D,一向走的是 OpenGL,OpenGL是一個3D的工業標準,遵循它可以良好的利用 3D 運算晶片,但OpenGL也是一個極大的包袱,如果在沒有加速卡的情況下運算,速度肯定令人吐一大桶的血。

為 了解決這問題,Windows 早期就開發了 Direct 3D,用來整合3D運算,在有硬體加速的環境,Direct 3D可以良好的使用硬體加速,而在沒有硬體加速的情況下,它自有一套軟體運算方法。所以,在早期的舊電腦中,Windows上的 3D 遊戲都可以在沒有加速 卡的情況下,跑的還算順暢。

Linux中可就沒有這種設計,不管硬體是否有支援,全都使用OpenGL硬著頭皮跑下去,畫面當然是卡的嚴重。所以就有人為此設計了一個功能類似Windows上Direct 3D的函式庫,它就是 G3D (http://g3d-cpp.sourceforge.net/)。



如圖所示,G3D是介於3D應用程式與硬體之間溝通的橋樑,它可以依狀況選擇使用CPU運算或是走OpenGL交由圖形晶片運算。不過目前還沒看到什麼遊戲或3D應用程式使用G3D,看來在Linux上的3D環境還是需要3D晶片的強力支援了。

後記

不過到了今天,幾乎每一台電腦最少都內建 3D 晶片的情況下,是不是要用 G3D 為 CPU 重新開僻一條運算道路,有待評估空間的很大。但是,如果考慮到部分廠商沒公開驅動程式原始碼,且限制驅動程式的使用和散播方式之下,對於在 Linux 上安裝驅動程式這件事還是只有專業玩家能勝任,各 Linux 發行商無法做太大動作的整合。在這種情況下,預設要能跑出正常順暢的 3D 運算,還是要嘗試使用 G3D 看看。