因為一些原因,所以scene manage暫時不能去動,
其實這一塊還有進步空間。
現在只能以我的部分去試著作一些最佳化。
今天把水底下的任何物件不去作SSAO的運算,
這樣做有好處是:
1.減少pixel的大量運算。
2.在視覺上有正確性的幫助。
第一點的意思比較直覺,因為能夠減少SSAO的運算當然是最好的,
這也是當初用1/2的frame buffer的原因。
第二點要說明一下了,我看過很多的SSAO demo,
就是少了水底下的物件要怎去呈現!
唯一在unreal 3 的demo中,就有看到了。
它還是水底下中有運算到SSAO,但是這作的話,反射的效果會很不明顯。
而且如果沒有反射和折射的效果的話,只是單純的noraml map去抖動,
那水面下會看到SSAO運算到的物件,簡單說:可能會看到黑邊。
所以第二點就是把水底下的物件不去運算SSAO。
其實當我在優化時候,突然想到還有一種優化方式,
不過現在還在實作中,可行性滿高的。
以上的優化方式只是針對GPU的瓶頸去處理的,
CPU的瓶頸還是要去修改scene manage的演算法。
最後,個人一些感嘆:
我看過一些台灣人作出一些高技術的demo,
但是在產品往往看不到此技術。
其實我覺得作出來demo跟商品化還是有一段距離,
尤其是高技術層面的,因為除了還要跟美術去磨合之外,
還有一些問題要去處理,尤其是效能上的。
就好像做出SSAO,但是放上去只剩下幾張fps在動,
我想這根本無法商品化。還有,就是玩家的顯示卡!
這點是很頭痛的,一個game engine,為了考量大量市場,
所以把技術層面降低再降低(聽說仙X Online是這樣?!)。
再掌握高技術同時,也要考慮到底下的人,
如果底下的人想要看此遊戲的完整畫面,只能乖乖去升級,
順便幫Nvidia和AMD賺錢XD。
不過要切記的是,技術愈來愈高並不是單純看高質量的遊戲畫面,
它背面還有針對效能上的提升,所以才有高質量的遊戲畫面誕生。
不講GPU和CPU,光是DX9和DX10之間,我就覺得差滿多的。
所以再過幾年,國人還是在遊走DX9的fixed pipeline的同時,
別人早在DX10或DX11的平台下開發了。
2009年2月27日 星期五
2009年2月20日 星期五
我討厭fixed pipeline
這一個禮拜都在搞fixed pipeline。
發現到他的texture blend的operation好少呀~~
雖然lighting方面都是平行光,不過關於light map的混色很麻煩。
如果只是單純混色就好了,也不會花一天的時間去搞。
還有利用fixed pipeline去寫一個project texture,
以上這些動作都是在Effect中。
這一切的一切都是要支援低階卡的關係,
我們的規格會跟WOW一樣,從GeForce 2 MX400開始,
那張卡是支援DX7的,也就是....9年前的顯示卡,
簡單說就是從hardware T&L 一直到 shader model 3.0都有支援到,
不過我們的shader model是從2.0開始,
我們不打算寫shader model 1.0,那種的顯卡是DX8的,
所以還是會用fixed pipeline的方式去作成像的動作。
///////// 09/2/25 ///////////
今天終於拿到ATI Radeon 7000的顯示卡(另稱貧卡或DX7.0卡)。
主要是拿來測試一下我寫的fixed material,
結果發現到!它可以支援用軟體去模擬vertex shader 1.0,
速度上雖然跟一般的fixed pipeline有一點差別,
不過我們的目的不再專攻DX7.0,而是DX8.0的市場,
如果是這樣的話,那我根本不需要有多大的變動,
但是terrain還是有一點頭痛。這等以後再講吧~
在這幾個月還是專注於架構上,沒什麼時間去寫高階的shader。
發現到他的texture blend的operation好少呀~~
雖然lighting方面都是平行光,不過關於light map的混色很麻煩。
如果只是單純混色就好了,也不會花一天的時間去搞。
還有利用fixed pipeline去寫一個project texture,
以上這些動作都是在Effect中。
這一切的一切都是要支援低階卡的關係,
我們的規格會跟WOW一樣,從GeForce 2 MX400開始,
那張卡是支援DX7的,也就是....9年前的顯示卡,
簡單說就是從hardware T&L 一直到 shader model 3.0都有支援到,
不過我們的shader model是從2.0開始,
我們不打算寫shader model 1.0,那種的顯卡是DX8的,
所以還是會用fixed pipeline的方式去作成像的動作。
///////// 09/2/25 ///////////
今天終於拿到ATI Radeon 7000的顯示卡(另稱貧卡或DX7.0卡)。
主要是拿來測試一下我寫的fixed material,
結果發現到!它可以支援用軟體去模擬vertex shader 1.0,
速度上雖然跟一般的fixed pipeline有一點差別,
不過我們的目的不再專攻DX7.0,而是DX8.0的市場,
如果是這樣的話,那我根本不需要有多大的變動,
但是terrain還是有一點頭痛。這等以後再講吧~
在這幾個月還是專注於架構上,沒什麼時間去寫高階的shader。
2009年2月11日 星期三
優化pre-pass和post-pass
昨天把real-time sadow整合完畢之後,試著把SSAO加進去。
在繪製大量物件時(註),發現frame降滿多的,
因為以我的神卡是不可能運算過慢,
所以瓶頸還是出在於CPU上。
其實義大利人對於RenderState Change的優化早就有作了,
讓我剩下的優化方式很簡單:就是所有的物件都是instancing。
作用是大大降低DrawXXXX的driver work,
將顯示卡的威能給顯示出來。
這點在DX10作得很好!所以當初為什麼想丟棄DX9的原因。
在這時間點真的要作一下優化了,因為後面還有其他效果要作,
如:SSAO、PSSM、DOF、dynamic lighting、HDR、motion blur。
這是最基本的,後續要作God Rays...等之類,可以讓玩家自由去選擇。
/////// 09/2/16 ///////////////
終於尋找到效能上的問題!
原來是BOOST_FOREACH的使用方式錯誤Orz。
會導致有7000個物件,白白去作拷貝的動作,
其實我的原意並不是這樣。
以下是修正後:
環境:
雙核心 3.01ghz GPU:ATI 4870
解析度:1440 * 900
ssao off
物件總量 = 7400
polygons =308357
drawcall = 733 (包含instance drawcall 的數量)
instance drawcall =527
fps 30
////////////////////////////
ssao on
物件總量 = 7400
polygons = 681737
drawcall = 1281(包含instance drawcall 的數量)
instance drawcall = 995
fps 20
再來是測試少量的instance object
ssao off
物件總量 = 2837
非instance物件總量 = 1736
instance物件總量 = 1101
polygons = 591182
drawcall = 2056(包含instance drawcall 的數量)
instance drawcall = 197
fps 30
////////////////////////////////////
ssao on
物件總量 = 2837
非instance物件總量 = 1736
instance物件總量 = 1101
polygons = 1076542
drawcall = 2552
instance drawcall = 573
fps 25
//////////////////////////////
註:
在雙核心2.66ghz,nvidia 98000GTX+環境下,
假設同一種mesh和單一diffuse color,
繪製16000個geometry,Polys共有545278,開啟instancing之後,
共呼叫23次的draw call,結果fps是120左右。

