天天看點

刨根問底 曲面細分到底是個啥?

争論漩渦中心的曲面細分

有競争的地方總會有争吵,雖然偶爾感覺聒噪,但也總比鴉雀無聲來的好些,畢竟說明這地方還有人煙,還有關注。

都在說DIY市場受到了整機特别是筆記本很大的沖擊,但一個DX11的釋出,還是引來了NVIDIA和AMD雙方聲嘶力竭的對吼,顯然說明這個市場還是蓬勃的,至少大家還都很重視,不願輕易輸這一陣。我們也樂見雙方這樣的争吵出現,畢竟這表示它們沒有倦怠,還在通過産品技術的更新進行着宿命般的偉大競争。

刨根問底 曲面細分到底是個啥?

但猶如神仙打架,我們這些凡人也隻是看着天上彩雲飛舞,雷電交加,熱鬧看夠卻不知其然。不小心哪位神仙的天兵跌落凡間,沒準還要殃及無辜。就好像這次雙方的DX11大戰,不管是率先發難的AMD還是奮起直追的NVIDIA,都把焦點集中到了一個很長的名字上——Tessellation!口水仗打了不少,其實也沒幾個普通使用者了解這是個啥,有啥作用。這個名詞普遍被接受的中文翻譯叫做“曲面細分”,在專業領域也往往被稱作“鑲嵌”,由于國内IT媒體普遍采納了“曲面細分”這樣一個稱呼,是以在後文中,我們也從善如流,使用這個稱謂。 

刨根問底 曲面細分到底是個啥?

實際上,曲面細分絕不是DX11更新的全部内容,從某種角度看,甚至稱不上最具革命性的更新,那為什麼A/N雙方對于曲面細分這樣的在意,寸土不讓,NVIDIA以GTX400系列擁有超強的曲面細分性能而自居,而AMD在開始推廣DX11顯示卡時也把重點放在了對它的訴求上,甚至目前被最廣泛使用的DX11測試程式Heaven也基本是圍繞着曲面細分來做文章?

簡單的講,雖然在改善增強畫質方面DX11有不少新特性,但在短期内可以立竿見影看到效果、遊戲開發商最容易掌握的就是曲面細分技術。這種容易使用又能出效果的東西,在DX11普及的漫長的初級階段,将會是最能代表DX11效果和性能的技術,自然會引來各方關注,是以大家也就了解了為什麼NVIDIA和AMD在這個問題上争吵不休了。

那曲面細分到底是什麼?能為我們這些普通玩家帶來什麼?這正是本文要重點講述的内容,讓大家知其然後,自己判斷它能否左右您的選擇。

DX11中的曲面細分引擎

當廠商以及使用者開始神話曲面細分的時候,可能它自己都沒想到能有這樣出人頭地的一天。實際上,曲面細分也是DX11收編的“散兵遊勇”。 

刨根問底 曲面細分到底是個啥?

曲面細分最早出現在專業領域,在蟄伏了多年後,終于被AMD引入到PC圖形技術中,通過R600系列的釋出,見諸于桌面圖形市場,但由于沒有微軟給予的官方身份,專屬性太強,無論是其它圖形核心生産廠商,還是遊戲開發商,都很難也不願意去跟進這樣的技術。幸好AMD為微軟打造的Xbox 360圖形核心Xenos采用了它,而且由于主機市場的封閉性,Xbox 360的大量遊戲中都采用了曲面細分技術,使得微軟親自體驗到了它的好處,并終于在DX11中收編,通過自己的标準強勢推廣,否則還真不知道它要在邊緣徘徊多久。

實際上,我們所說的曲面細分的作用,隻是機械的為一個多邊形模型增加更多的多邊形數量,這就是其核心内容,如果不加前後期控制,這樣的技術對于提升圖形效果起不到任何作用,對于性能反而還會起到負面影響。

刨根問底 曲面細分到底是個啥?

之是以在DX11中曲面細分會有改善畫質的作用,我們通過一張DX11流水線圖的觀察就能發現其原因。在增加了Tessellator外,流水線前面還多出了Hull Shader後面還增加了Domain Shader兩個子產品,也就是說要想通過曲面細分獲得圖形效果提升,必須在曲面細分前後加以人工控制,不能任由其發揮。 

