2007-03-28

Try to Inline shader text into C/C++ code

Nvidia Devloper Blog看到Inlining shader text into C/C++ code這篇文章. 今天嘗試把一些預設的shader code使用這個方式載入.

方式很簡單, 就是在resource editor使用import shader .fx檔案的方式產生新的 resource, resource type定為RCDATA即可.這樣在使用D3DXCreateEffectFromResource時候, 就可以載入成功.

不過一開始測試的時候卻載入失敗. 原因是我把Graphics相關的部分寫成一個graphices.lib. 而resource的定義也是放在graphics.lib的project內. 但是在編譯主程式的時候, 雖然有link到graphics.lib..但是定義的resource卻不會自動link. 所以執行的時候就找不到相關的resource. 後來在高人指點之後, 才知道原來要手動link...於是把該編譯好的.res檔案加到主程式的專案內..這樣就可以執行了.

目前這個是暫時的解決方案, 因為我覺得這樣設定很突兀, 本來只需要透過設定project間的dependency就可以自動link lib的, 卻因為resource檔案必須手動加到主程式的專案. 之後如果把lib給他人使用, 編譯後的resource檔案也是要一起提供. 這樣不是很方便, 所以之後會想辦法改成DLL版本. 這個問題就可解決了.

2006-10-17

Joel on Software

這幾天偶然看到有人介紹Joel on Software中譯版網頁. Joel是一個很有經驗的程式開發者, 和專案管理人, 曾經待過微軟參與Excel製作. 老實說一開始還在想這傢伙的文章真的有份量嗎..值得我花時間讀嗎?

後來大概上班時遇到瓶頸, 沒有動力作事情, 就稍稍用了一點時間看...一開始看覺得這位老兄的文筆挺有趣的, 看了之後發現許多論點真的是很值得參考. 從軟體的需求規格, 除錯, UI設計..時程管理, 不要讓老闆對進度有錯誤認知等等.. 我想開發遊戲程式也是軟體開發範疇內, 許多觀點是值得參考的. 有幾點我學到的

  1. 不要輕易說重寫整個程式. (似乎程式設計師常犯的..特別是接別人的系統後)
  2. 撰寫規格文件是重要的
  3. 時程的規劃必須是以小時為單位
  4. 在除錯未完成前, 不寫新功能

既然學到了, 那就做看看吧!

2006-09-28

Before next step

研究了PRT Lighting一段時間了...覺得PRT Lighting效果真是不錯啦....但是目前的演算法有很多限制..最大的限制就是不能處理Local Lighting, 所以目前最主要的運用就是模擬太陽光...

為了能夠打破這個限制..看了一些PRT 的paper. 思考了一些做法, 也嘗試著實作看看..不過目前並沒有一個理想的結果.即使如此, 還是學習到一些新東西或是把遺忘的東西找回來(像是PCA 用到的eigenvalue/eigenvector) . 本來想做個完整的紀錄, 但是自己很懶惰, 所以只把一些看過的鏈結做個整理.

 技術研究先到這裡. 接下來的工作就是把目前的Code做個整理. 最近開始使用 Visual Paradigm for UML community edition 這個免費的UML工具來畫類別圖並嘗試規劃Use case來畫循序圖. 這個工具以免費軟體來說還不錯用 . 希望可以作比較好的規劃.

2006-06-16

加入KDTree和HDR light probe

加入了KDTree來加速ray cast的計算. 這個KDTree算是基本款. 目前是依據polygon數目條件來決定是否切割空間, 且切割平面是取XYZ軸最長軸中間切一半. 不過即使如此, 效能倒是提升不少.

現在也加上載入light probe image 作為光源資訊, 效果就更好了.
light probe image 是下載自這裡
以下是使用不同的light probe 的測試結果


看起來還不錯. 接下來可能會看看D3DX的PRT Engine. 了解一下D3DX PRT Engine提供了哪些更進階演算方式. 這些演算如果都自己做, 可能會暈倒吧orz

2006-05-24

Spherical Harmonics Lighting

看了SH Lighting的paper一段時間了, 總算開始coding了. 其實對於裡面的數學推導還是沒有完全了解. 但是對於SH function 的特性已經有所了解了.
其實目前的code主要還是參考這個網站所提供的範例程式改寫的. 而且使用硬幹的方式作ray casting的計算.
貼上取樣50*50的sample, 4 bands 的SH function, 約花了40~50分鐘計算出的結果(真是有夠慢)






















以下是對照組: 使用標準的phong lighting (per-pixel diffuse lighting)












看起來有點樣子了, 不過效能不佳, 所以接下來要先把那個硬幹的ray casting修改掉, 打算使用KD Tree來作加速.