Visual Studio 2010 是好物  

Posted by 藍斯洛 in

很久沒碰 MFC了。

前一陣子 CryEngine 釋出 SDK,抓來看了以後,發現它的編輯器介面很漂亮,多翻了翻,才知道原來是用 MFC Library 做的。

這下子又引起我對 MFC 的興趣。

顯然 MFC 還不至於像傳說中的那麼慘。

最近打算重新改寫遊戲資源檔案打包上傳的工具程式,想到了 MFC,打算拿著來試試。

發現了這麼一篇 Blog

Your First MFC C++ Ribbon Application with Visual Studio 2010

哦~~~

MFC 做出來的應用程式介面不再那麼難看了耶~~

趕快隨手很快的建了一個專案,勾選幾個項目後,完整功能的 Dock Panel, Ribbon Menu ( 還有一個 Outlook的 Navigation Bar 沒勾) 都有了...

clip_image001

沒做什麼事,而應用程式看上去的專業度大大提升...

VS 2010 真是好物...

圖形除錯設備  

Posted by 藍斯洛 in

今年 GDC 給我的一個大震撼,就是,Game Engine / Graphic Engine 裡,要加上圖形除錯功能。

回頭翻了一本 3D Game Engine Architecture 的書,才發現人家早早就有說了。

這些功能的用處很大,做了絕對有好處。

然後發現,啊,Engine 裡頭那個顯示 Bounding Box 的物件,不就是其中一個圖形除錯物件麼?

Bungie 在開發 HALO 時,連網路封包的數據與優先權都用即時圖形顯示。

image

我們真的該把圖形除錯的功能加到 Engine 裡。

我叫它做「圖形除錯設備」。 ( Graphic Debugging Facilities )

首先,我把 Game Timer 做了修改。加上加速、放慢、暫停、甚至每個 Frame 更新固定時間的功能。這些在我們做 Animation 的除錯時,應該會很有幫助。另外,我還加了一個 Real Life 的 Timer,我們總還是會需要知道真實時間的吧?

然後, Engine 裡面加了一整組的 Debug Drawing API,包括畫線、畫圓、畫顆 Wireframe 的球、畫個十字、畫個座標軸、顯示字串訊息在 3D 場景裡,還有一個很有用的,畫個 Frustum 出來。

最後一個組件呢,就是弄了一組除錯用的 Camera 跟 Frustum。遊戲場景的攝影機,是場景管理中很重要的運算基礎,但是我們怎麼知道這些運算有沒有問題? 例如,Frustum 的 Culling 運算、遠方物件的 LOD 選擇,有了除錯 Camera 的模式,我們就可以很簡單的做檢查。

image

Hmm... 看來 Frustum 的 Culling 並沒有算得很乾淨...

30 天打造 OS!  

Posted by 藍斯洛 in

其實這是我今天帶回的一本奇書,它的副標題。

image

(圖片來源: 博客來書籍館)

日本人寫的,譯者有三位。

為什麼說它是奇書 ?

你看標題就知道了, 「自己做作業系統 ? 這什麼 ?」

台灣的資訊相關書籍,多如過江之鯽,作業系統核心的內容已經夠硬了,還要自己寫程式來做 ? 而且一開始還是拿組合語言拼出來的開機程式,這絕對是硬派中的硬派。

市場更是小之又小。

幾個月前我在書店裡看到的時候,愣了一下,覺得很神奇,怎麼會有人出版這種書 ? 有個怪咖會寫這種書不奇怪,但是翻譯了出版來賣 ? 這就很匪夷所思了。

就算上架了,大概也沒幾個人會在書店裡把它拿起來翻閱的吧?

果然, 今天閒晃的時候又看到它,整本書還是跟新的一樣。

我沒有多想,就把它買下帶回家了。

這種市場小之又小的書,一不注意,就會消失在書店裡,再也找不著。

話又說回來,書的封底是這麼寫的:

-----

可能是史上最有趣且實用的作業系統書籍!日文版已突破13刷!

這是一本兼具趣味、實用與學習性的作業系統書籍。作者以獨創手法,從電腦的構造、組合語言、C語言開始解說,讓讀者透過實作與測試學會演算法,並在自由愉悅的氛氛下,從零開始建構作業系統。

即使是初學者,也不需畏懼,因為連貓咪都能輕鬆學會自作作業系統!

-----

貓咪也能學會? 廣告不實...

GDC 2011 Day 5  

Posted by 藍斯洛 in

最後一天,算算只有四個小時的課。

今天的開場,由 Bungie 的 Halo : Reach 開始。

首先是 Automated Level of Detail Generation。