刨根問底 曲面細分到底是個啥?

對于Hull Shader、Tessellator、Domain Shader這三個新加入的單元的作用,上面這張圖給予了較為明确的回答。Hull Shader主要負責定義細分等級(LOD)和相關控制點在細分中的“形變”趨勢,這裡的形變之是以加引号,是要說明這種形變僅僅是類似于曲率改變等小幅度的變化,而非大幅度的多邊形位移;Tessellator則負責根據HS傳輸下來的資訊,通過暴力增加多邊形去實作HS的要求;Domain Shader負責的最重要的功能就是通過貼圖控制的方式,實作模型的形變,也就是我們大家在DX11的細分曲面中看到的高細節畫面。

通過上述的分析,大家應該可以得出一個結論,實際上細分曲面負責的僅僅是為後續的提升畫質的運算提供物質基礎,無論是置換貼圖和平滑效果,都需要有大量多邊形的存在才能實作。試想,如果開發者想在一個三角形上通過置換貼圖實作一座城市的地貌效果,空有精美的置換貼圖,區區三個頂點如何形變拉伸?巧婦難為無米之炊。但如果給你100000個頂點呢?事情就容易多了。

實際上,從使用者的角度講,這一段的内容并不重要,從曲面細分上獲得什麼樣的快樂才是他們關心的,而非原理。

曲面細分——更光滑的模型

我們已經知道,曲面細分的作用是在原有模型上,将多邊形數量大幅增加。一個原來隻有100個三角形構成的模型,突然間被賦予了100000個三角形,遊戲開發人員能如何利用這些多出來的免費資源?或者說,玩家如何看出100000個多邊形的模型和100個多邊形模型的差別?

由于現在桌面級圖形技術都是基于多邊形模組化原理,是以無論是四邊形、三角形、圓形,還是任意形狀,都是由數量有限的三角形構成的。這就導緻我們經常會發現物體,特别是本應圓滑的物體出現生硬的邊緣,即使粗看下是圓滑的邊緣,在放大觀察的情況下,也是由一條條直線連接配接而成,這都是因為多邊形數量不足造成的。如果想要獲得能欺騙視覺的圓滑效果,就必須将多邊形數量提升到一定程度。 

刨根問底 曲面細分到底是個啥?

舉個例子,現在不再火熱但卻更加風情萬種的勞拉小姐,在《古墓麗影》第一代中出現的時候,全身都是“硬朗”風格的直線條,号稱肌肉美女,但并不是遊戲開發人員希望把勞拉變成史泰龍,而是在當時圖形運算能力極為有限的情況下,多邊形數量必須嚴格控制,否則遊戲速度就不能得到保證。在最新的《古墓麗影》版本中,由于硬體機能的極大提升,多邊形已經不是遊戲開發者值得顧慮的問題,勞拉又回歸了最初設定的性感豐滿,隻是玩家的熱情和遊戲的素質不再了。

刨根問底 曲面細分到底是個啥?

還有,當年最紅的FPS遊戲《Quake III Arena》,當我們把幾何細節開到最高的時候,包括門洞等模型都将呈現出比較圓滑的過度,而當幾何細節降低後,依然是醜陋的三腳邊。雖然id software給這種技術其了很拉風的名字,但實際内容還是通過更多的多邊形去近似描繪圓滑表面。

以上的兩個例子都說明了一個問題,當多邊形數量提升後,我們将會獲得更平滑圓潤的模型,而曲面細分正式能相當輕松的提供給遊戲開發者數量極為龐大的多邊形去使用,結果自然是讓100個三角形的簡陋模型變成了100000個三角形的圓潤模型。玩家看到的圖形效果也就獲得了提高,這正是細分曲面提升畫質的第一重作用。

曲面細分——更多細節的模型

同樣還是那個由100個三角形組成的模型,同樣還是免費的将它更新到100000個三角形,但是這個模型從勞拉變成了怪獸,我們不再需要圓滑,而是豐富可信的細節,這100000個多邊形能有什麼作用? 

