20年的電玩迷,2年的洋蔥程式設計師,對於沒有電玩的世界可是連想都不敢想像,也希望能借由自己微薄的程式技術,讓大家了解電玩世界的無限趣味~一個菜鳥程式的生活點滴和對程式技術上的小小研究@_@;

Monday, March 27, 2006

Normal Map + Specular Map

這也是去年做的東西吧,在做完 HLSL 卡通效果之後,想說自己對燈光的了解並沒有說很深入,所以便試著做一些基本的燈光效果,順便仔細了解一下Diffuse,Ambient,和Specular之間的差異.一般燈光都只對per vertex來處理,所以效果也顯得有限,所以ㄌㄟ,為了不錯過運用shader的好機會,我便順便研究一下per pixel lighting 的做法.說到per pixel lighting, 當然是要試試normal map囉.其實normal map並不是很難,最重要的是要懂得tangent的意義和取法,只要懂得如何算tangent,那就算完成一半囉~ ^_*

下面的圖是我用了normal map搭配上一張specular map來加強specular的效果,感覺上還不錯啦XD現在在用這種技術的已經到處都是囉~
P.S. 喔,這隻怪羊頭也是老哥Louis的作品,在此再幫他打個廣告囉~

   

Sunday, March 12, 2006

邊線的變換


從日本電玩展回來的時候,帶了一片大神的demo片,玩了之後讓我更加的佩服日本在遊戲製作上的功力,那種特殊的水墨著色法,到底是用什麼方法做到的呢?我找了好多地方都找不到方法,最後才發現一個有可能的方式,就是變換邊線的貼圖;也就是說根據視角的不同來對邊線做不同筆觸的貼圖變換.也不知道是對還是不對,所以自己稍微試做了邊線換貼圖的demo.結果做出來的就如上面的圖所示,好像真的是可行的感覺,可是要怎麼對應角度來換不同的筆觸呢?_?;大神的水墨著色法,如果有人知道怎麼做的話一定要告訴我喔~@_@;

HLSL 卡通效果

前一陣子在玩PS2火影忍者的時候(2005一月吧),發現到他們的角色除了原本的toon shading(卡通演算法)之外,還加了另外的東西.在暗影的地方,還出現斜線的特別處理,讓model看起來就像漫畫上的話法一樣,他們稱這種演算法叫"Naruto Shading"(也就是火影忍者演算法),這種東西那陣子還真多,除了Naruto Shading之外,還有Dragon Ball Shading等等耍花樣的稱呼.剛開始還真以為是什麼神奇的演算法,仔細研究之後才發現,其實這些亂七八糟的Shading全都是從一種叫Tone Shading(影調演算法)的特效,做起並沒有想像的那麼難,只要在螢幕座標再貼一張有斜線的貼圖,再配合Toon的顏色,就可以控制斜線只出現在影子的效果~.

剛好那陣子DirectX9.0 + HLSL又剛剛問世,可以好好例用這個機會練習一下HLSL的語法,於是就用了HLSL配合Image Processing的方式來重新製作我以前試過的卡通效果,果然Image Procassing是個很棒的技術!!利用Sobel silheouette filter(一種過濾影像的方面,在這是用色差來找出邊線的位置)出來的邊線真是漂亮,跟以前做的真是差太多了,再加上Tone Shading, 可以和火影忍者拼啦!(笑)在這邊也發現,影像處理出來的效果真的很不錯,最近也有不少遊戲已經在運用了,像是Glow啦,Blur啦...等等.相信以後會變成一個必備的技術吧.^_^

   
HLSL 影像處理+卡通+影調+邊線!!XD

Wednesday, March 08, 2006

喬治的demo回顧3~

GEditor.這個demo應該算是一個未完成品吧.這是在做完GDemoEx之後馬上就想到要做的東西.當時在做GDemoEx的時候,在哪個敵人應該要放在哪?哪邊應該放什麼東西這點上?哪個敵人應該做出什麼反應?這些問題上也頭大了一段時間(最後變成全部隨機=P).當時我也正在玩"魔獸征霸3"這個遊戲(真是亂好玩的,說實在XD),它裡面有付贈一個類似地圖編輯器的東西.不但可以讓使用者自行編輯地圖上的物件,地型,而且還可以編寫劇本,成為一個完整的魔獸關卡.功能可說是亂強一通的,看了當場讓我眼睛一亮.好!我也要做一個地圖編輯器~.就這樣開始了GEditor的製作,完全沒考慮到編輯器的困難度XD
雖然有了GDemoEx的經驗,但是這個demo還是讓我很傷腦筋.很多新的問題衍生而出,例如說如何在螢幕上點選的點對應到我實際3D世界裡的位置.又或是說如何在地圖一次移動多個model...等等的問題.在做了不少的研究和尋找之後,我終於可以讓我的demo做到讀取地圖,增加物件,移動或刪除等等的動作.我還以為我做得不錯的同時,也發現了這個demo致命的缺點(*_x)..這個demo完全沒有做data base的處理,沒辦法儲存我的編輯,更不用說回朔了.而且在介面的部份也做的很不方便.只能說這個demo可以讓人load一load model,自己擺一擺爽一下然後就這樣; ;就這樣在不知道如何處理data的情況下,這個demo只好進了冷宮,只能說是自己功力還不足吧.
不過最近在我到是在讀資料型態管理的書的時候發現要如何做到回朔,甚至是儲存歷程的方法,書上都有記載,果然寫程式光會Graphic的部份還是不行,得多吸收各方面的知識阿XD~希望哪天補強之後可以把這個demo解凍出來完成當初的遺憾^_^

Tuesday, March 07, 2006

喬治的demo回顧2~

GDemoEx.這個demo阿,是我畢業之後花了相當多時間的一個作品之一.那時候雖然讀了很多game programming的書,卻沒有實際去好好做個東西出來.學校雖然也有教很多,可是用在graphic的部份卻讓我很不滿足.所以發誓無論如何也要做個demo來證明一下自己的能力.demo的點子是哪來的呢?我記得當時"三國無雙2"算是滿有名的遊戲吧.那時像那種亂砍人的遊戲算少,而且我那時壓力也很大,所以特別愛玩這種遊戲來爽一下(尤其bug解不了的時候更是殺殺~~~)所以就以這種遊戲類型來做demo啦.

當時在作這個demo時所經過的挫折還真不少.果然書中教的是非常有限,很多資料和程式寫法都比我想像中的要難多了. 在開頭寫3DMax的輸出外掛時就已經吃不少釘子了(*'3')對了,最早的版本還是用OpenGL做的喔,後來因為一直想把Shader的技術運用進去,所以改寫DirectX的版本了.這之中不知道多少次想放棄算了,Shader的寫法,影子的算法,對當時的我來說每個都是要老命的技術阿.但是最後還是死命撐過來完成它了.在這邊也要謝謝許多當初給與我指導的前輩們,還有幫我做model的老哥Louis

雖然也說不上是什麼好demo,而且demo裡的技術現在已經到處可見了,但這邊還是讓我老王賣瓜的介紹一下吧=P
-Model是用自製的3DMax輸出格式來讀取的
-Terrain運用了Octree的手法來切割地面
-Shader運算的卡通和邊線效果
-Shader運算的Shadow Volume
-Model的動作也是用Shader做blending
-很蠢的AI和簡單的碰撞



下面這幾張是OpenGL的版本的畫面,遜吧XD

   



有機會有時間的話,還真想再做做這種demo來玩呢^_^