顧名思義,就是用程式算出 LOD Mesh。裡頭的演算方法,是很不錯的想法,可以找時間來模擬嘗試看看。

而除了 LOD Mesh 之外,他們還提出了一個做法 – "Unified material model"。

簡單講,就是所有的 LOD Mesh 都使用同一種材質 Shader ,這樣一來,也可以提升很多效能。更重要的是,反正距離很遠、物件很小的時候,就算畫的很粗略,也不是那麼明顯...

在這裡,他們也展示了一個在除錯模式下的攝影機,可以用來檢查 LOD 的變化是否如預期。

Hmm… 我們似乎也該弄個 Debug Mode Camera 來了。

第二段,講述的是 Halo : Reach 裡的 Effect。

第一個來的 Effect,就是嚇死人的粒子系統。

有多恐怖?

1. 粒子的運算全部交由 GPU 計算,CPU 只決定粒子的數量。

2. 在 GPU 裡計算的粒子,照樣可以跟場景中的物件計算碰撞跟彈跳。

所以,只要一個 GPU Draw Call ,就可以畫出所有的粒子,而且還會有碰撞彈跳。

碰撞與彈跳計算的資料來源有兩個,Depth Buffer 與 Normal Buffer。計算的概念,說穿了一點都不難,但是,要能夠想到這點,還真的是不容易。

接下來的效果,都跟 Depth Buffer 有關。

Bungie 給了一個結論 – "Depth buffer is incredibly useful"

前兩天,岩田聰社長說 : "Content is KING"

今天我們的結論是 : "Depth Buffer is KING"

接下來聽了一場跟想像中的內容不太一樣的講題。

本來以為他們會介紹如何處理一個龐大遊戲場景的概念與方法,結果,他們是有介紹啦,但是卻是基於他們自己的工具系統,有一點失望,不過也還是有一點收穫就是。

下午聽了一場是關於拳擊遊戲裡,對於拳手的皮膚效果的處理方式,很新鮮,而且他們的專業研究,也不得不讓人佩服。

過去一整個看起來像 "塑膠" 的皮膚,經過研究分析改進之後,變得非常自然。

真是夠專業。

 

最後,把像素拼圖的完成圖拍了下來。 ( 雖然這已經是由工作人員完成的了... )

DSC01442

GDC 2011 Day 4  

Posted by 藍斯洛 in

中午又跑去任天堂的展場去玩 3DS,本來是想要玩玩薩爾達的,可是人好多擠不進去,晃了一陣,只玩到 Street Fighter。

也很讚。

早上第一場,去聽了 Killzone 3 有關 Occlusion Culling 的技術,基本概念也還是用個 Buffer 來記錄深度,然後做測試運算,沒什麼新的。不過說的很詳細,比起昨天用兩三張畫面帶過的那一場,好太多了。

更重點是,他們做了一整套在 Occlusion Culling 上的 Debug 工具,可以很清楚看到 Occlusion Culling 計算前計算後的結果。

視覺化很重要,尤其是這東西跟美術有關。

接下來去聽了 Dead Rising 2 在網路功能方面的經驗分享。

這遊戲好像賣的很不錯? 整場聽眾有爆滿啊...不過我很懷疑有多少人不是技術背景的,至少最後發問的人裡頭有一兩個...( 問的問題居然是遊戲的銷售量?? )

網路功能,嗯,對我們在 MMO 上面已經有些經驗的人來說,這些分享的內容並沒有太多的不同。反倒是,他們也做了個 工具來監看 Traffic、監看資料同步的結果...就顯示在遊戲畫面上...Real-Time…

只能說,他們真的很愛做工具。不知道是因為專業還是因為人太多?

下午,有一個題目很吸引人。

"Adaptive Order Independent Transparency"

Render 半透明物件不用先排序。

基本概念還是與 A-Buffer 有關。只不過,將 A-Buffer 的第二階段 -- 排序與組成,引入一個 "Visibility Function",以當作權重的方式,計算半透明 Pixel 最後合成的結果。用這樣的方式,刪去耗費時間的排序工作。

效能增加很多。

不過這 "Visibility Function"的計算有些複雜。

接下來的課程是,Bugie 講述 Halo : Reach 遊戲裡網路相關的技術分享。

有一句話寫得好 : "Technology to help multiple players sustain the belief that they are playing a fun game together"

他舉了兩個遊戲中的例子,來看他們把網路延遲藏的有多好。

然後,又看到了 Traffic 監看的工具...也是直接顯示在遊戲畫面上...也是 Real-Time…

DSC01306

他們真的很喜歡做工具...

不過,這工具應該還是有用的,至少他們抓到了一個問題: 一個還在滾動的手榴彈用了很大量的頻寬...