刨根問底 曲面細分到底是個啥?

很多使用者都知道凹凸貼圖(Bump Mapping)、法線貼圖(Normal Mapping)等技術,可以通過貼圖的方式提升模型的細節,但是這些貼圖技術隻是通過欺騙肉眼的方式模拟出細節,而且不能進行深度較大的視角偏移或者拉近觀看,否則很容易看出破綻,因為它們都不能對模型本身做任何處理,可以說是光影的欺騙術。 

刨根問底 曲面細分到底是個啥?

而通過曲面細分技術産生的數量巨大的多邊形,就給了模型一個“重生”的機會,因為更多的頂點可以通過人工控制的方式實作真實的頂點位移,直接對模型的外形産生影響,讓模型具備真實可信的細節,而利用這大量免費多邊形産生模型頂點位移的技術就被稱作置換貼圖(Displacement Mapping)。 

刨根問底 曲面細分到底是個啥?

置換貼圖是通過一張深度貼圖(實際上可以了解為一張黑白貼圖,通過黑白深淺的不同來确定對應的頂點的偏移量),來控制通過曲面細分産生的大量頂點,制造出實際的模型位移,使得模型的細節大幅提升,明顯改善畫面品質。從實際的意義和效果上說,這将遠比簡單的平滑模型來的更重要,對于畫面的改善效果也更明顯。 

刨根問底 曲面細分到底是個啥?

舉個例子來說明更容易了解。以目前被廣泛使用的DX11測試軟體Heaven而言,在開啟曲面細分後(實際上是開啟了曲面細分+置換貼圖的組合),畫面的細節程度被極大第提升了,無論是地磚的溝槽還是紅龍身上的褶皺骨骼細節,都被細緻的描繪了出來,而且由于是通過對模型頂點的位移操作,這些多出來的細節還能産生真實的陰影等效果。反觀在關閉曲面細分選項後,一切歸于平靜,城市不再華麗,紅龍也不再威嚴。

置換貼圖由于需要大量的頂點去進行位移,是以需要模型具備足夠數量的多邊形,而曲面細分做的事情也正是如此,這也就成為了它提升畫面品質的第二重作用。

繞開各種水坑

文字寫到這裡,相信大家應該明白,曲面細分技術确實可以幫助使用者獲得更好的畫面品質,簡單的說是個有用實用的好技術,但是很多好技術,由于在實際運用中遇到了種種問題,最後也是無疾而終。曲面細分是否也會遇到同樣的問題而夭折呢?特别是對于遊戲開發商而言,一個技術是否容易被使用才是他們更關心的。容易使用和好效果之間,開發商往往選擇前者,特别是PC遊戲開發商,大部分都是在工期+預算的雙重壓力下趕工,好用可能是他們評價一種新技術的唯一标準,因為你不能指望到處都是暴雪,到處都是山内一典的《GT5》。

前文我們明确了曲面細分能帶給來的兩種提升畫質的方式,在下面的章節中我們将分開闡述這兩種方式中可能遇到的問題,以及曲面細分能否解決或者如何解決。

刨根問底 曲面細分到底是個啥?

從容易使用的角度看,曲面細分自動生成大量的多邊形數量去實作模型的圓滑效果,這個對于開發人員而言應該是非常容易使用的,是以開發商接受起來并不難。

但是這裡産生了一個很有趣的問題,由于産生多邊形是自動的,可以說産生圓滑效果也是自動的,如何控制哪裡不産生圓滑效果反而是開發人員需要考量的問題,看似可笑,實際上這樣的問題确實存在,并且扼殺過一些曲面細分的早期版本。 

刨根問底 曲面細分到底是個啥?

如果是對于顯示卡發展比較了解的使用者可能會記得AMD在RADEON 8500時代推出的Truform技術。實際上這也是一種曲面細分技術,隻不過它僅僅是隻能自動生成多邊形而已,缺乏相對應的控制手段。在AMD的示範中,Truform确實可以把一些看起來見棱見角的模型進行優良的圓滑處理,但在實際遊戲中,這種“地毯式”的圓滑處理就暴露出了問題。 

刨根問底 曲面細分到底是個啥?

