Clipmap中方顯SM3頂點Texture的真劍用場!

Shader Model 3.0中一個顯著的新機能就是頂點shader中的texture參照機能,而且關於這個機能,還是NVIDIA GeForce 6系列以來所獨有支持的(不過作為SM4的基本規範,ATI的HD 2000系列在D3D10+SM4下也可以支持頂點texture)而著稱。雖然如此,一直以來偶卻始終未覺此nv所實現的「難能可貴」的新機能的保貴之處:若是為了從高度map生成地形的話,預先對地形頂點進行改變即可,沒必要realtime去改變吧(地形一般不會變化吧?) 況且據說這個texture參照的過程比通常的pixel shader中的texture參照廢時(顯然的,能提供就不錯了,肯定慢)

直到了解到clipmap的LOD地形描繪手法,才覺豁然開朗:原來有了頂點texture可以這樣!以往的LOD都是在CPU中對world座標系中固定的primitive進行裁減判斷和mip層的設定,這也是很自然最直接的想法了。然而clipmap提供了一種全新的手法:只專注描畫視點周圍的primitive,在頂點Shader中動態算出他們對應的頂點座標,隨著視點的移動,這些頂點在水平方向上也跟隨著視點移動(與視點其實水平上保持相對靜止),而在shader中根據實際的頂點位置換算出texture座標,由此參照高度map來獲得當前頂點的高度,也就是講變成頂點跟著視點動,但高度由高度map來確定,當視點移動時,所有頂點都「高底起伏」來模擬地形位置的轉移。這種LOD思路有兩個革命性的優勢:不管視點如何移動,真正描畫的primitive永遠只是固定的有限的那一團,是死的,不用管真實world座標系中的頂點評估裁剪,對那一團頂點的布局可以隨心所欲,不受真實地形所影響;另一好處就是所有的動態描畫計算幾乎全部在shader(亦即GPU)中完成,cpu可以大大減壓,符合目前技術趨勢所向。而頂點Texture是實現這一方法的核心必要機能,NVIDIA果然沒白搞。

你可能感兴趣的:(科学と技術,primitive,shader)