Tuesday, January 16, 2007

GS Progressive Mesh

這幾天測試了一下使用GS來做progressive mesh,也就是說在GS中重新產生新的index buffer,而不需要經過CPU來運算。因為GS雖然有增加primitive的功能,但是必須很小心的使用,而且當資料比大到一個程度時,效率就會直線滑落。所以想要用GS來做tessellation就變得不是那麼容易了,於是我就想先試試減面的效果。在GS中做progressive mesh雖然是沒有什麼瓶頸問題,但是由於減面後的vertex order並不是vertex cache最佳化的order,面數雖然少了,但是效能反而沒有比較好。這個星期有空的話,或許會來試試GS的subdivision。BTW,猜的出測試的模型是哪個遊戲的角色嗎?

5 comments:

Anonymous said...

以前9800pro的時代我有實作過VDPM(View dependent Progressive Mesh),不過當時因為卡在AGP頻寬問題導致效能非常差,比不作減面還差;現在看到前輩這篇文勾起我不少回憶,不知道GS以後是否有可能讓PM實用化?

by the way....這模型好像有點像Quake的東西,不過我也不確定XD

fallingCAT said...

就是因為以前做PM需要lock index buffer,所以才在GS上試試看的。不過由於現在加速卡處理端點的能力已經進步了非常多,做PM似乎是得不償失。因為目前大部份遊戲的瓶頸還是Pixel Shader,所以即使面數減少,fill的面積還是一樣大,再加上random vertex order,使的PM 的可用性大打折扣。不過我並沒有用真正的遊戲場景測試過,所以這只是推斷。總之我就只是把這技術做出來,如何應用就看每個遊戲不同了。

fallingCAT said...

BTW, 猜錯啦,不是Quake,是Far Cry :)。

nicky said...

Sounds cool. But from the screen shot it seems you are using user controlled LOD rather than view-dependent metrics. What view-dependent metric was used? Jus curious:)
Yes, incorporating transparent post-TnL vertex cache optimizations into PM for good v-cache locality is challenging even on the CPU side. The gain of PM is very unpredictable without it..
Nice try though:)

nicky said...

Sorry I just noticed it's not view-dependent :p