當時最知名的Truform BUG就是在《英雄薩姆》中,将本開線條硬朗的機槍“圓滑”了,使得我們的英雄端着一把很有喜感的圓肚沖鋒槍周旋于滿螢幕的怪物中。也正是由于這個原因,Truform失敗了。

而DX11中的細分曲面技術,在開發階段就已經看到了前人翻船的水坑,最大限度的避免同類問題發生。這也就是在DX11渲染管線中不僅僅增加了Tessellator單元,還在之前加入了Hull Shader的作用。Hull Shader作為一個控制器,可以根據開發者的意圖,去判斷哪裡需要增加多邊形達到圓滑的效果。

這種判斷實際上也并不困難。在細分曲面出現前,一個多邊形數量不高但又需要圓滑效果的模型,一般都是用軟邊(Soft Edge)、硬邊(Hard Edge)的方式去實作。實際上,也就是通過對發現的操作達到圓滑顯示的效果。 

刨根問底 曲面細分到底是個啥?

我們可以通過上圖去說明這是如何實作的。同樣的一個模型,多邊形數量并不多,左側的模型進行了軟邊處理,使得模型看上去圓滑了很多;右邊的是原始的,或者說是硬邊處理的模型,能清楚的看到模型上的棱角。

在很早以前,遊戲中就已經采用了這種技術,而軟邊和硬邊的操作在法線上是不同的,而Hull Shader就可以根據程式員的指令去判斷這種差異,并告知Tessellator該為哪個模型或者模型的哪個部分去進行曲面細分,進而達到可控圓滑模型的效果。可控性成為了DX11曲面細分勝于之前同類技術的關鍵。

模拟逼真自然場景

細分曲面另外一種提升畫質的方式是通過置換貼圖實作的,而這裡就需要大量的後期控制,也就是說在大量頂點生成後,通過什麼方式去控制這些新增加的頂點形變,以期達到我們想要的增加模型細節的目的。

實際上,控制新增加頂點形變的手段并不隻有置換貼圖一種方式,隻不過它是被用到最多也相對來說比較容易的,是以我們在前文中一直是用“置換貼圖”來表述形變控制。大體而言,形變控制除了用置換貼圖外,還可以使用程式控制的方式。 

刨根問底 曲面細分到底是個啥?

由于通過細分曲面新産生的大量新頂點都是實際存在的,也就是都有三維空間坐标。通過一定程式的制定,就可以控制這些坐标進行位移。如果說通過貼圖控制是靜态的,那通過程式控制就是動态的,因為在程式中我們可以加入很多種變量,讓頂點呈現不斷的變化,比如說水面或者飄動的旗幟。

刨根問底 曲面細分到底是個啥?
刨根問底 曲面細分到底是個啥?

通過Ocean Demo這個示範程式可以非常明顯第觀察到,打開曲面細分技術,并且調節細分級數的不同,海面将呈現出明顯不同的變化,特别是當級數提升後,海面的細節就變得極為豐富逼真。實際上去控制海面變化效果的程式代碼是一樣的,但是由于可控制頂點數量的不同,是以呈現出來的效果也就出現了不同,這就是曲面細分在這裡發揮的作用。 

刨根問底 曲面細分到底是個啥?
刨根問底 曲面細分到底是個啥?

實際上,在DX11曲面細分技術出現之前,這類效果就已經開始被使用了。在目前依然頂着最強畫質頭銜的《Crysis》中,Crytek引擎就采用了一種叫做Screen-Space Tessellation的技術,實際上就是通過程式去控制大量的曲面細分頂點制造出逼真的海洋效果,再配合遊戲本身出衆的光影技術,使得效果更佳逼真。

刨根問底 曲面細分到底是個啥?

AMD在示範HD5000系列的曲面細分效果時,展示了一個經過曲面細分處理後的旗幟擁有了更自然順暢的飄動效果。這就是當頂點數量增加後,通過重力、風等實體程式控制的效果更佳連貫的結果。

展現高細節模型的威力