不開啟instancing時,會呼叫16023次的draw call,fps降到剩下7。

當然這是最佳狀況,主要是mesh的不同,還會格外增加draw call。
DX10可以突破這個缺點,所以要打國戰之類,是可以做到的,
會這樣講是因為看過ATI的最新DX10.1技術,
只要呼叫一次draw call XD。
在繪製大量物件時(註),發現frame降滿多的,
因為以我的神卡是不可能運算過慢,
所以瓶頸還是出在於CPU上。
其實義大利人對於RenderState Change的優化早就有作了,
讓我剩下的優化方式很簡單:就是所有的物件都是instancing。
作用是大大降低DrawXXXX的driver work,
將顯示卡的威能給顯示出來。
這點在DX10作得很好!所以當初為什麼想丟棄DX9的原因。
在這時間點真的要作一下優化了,因為後面還有其他效果要作,
如:SSAO、PSSM、DOF、dynamic lighting、HDR、motion blur。
這是最基本的,後續要作God Rays...等之類,可以讓玩家自由去選擇。
/////// 09/2/16 ///////////////
終於尋找到效能上的問題!
原來是BOOST_FOREACH的使用方式錯誤Orz。
會導致有7000個物件,白白去作拷貝的動作,
其實我的原意並不是這樣。
以下是修正後:
環境:
雙核心 3.01ghz GPU:ATI 4870
解析度:1440 * 900
ssao off
物件總量 = 7400
polygons =308357
drawcall = 733 (包含instance drawcall 的數量)
instance drawcall =527
fps 30
////////////////////////////
ssao on
物件總量 = 7400
polygons = 681737
drawcall = 1281(包含instance drawcall 的數量)
instance drawcall = 995
fps 20
再來是測試少量的instance object
ssao off
物件總量 = 2837
非instance物件總量 = 1736
instance物件總量 = 1101
polygons = 591182
drawcall = 2056(包含instance drawcall 的數量)
instance drawcall = 197
fps 30
////////////////////////////////////
ssao on
物件總量 = 2837
非instance物件總量 = 1736
instance物件總量 = 1101
polygons = 1076542
drawcall = 2552
instance drawcall = 573
fps 25
//////////////////////////////
註:
在雙核心2.66ghz,nvidia 98000GTX+環境下,
假設同一種mesh和單一diffuse color,
繪製16000個geometry,Polys共有545278,開啟instancing之後,
共呼叫23次的draw call,結果fps是120左右。

