維尼的蜂巢

Archive for 十二月 2006

該用SSE嗎?

Posted by: kevinlin on: 十二月 25, 2006

最近在做slerp的算法,這是骨骼動畫裡最關鍵的一個演算法,兩個影格間我們想做間補或者我們想合成兩個動畫,都需要用到slerp這個演算法,其實算是內插法而已,如果看過Alan Watt跟David H. Eberly的書,就知道他們都說slerp可以藉SSE來增加效率,因為計算量大,又最常用到,不過SSE是組語畢竟有點難維護
siggraph2003有一篇animation blending 的paper,他們是想做類似鋼彈那種機器人,然後走在不規則的山坡上,要處理腳掌的問題,想想,山坡的角度都不同,不可能叫美術每個角度都算出來吧!!所以舉個例,我們做了一個0度跟一個70度的腳掌(假設最大70度),然後根據當時地形去內插前面那兩個腳掌,就能得到我們要的了。其實這解決方法應該很久以前就有了吧,像是我們玩CS邊射擊邊跑,這也是把射擊跟跑步拿來做合成,還有跳躍,我們遇到的可跳躍平台也許高度都不一樣,但是美術不可能針對每種高度都去輸出一次,(很久以前有一款大唐雙龍傳就是只能對某高度的平台才能跳過去)所以我們可以根據某個部位去做合成,這很直覺的讓我想到,我們可以做左右互搏之術,設計許多武功招式,玩家可以自己設定左邊打什麼右邊打什麼
結果有人測試過其實在VC裡Release版就比Debug版效能好大概10倍了,而且測試過SSE,似乎沒有什麼增加效率的感覺,有也是一點點感受不出來,有人說跟編譯器有關,也許VC已經做了最佳化了,我想有空時多花些時間來測試每個fuction用SSE的差異性。

製作大老二

Posted by: kevinlin on: 十二月 19, 2006

大老二的流程不難但是規劃起來很麻煩

遊戲初始化
發牌
開始玩
結束

[開始玩]裡面是一個迴圈直到玩牌結束,依序應該是

打牌
等別人打牌

而自己打牌時,要去check我可以出什麼東西,是不是只能pass
網路版又要在每個地方加上等待同步完成,作成網路版是最麻煩的地方
希望在2週內可以完成,一天有48小時就好了

小小的比較了一下目前可能最火紅的[戲谷][Game淘][土撥鼠]的大老二,發現各有各的不同,各也有各的支持者,有些人喜歡土撥鼠的大頭,有些人喜歡戲谷的簡單,其實沒辦法去做出一個能符合大家想要的東西出來,但是我還是希望做出來能夠讓大多數的人覺得很好 做這些東西也許沒有什麼技術,但是需要耐心,實在是一份培養耐心的工作,很多瑣碎的事情要做。不過我在想,做任何軟體應該都一樣,一堆瑣碎的事情要做,雖然有時候可以找螞蟻雄兵來幫忙。

Dragon Quest 9(勇者鬥惡龍9)

Posted by: kevinlin on: 十二月 14, 2006

DQ9要出了,雖然DQ我只玩過DQ5、DQ6、DQ8,而且劇情都看不懂,只有DQ8有英文版稍微瞭解,但是翻譯的有點怪,不過DQ6有出漫畫,應該算整個瞭解,我還蠻喜歡DQ6的故事的,很特別,分了夢之世界,跟真實的世界。
最近有消息指出DQ9要出在NDS上了,還蠻讓人吃驚的,我覺得跟ps3銷售不如sony當初誇下的海口導致的,我想,大部分的大作都會出在PS3或Xbox360上,PS3才剛開始賣、而Xbox360日本人又好像不怎麼支持,SE不管壓哪邊都會害怕,我猜SE會等後年,看PS3跟Xbox360的市佔率,來決定他們接下來要主力開發的主機。

Superman

Posted by: kevinlin on: 十二月 13, 2006