最後一堂課程是超大的一顆地雷...

又沒有其他課程好去,所以就坐著混到下課...

 

今天的像素拼圖長這樣:

DSC01234

昨天那個日本人做的馬力歐已經不見了,應該是工作人員把它拆了。

那個蹲著在拼的,應該就是工作人員。手上有一大包同樣顏色的方塊,拼完了又去拿了一大包來拼。

有工作人員做修正,那這個活動也沒什麼意思了...

GDC 2011 Day 3  

Posted by 藍斯洛 in

Game Develop Conference 今天算是正式開始。

一開始的盛事,就是任天堂社長岩田聰的 Keynote 演講。

DSC01132

DSC01134

說真的,日本人講的英文聽起來有難度,我想他說起來也不會簡單...

所以,在他演講台的正對面有大字報...

DSC01135

演講主題呢,就是內容啦、創意啦、熱情啦...這些東西...

一個小時的演講,中間還讓北美的任天堂主管進來工商服務一段 N3DS…

N3DS

真的是很讚。

中午休息時間,到任天堂的展場去,搶到空位,把玩了一下 N3DS 的任天貓狗,整個裸眼 3D 的畫面效果好逼真啊...

不過這個真的要親眼看,有圖就沒真相了。

其他的四堂課,好像都碰到了大大小小不等的地雷,沒有什麼非常 Exciting 的東西。倒是另一位同事選到了一兩個有意思的課程。

首先是 Autodesk 講他們正在進行的新計畫 -- DNA Language,用來做為 Game Runtime, Game Editor, DCC Tools 之間的資料庫管理橋樑。讓 Asset 的製作與測試,能夠有更快速順暢的 Workflow。

可是,我只是想知道 Asset 的版本管理方法啊... 課程簡介上不是寫的是這個嗎? 你們不能就這樣輕輕鬆鬆帶過啊...

下午,先去聽 Valve 的演講,這場技術性比較高些,可能跟這個演講者老是在玩組合語言有關。

網頁: http://bit.ly/hPCmVW

然後去聽了 BattleField 3 的新的場景 Culling 的方法。

什麼新方法?

把矩陣行列轉過來,讓 SIMD 運算比較快些,也算新方法?

然後講 Software Culling,什麼? 就畫在一張比較小的 Z-Buffer 上然後做 Z-Test ?

我快昏了...

最後一堂課,去聽 AMD 介紹新版 PerfStudio。心得就是 : AMD 用了一張顯示卡,換到了幾十張開發者的名片...

 

今天的像素拼圖是這樣--

DSC01151

那個蹲跪著在拼的應該是日本人,他也不管格子上面寫的是什麼符號,反正就是要從別的地方拆方塊下來拼馬利歐就對了。

我開始覺得,每個人都想要做自己的創意,這張圖應該沒辦法完成了...

GDC 2011 Day 2  

Posted by 藍斯洛 in

DSC01131

這是一道壁報牆,上面的一點一點紅色藍色黃色黑色的小方塊,是由每一位 GDC 的參加者,一人一塊貼上去的。

白色的格子上有小小的標示,寫著方格該貼的顏色,每一位 GDC 的參加者會拿到一塊方塊,自己對著顏色貼上去。

很有意思的活動,象徵著古早時代的遊戲美術一個像素一個像素的"刻點"。

不過那個戴帽子的老兄不知道在幹嘛,一直從別的地方把方塊拔下來黏到他要的地方去...

明天再去看看完成度如何...

第二天的課程,選擇去微軟的 Kinect Develop Summit。

據說 Kinect XDK for Windows 即將要釋出,不知道是不是表示 Kinect 可以裝在 PC 上了。這會是什麼景象?

---------------------------------------------------------------------------------------------------------------------

微軟還是很上道,去聽的人都能夠拿到一份光碟,所以就不用拼命低頭寫重點或是把投影片拍下來。

還送了一小疊很有質感的筆記紙。

一開場的簡介,快講完的時候,有這麼一段--

本來完全不玩遊戲的媽媽,跟參與 Kinect 開發的兒子說,要買 Kinect 來玩,而且,現在每天玩。所以,這是一個遊戲產業的世代革命...

好,這故事從 Wii 換成 Kinect,故事主角從宮本茂的老婆換成某位微軟員工的媽...

老梗。

Kinect 有幾個主題,Joint Filter, Gesture Detection, Speech Recognition, 還有 Mechine Learning, Neural Network。

我們能說,整個系統已經不再是 true / false, 0 與 1 的思考方式,必須改用機率、權重、取樣分佈來想。