不開啟instancing時,會呼叫16023次的draw call,fps降到剩下7。

當然這是最佳狀況,主要是mesh的不同,還會格外增加draw call。
DX10可以突破這個缺點,所以要打國戰之類,是可以做到的,
會這樣講是因為看過ATI的最新DX10.1技術,
只要呼叫一次draw call XD。
2009年2月9日 星期一
real-time shadow整合完畢
由上一篇文章所提到,AGE engine的shadow是用PSSM的演算法,
並且整合到自己寫的script render pipeline。
今天總算給它完成了,因為這幾天雜事很多,
就是春酒的舞蹈的雜事,所以有些時間被佔去。
不過明天還要多測試一些,像是animation instance object和terrain。
下一個backlog就是dynamic lighting整合到自己寫的redner架構。
並且整合到自己寫的script render pipeline。
今天總算給它完成了,因為這幾天雜事很多,
就是春酒的舞蹈的雜事,所以有些時間被佔去。
不過明天還要多測試一些,像是animation instance object和terrain。
下一個backlog就是dynamic lighting整合到自己寫的redner架構。
2009年2月8日 星期日
Screen Space Directional Occlusion (SSDO)
在作SSAO的期間,突然發現到有一個論文讓我感興趣的。
也是關於Dynamic Global Illumination的論文,
算是SSAO的進皆版名叫Screen Space Directional Occlusion 。
其實在我還沒看此文章時,就覺得SSAO所增加空間的立體感之外,
但是就是少納入關於direction lighting的計算。
(有實作過SSAO的人,會發覺到這是post-pass的處理)
在光源射入某一個geometry時,某部分因為是處於半亮的狀態,
但是那部分是處於凹槽的,所以經過SSAO所計算的是全暗的,
在視覺上是一個相當不合理,尤其在配上shadow map的運算之後。
那我也不多講,其實那篇論文我還在看XD。
有興趣者請到這:Tobias Ritschel
論文:Approximating Dynamic Global Illumination in Image Space
這次沒有domo影片,有時間再來作看看。
PS:看DX10過程,被此論文給吸引XD
也是關於Dynamic Global Illumination的論文,
算是SSAO的進皆版名叫Screen Space Directional Occlusion 。
其實在我還沒看此文章時,就覺得SSAO所增加空間的立體感之外,
但是就是少納入關於direction lighting的計算。
(有實作過SSAO的人,會發覺到這是post-pass的處理)
在光源射入某一個geometry時,某部分因為是處於半亮的狀態,
但是那部分是處於凹槽的,所以經過SSAO所計算的是全暗的,
在視覺上是一個相當不合理,尤其在配上shadow map的運算之後。
那我也不多講,其實那篇論文我還在看XD。
有興趣者請到這:Tobias Ritschel
論文:Approximating Dynamic Global Illumination in Image Space
這次沒有domo影片,有時間再來作看看。
PS:看DX10過程,被此論文給吸引XD
訂閱:
文章 (Atom)