雖然通過程式控制頂點形變效率很高,但是這種效果隻能适用于無序、大面積的場景中,比如像海洋這樣的自然地貌。如果需要針對特定的模型,進行特定的控制,比如說遊戲人物,我們還是要動用前面說過的置換貼圖技術。而置換貼圖本身實際上又可以分為兩種不同的方式去操作。

所謂的兩種方式,實際上是指用以置換的貼圖獲得方式的不同,這對于使用者而言是不可見的差别,但對于遊戲開發商而言,就存在難易的差别。

刨根問底 曲面細分到底是個啥?

第一種方式,實際上在早前的一些遊戲引擎的介紹中,已經講述過很多次,隻不過當時我們談論的不是置換貼圖,而是法線貼圖。就是在遊戲開發的前期,模型師就建立一套高細節的模型,然後通過“烘焙(BAKE)”的方式将這些細節資訊儲存成一張置換貼圖,然後在遊戲中通過這張貼圖的資訊去控制曲面細分出來的數量衆多的頂點。實際結果就是一個低多邊形模型通過曲面細分+置換貼圖達到了與高細節模型相同的效果。

這種方式可以獲得效果最佳的置換貼圖,但開發商要在前期建立一個高細節模型,其開發成本實際上并沒有太多的降低。不過随着像ZBrush這類模組化軟體的成熟,制作一個高細節模型也并不是什麼太複雜的事情了。以上是《虛幻3》中的法線貼圖制作流程,實際上和置換貼圖的制作過程一樣。 

刨根問底 曲面細分到底是個啥?
刨根問底 曲面細分到底是個啥?

第二種方式,就讓遊戲開發商非常省心省力了,因為根本就不用制作專門的置換貼圖,這樣就節省了大量的開發成本和開發周期。 

刨根問底 曲面細分到底是個啥?

我們都知道一般模型至少會有一張色彩貼圖,而色彩貼圖中的Alpha通道所包含的資訊,就可以直接當作置換貼圖使用,當然如果利用凹凸貼圖去做效果會更好一些。上圖就是利用專業圖形軟體MAYA去簡單展示的利用色彩貼圖中Alpha通道資訊去控制頂點的效果。

刨根問底 曲面細分到底是個啥?

當然,這種貼圖本身所包含的資訊并不是針對頂點位移控制建立的,是以在精度上不是很高,用來對人物模型使用可能并不合适。但對于場景,比如像Heaven中的地轉,牆壁等部位使用就非常合适了,其效果與專用的置換貼圖相差無幾。

我們需要曲面細分

通過這篇文章,我們盡量希望通過簡單的語言描述,為大家去講解DX11中曲面細分的作用和意義,以及對于使用者而言可以獲得哪些實際的畫面提升感受,并針對這些技術是否容易被開發商采用而廣泛的出現在更多的遊戲作品中。

相信大部分讀者已經認同,曲面細分是一項很優秀的技術,但是曲面細分實際上隻是一個中間過程,并非我們最後看到的結果。曲面細分産生的大量多邊形,在人為控制下産生的各種形變才是改善畫面品質的根本因素,這是一個相輔相成的過程。

對于開發商而言,一款好技術如果不容易使用,也會被抛棄,而在我們分析的幾種情況下,曲面細分實際上都還算是容易使用的,而且在之前開發商通過其它同類相關技術已經積累了不少經驗,相信在未來的遊戲中我們會越來越多的看到由曲面細分技術為我們帶來的驚豔視覺效果。 

刨根問底 曲面細分到底是個啥?

是個好技術,容易被使用,确實能夠改善畫面品質,那結論自然是使用者需要曲面細分,而且會越來越多的需要。這就告訴了我們一個現實的問題,當遊戲越來越多的使用曲面細分的時候,顯示卡本身是否有足夠強大的曲面細分引擎就成為了關鍵。雖然目前NVIDIA和AMD都已經推出了DX11級别的顯示卡産品,但在測試中已經表明,NVIDIA GTX400系列顯示卡擁有明顯超越對手的曲面細分能力,這在未來的應用中将會幫助使用NVIDIA GTX400顯示卡的使用者獲得更好的遊戲體驗。

延伸閱讀:【曲面細分:A/N卡開關遊戲性能對比】

繼續閱讀