前一陣子看了Superman Return(超人再起),我覺得還挺好看的,延續著超人2的故事(1980年上映的電影),睽違了20多年,這次的特效真的還蠻驚人的。超人電影裡還有個大光頭壞蛋Lex,這個人在我看了超人首部曲的影集後,覺得它還蠻有趣的。
超人系列電影其實是一個非常簡單的電影套路,你可能猜的到就是壞人出現,然後超人出現要打敗他,一點新意都沒有,但是它包含著的是一種理想化的、善惡分明的英雄主義,這也使「超人」成為了全球的偶像,成了美國電影的文化符號之一——紅色斗篷,字母S的胸前標誌,還有無畏的英雄主義等等。
超人給的是一種精神,為了幫助全世界勇往直前的精神,《查拉圖斯特拉如是說》本是哲學家尼采的一部哲學著作提出超人精神跟超人思想,其實都是頗有哲理,其實我還蠻喜歡鑽研某些事情代表的意義,像是我喜歡的太極拳,其實太極拳不只是一個武術也是一個哲學,超人也是。
最近在看超人首部曲,今年是第六季,我第一季還沒看完,裡面演的是,超人在成為穿著制服每天飛來飛去之前的故事,就是多年前下了一場流星雨,超人被發現然後收養,主要是演超人在高中時的故事,劇中超人跟Lex還是蠻好的朋友,超人雖然無所不能,但是也是有說不出的悲哀,要背負著全世界一樣。
funny superman

幾本Graphic相關的Book List

Posted by: kevinlin on: 十二月 6, 2006

3D Math Primer for Graphics and Game Development
這本書真是簡單易懂,雖然以computer graphic系列的書來說,這本算是沒什麼價值,但是以一些基本數學基礎來說這本還算蠻好的,因為有3/4都在講3d空間中的transformatins,所以說這本書涵蓋的主題有點少
Mathematics for 3D Game Programming and Computer Graphics, Second Edition
這本談論到的主題比較多一點了,把一些Game裡常用的東西都有講到一些,算是也蠻清楚的,還有一些簡單物理運算的topic
上面這兩本都是for Game Programming,所以內容會有點簡單,沒有這麼深,一般來說,math的東西大都被放在附錄裡,下面這幾本就是比較深入講graphic方面的了,當然除了書,每年的Siggraph跟GDC的paper都要看一下,才能算稍微跟在站在世界頂端的人後面。
Computer Graphics: Principles and Practice in C
號稱四人幫寫的一本書,每個作者都大有來頭,這本書算是出版的比較久了(第一版1990出版、第二版1995年出版),所以很多人推崇,裡面有[基本的raster實作][graphic hardware的細節][UI][color理論][shading][image process][animation]等,雖然感覺上很老舊,但是從最小的觀念上來是挺不錯的。reference有將近40頁保守估計應該有600多個reference。
Introduction to Computer Graphics
基本上就是上面那本的精簡版(1993年出版)。
3D Computer Graphics (3rd Edition)
這本書感覺上方向跟上面的不太一樣,不過一樣是在說graphic,這本書說實話比上面那兩本好理解多了。
Fundamentals of Computer Graphics (我沒有) 作者網頁
這本書算是比較最近出的,2005出版,內容沒有仔細看過,不過比較多近代在用的東西。
上面這四本算是graphic可能都會提到的教科書,下面還有一本書也是講圖學的,只是在重點在Real-time
Real-Time Rendering (2nd Edition)
有提到一些遊戲的效果是如何產生的,算是很好的一本書,不過還沒好好看過。
下面還有幾本算是比較偏的,算是額外的讀物
Advanced Game Development with Programmable Graphics Hardware
其實就是在講Shader,但是提到多種演算法來做shader,算是不錯的參考書。
High Dynamic Range [...]

InvSqrt

Posted by: kevinlin on: 十二月 4, 2006

今天看到這個http://blog.ijliao.info/archives/2006/12/04/2739/
裡面貼了在Beyond3D裡的一則新聞,主要是下面這段做<開根號的倒數1/sqrt>的code,他的寫法跟效能讓人感到非常神奇,最神奇的尤其是0×5f3759df這個數字,推導出的人肯定是個天才.
float InvSqrt(float x)
{
float xhalf = 0.5f*x;
int i = *(int*)&x; // get bits for floating value
i = 0×5f3759df – (i>>1); // gives initial guess y0
x = *(float*)&i; // convert bits back to float
x = x*(1.5f-xhalf*x*x); // Newton step, repeating increases accuracy
return x;
}
至於只想求Sqrt(float x),它是return 傳入值 * x
求root大家都用牛頓法來逼近一個近似值,這就不用說了,上面的code應該快在他用特別的方法做一些bit hack,還有那個magic number來得到一個initial guess,雖然我的也比一般使用1/sqrt快,但是相較之下顯的弱了一些,而且我作弊,是用SSE指令集,先用rsqrtss(這就已經是平方根倒數了)當做一個initial guess,然後再用牛頓法求root ,在不支援SSE指令集的機器上就沒用了,不過如果把上面那段改成SSE來做不知道效能會不會再提升一次 不過大概是沒辦法改,能改的話原作者就改了,有空來看看
下面這是我的實作方法,也不賴啊
float InvSqrt( float [...]