而且,這樣的系統裡,取得的資料很多,資料裡的雜訊更多,如何取得能用與有用的資料,就變成是 Filter 的技術所在。

Gesture Detection 也不簡單,因為每個人的姿勢手勢都不同,很多元,所以設計就變得很複雜,要考慮的狀況、要測試的條件也很多。

例如,"伸出你的右手"。

男人女人的伸手方式就不一樣了,老人與小孩的伸手方式也不會相同。

這程式要怎麼寫?

Hmm…

Mechine Learning

我們決定演算法之後,讓機器自己去決定參數與權重...

不知道是不是所有的體感遊戲平台都有這樣的做法,不過對習慣於 Input 始終是 0 與 1 組成的我們來說,應該是很有挑戰性。

課程結束,填了問卷交回。

哇咧,今年沒有 "填問卷送 T Shirt" ?

GDC 2011 Day 1  

Posted by 藍斯洛 in

2011 年的 GDC,是第 25 屆,不過也好像沒有特別盛大什麼的。反而是讓人感覺規模越來越小,就連報名參加所給的一個資料袋,質感都越來越糟...

依照慣例,前兩天是 Tutorial 課程跟一些 Summit 演講。

今天還是參加了一整天的 Tutorial,題目是 – "Advanced Visual Effects with DirectX 11"

--------------------------------------------------------------------------------------------------------

早上第一堂課,介紹的是 DX 11 裡的 Device Context & Command List,多緒繪製的架構。

接下來,是 Deferred Shading 的最佳化策略。包括 Light Pre-pass, Light Geometry Optimization 幾個方法。不過,Light Pre-pass 馬上在下午的課程裡被打槍...

接著是 Civilization V 。

他們用了一個稱為 "Packetized Rendering" 的設計策略,將所有的 API call 包裝成一個 packet,送到 engine 去處理,每個獨立的 render job 可以降低彼此之間的關聯性,甚至沒有關聯。然後可以很自豪的說,"No threading bugs"。

展示了一個很壯觀的 Screen Shot -- 滿滿畫面的兵,底下還秀了CPU 效能,12個核心同時在跑!!

然後是 Dragon Age II ,介紹他們所使用的 DX11相關技術。

他們主要用在 Dynamic Lighting ( Light Pre-pass method ), Tessellation, Diffusion Depth of Field (DDOF), Contact Hardening Shadows 上。

從這裡開始,DDOF 就一直出現了...

根據他們所說, Tessellation 是一個效能殺手。所以,只用在看得到的、很靠近攝影機的地形上。

也就是,這技術並不是什麼都適用的好物...

Contact Hardening Shadows 做出來的 Soft-shadow 效果,比過去用的 PCF Filtering 好非常多。DX11 SDK 上有 Sample,不過,我的電腦還是 DX10的顯卡,跑不起來,只能看靜態的圖...

下午第一堂課,就由 DICE 介紹他們的大作 Battle Field 3。

這遊戲,只支援 DX11,拋棄 DX9。

他們說,BF3 是大作,所以可以推動 OS 以及硬體的更新。

我們在旁邊,表示 .. "一切樂觀其成"...

太樂觀了...

BF3 的 Deferred Shading 並沒有使用 Light Pre-pass 方法,因為 Light Pre-pass 要對 Geometry render 兩個 pass,對 BF3 而言,Geometry 太多,不適用。

BF3 用了一個特殊的想法。

將 Screen Image 切分成幾十個 Tile,每個 Tile 用 Compute Shader 計算相關的 Light Info,這樣,據說可以計算場景裡高達 1000 個點光源...

BF3 的場景裡的物件也是很多的,所以依舊存在著 Draw Call 的 Bottleneck。所以, BF3 將 Instancing 發揮到最大極限,從一個 Object 一個 Draw Call ,變成 "一種" Object 一個 Draw Call...

效能大提升。

最後,BF3 呼籲 : Drop DX9!!

(我們還是繼續在旁邊... "樂觀其成"...)

接下來是一個日本人的介紹。

精神不濟加上日式發音很難懂,以致這半個多小時全部不知道什麼是什麼...

然後,又來 DDOF 了。

主題是 DDOF Solver,不太懂在做什麼,回去要開始找資料開始瞭解。

接下來的主題是 Separable Filters。

是用 Compute Shader 取代 Pixel Shader 做 Image Base Filter 的想法。

舉例就舉例嘛,不知道為什麼,又拿 DDOF 來舉例...

DDOF 看起來好像真的很重要...

然後談到 Tessellation, Displacement Shading, 重點 : 請用在 "Key Assets" 上...

最後,再經過一段冗長的 Post-Processing Performance Optimizing 演講,好不容易,下課休息。