• 沒有找到結果。

毛髮繪製呈現之探討與研究

N/A
N/A
Protected

Academic year: 2021

Share "毛髮繪製呈現之探討與研究"

Copied!
34
0
0

加載中.... (立即查看全文)

全文

(1)國立臺灣師範大學 資訊工程研究所碩士論文 指導教授:張鈞法. 博士. 毛髮繪製呈現之探討與研究 A Study of Hair and Fur Rendering. 研究生:廖庭賜 中華民國. 一〇八年. 撰 一月.

(2) 摘 要. 毛髮繪製呈現之探討與研究 廖庭賜. 在電腦圖學的領域中,毛髮的繪製呈現可以透過許多不同的方式去實現, 其中包含了將模型透過材質轉換成類似毛髮的樣子、以及透過參考的引導線產 生出一搓一搓的毛髮。每種方法各有優缺點,也能分別做出不一樣的效果與成 果 人們總是不斷在追求更加真實的畫面呈現,由於目前硬體持續升級強化, 電腦逐漸可以將複雜的場景與模型透過運算將畫面繪製得趨近照片般真實,同 時又可以達到實時的等級。然而毛髮的數量十分浩大,光是一個人的頭頂可能 就有超過十萬根的髮絲,假如想要將一根根的毛髮直接透過模型製作並繪製出 來,那將要花上長久的時間與龐大的資源,也因此透過計算產生出毛髮的呈現 方式繪製出如照片真實般的畫面便成了一個重要的解決方式 本論文透過研究數種毛髮與毛皮的實作方式,接著分析幾何著色器 (geometry shader)的功能,以殼的生成法為基礎,透過幾何著色器能進行加點與 變形運算的特性將模型的三角片複製並位移來產生出數層的殼,接著貼上使用 隨機數生成的噪點貼圖來實現毛皮的生成,並以實時的速度呈現在使用者面 前。. 關鍵字:幾何著色器、毛皮生成、毛髮呈現.

(3) ABSTRACT A Study of Hair and Fur Rendering by Ting-Szu Liao. Hair rendering can be implemented by many ways in computer graphics. For example, it can be implemented by transforming the model into hair with the textures. And it can also be implemented by using guide hair to generate hair strands. Each method can present different result and has its pros and cons. People always want computer graphics to be more realistic. Because of the improvement of the hardware, computers can gradually draw scenes and models that are more complex in real-time. However, the amount of hairs is too huge. There are up to hundred-thousands of hairs on a human head. Rendering hair with a model which has every strands of hair will take lots of time and enormous amount of resources. Therefore, we need to implement hair rendering by generating them with an alternative way. This thesis studies various methods to implement hair and fur rendering, analyses the features of geometry shader, and then implements the fur generation and modeling based on the Shells method. It uses geometry shader to replicate and transform the triangles of the models, and then to apply the texture which is generated by random numbers to implement fur in real-time.. Keywords: geometry shader, fur rendering, hair rendering.

(4) iv. 目錄 第一章 緒論 ............................................................................................. 1 1.1 研究背景 ......................................................................................................................... 1 1.2 研究目的 ......................................................................................................................... 1 1.3 研究意義 ......................................................................................................................... 1 1.4 論文結構 ......................................................................................................................... 2. 第二章 文獻探討 ..................................................................................... 3 2.1 Practical Real-Time Hair Rendering and Shading........................................................... 3 2.2 Hair Rendering in Tomb Raider ...................................................................................... 4 2.3 NVIDIA Hairworks ......................................................................................................... 6 2.4 Fins and Shells................................................................................................................. 7. 第三章. Geometry Shader ........................................................................ 8. 3.1 概要 ................................................................................................................................. 8 3.2 輸入與輸出 ..................................................................................................................... 9 3.3 功能與應用 ................................................................................................................... 10 3.4 對於毛皮生成之運用 ................................................................................................... 10. 第四章 實作細節 ................................................................................... 11 4.1 概要 ............................................................................................................................... 11 4.2 Shells ............................................................................................................................. 12 4.3 Geometry Shader ........................................................................................................... 13 4.3.1 殼的生成.................................................................................................................. 13 4.3.2 重力.......................................................................................................................... 14 4.3.3 輸出.......................................................................................................................... 14 4.4 貼圖 ............................................................................................................................... 15 4.4.1 貼圖生成.................................................................................................................. 15 4.4.2 Mipmap .................................................................................................................... 16 4.4.3 Fragment Shader ...................................................................................................... 16 4.5 設計者控制 ................................................................................................................... 17. 第五章 實驗結果與討論 ....................................................................... 18 5.1 概要 ............................................................................................................................... 18 5.2 Multisampling Anti-aliasing (MSAA)........................................................................... 18 5.3 實驗環境 ....................................................................................................................... 19.

(5) v. 5.4 毛髮繪製呈現效果 ....................................................................................................... 20 5.5 毛髮長度比較 ............................................................................................................... 21 5.6 重力比較 ....................................................................................................................... 23 5.7 毛皮密度比較 ............................................................................................................... 24 5.8 顏色 ............................................................................................................................... 25. 第六章 結論與未來方向 ....................................................................... 26 參考文獻 ................................................................................................... 27.

(6) vi. 附表目錄 表 1 實驗環境設備 ................................................................................................ 19 表 2 參數設定 ........................................................................................................ 19 表 3 毛髮呈現與否之效能比較 ........................................................................... 20.

(7) vii. 附圖目錄 圖 1 使用頭髮模型呈現毛髮之示意圖 [1] ................................................................... 3 圖 2 左為使用2.1之方法所呈現出的頭髮;右為發表中提到新的呈現方式 [2] ...... 4 圖 3 Guide Hair 示意圖 [2]............................................................................................. 5 圖 4 NVIDIA Hairworks 之範例結果 [3]....................................................................... 6 圖 5 NVIDIA Hairworks 中的 Fur Ball 範例 [3]............................................................ 6 圖 6 Fins and shells 結果示意圖 [5] ............................................................................... 7 圖 7 繪圖管線流程示意圖 [6] ...................................................................................... 8 圖 8 Shell textures 生成示意圖 [8].............................................................................. 12 圖 9 由隨機數生成的毛皮貼圖 .................................................................................. 15 圖 10 未使用 MSAA (144 FPS) ................................................................................... 18 圖 11 使用 MSAA (16 samples)(144 FPS) ................................................................... 18 圖 12 毛皮呈現之結果 ................................................................................................ 20 圖 13 殼的層數結果比較 ............................................................................................ 21 圖 14 殼的密集度之比較 ............................................................................................ 22 圖 15 毛髮下垂度之比較 ............................................................................................ 23 圖 16 毛皮濃密度之結果比較 .................................................................................... 24 圖 17 不同顏色之毛皮繪製結果 ................................................................................ 25.

(8) 1. 第一章. 緒論. 1.1 研究背景 在現代的計算機圖學的研究領域中,研究者們總是不斷地在追求更加逼真 的畫面與更加快速的運算速度,然而在兩者無法同時兼具的情況下,現今的研 究方向就分成了兩個大方向,一個是追求更加接近於如相片般逼真的畫面,透 過各種光線的物理模擬計算來達到近似於現實的結果;而另一個則是加速圖像 的計算,讓 FPS(frame per second,每秒影格數,又稱幀率)能有所提升,以達到 實時 (real time)呈現出所預期的畫面,當幀率達到每秒10到12張以上時,便會被 人眼認為是連貫的,在初期的電影業中所使用的標準一般為24 FPS,但隨著技術 的進步,目前人們對幀率的要求逐漸上升到了30 FPS 甚至是60 FPS,尤其是在 講求畫面流暢與瞬間反應的電玩遊戲中更顯得重要。. 1.2 研究目的 看似結構簡易的頭髮,實際上一般的普通人的整頭頭髮中,會有超過十萬 根的髮絲,假如要透過建模將數十萬根髮絲全部製作出來並不符合效益,在繪 製時也會因為過於密集而產生嚴重失真的問題,因此必須使用另外的方式進行 毛髮的繪製。. 1.3 研究意義 毛髮的繪製呈現一直是一門很值得探討的研究主題,只要是有生物參與其 中的遊戲或動畫,角色的身上通常會有毛髮的存在,也因此毛髮的繪製成了一 個很重要的問題,要如何把毛髮的光澤做得逼真、要如何做出趨近於真實的物 理效果,在現在這個越來越追求真實感的時代下,這些問題便顯得十分重要。. 1.

(9) 2. 1.4 論文結構 本篇論文將使用 shells 的毛皮呈現法,透過分析使用 geometry shader,進行 該方法的毛皮的呈現實作並予以改良。 在論文的開始將分析不同的毛髮呈現方式,說明不同種類的毛髮呈現之細 節與比較。接著詳述 geometry shader 的使用與作用,然後透過實作來進行毛皮 呈現繪製。最後呈現出使用該方法之實作結果的效能與畫面比較。.

(10) 3. 第二章. 文獻探討. 2.1 Practical Real-Time Hair Rendering and Shading 在初期的頭髮呈現中,由於製作髮絲過於複雜與困難,因此在 Thorsten Scheuermann 所發表的研究 [1]中提出了替代的方式進行頭髮的呈現。 實際上由於人類平常整理頭髮的習慣,頭髮是可以視作一片一片的髮片,因 此在這篇論文中,Thorsten Scheuermann 透過建模做出類似髮片形狀的模型,接 著再在其上貼上模擬頭髮陰影與光澤的貼圖,藉此做出逼近真實的頭髮模型 (如 圖1)。 這種做法的優點在於不會消耗大量資源,而缺點則是因為髮型被固定,因此 頭髮的彈性較差,並不能做出過於自由的物理模擬,但也因為髮型被固定的關 係,反而適合髮型不太需要劇烈變化的卡通風格角色使用。. 圖 1 使用頭髮模型呈現毛髮之示意圖 [1]. 3 3 1.

(11) 4. 2.2 Hair Rendering in Tomb Raider 在由 Hodes Stephan 與 Engel Wolfgang 所提出的研究 [2]中所講述的是為了遊 戲《古墓奇兵》中的主角蘿拉的頭髮而研發出的頭髮呈現(如圖2),基於遊戲的 性質,必須讓主角的頭髮能呈現出披頭散髮的模樣,也因此前一個以模型呈現 的頭髮並不適合在此遊戲中使用。 因此研究人員選擇改用 guide hair 的方式進行,這個方法是透過較少數的幾根 由設計者自行繪製的髮絲作為引導,在引導髮絲的周邊以演算法的方式生成出 近似於真實頭髮生長模式的其他髮絲,這樣便能透過對 guide hair 的控制來產生 出物理模擬的效果 (如圖3)。 這個研究所提出的方式直到現今的電子遊戲中也時常可被見到,但就算使用 了較少的髮絲進行模擬,其運算上依然會造成效能的下降,導致在某些較於古 老的機器中遊戲畫面的幀率可能無法維持在60 FPS,也因此許多有使用到類似技 術的電子遊戲中依然會製作並保留2.1的方式所呈現出的頭髮(如圖2左),以便讓 效能較不好的機器也能執行遊戲程式。. 圖 2 左為使用2.1之方法所呈現出的頭髮;右為發表中提到新的呈現方式 [2].

(12) 5. 圖 3 Guide Hair 示意圖 [2].

(13) 6. 2.3 NVIDIA Hairworks NVIDIA Hairworks [3]為近期一個由 NVIDIA 發表運用 DirectX 的毛髮呈現與 物理模擬之技術(如圖4),它能實現的效果與效能十分完善,也可以搭配 Maya、 3D MAX 等建模軟體使用。Hairworks 使用的一樣是 guide hair 的技術,它本身除 了趨近相片般逼真的毛髮呈現外,也實現了讓毛髮隨著風或其他拉力進行接近 於真實的物理模擬(如圖5),展現出有如真實頭髮一般的效果。. 圖 4 NVIDIA Hairworks 之範例結果 [3]. 圖 5 NVIDIA Hairworks 中的 Fur Ball 範例 [3].

(14) 7. 2.4 Fins and Shells 這個實作方式的概念最早是由 Kajiya and Kay 於1989年所提出 [4],而後經由 後人改良而成。有別於上面所有的毛髮呈現方式,上述的呈現方式都是必須要 透過現有的髮型模型或是已經預先設定好的 guide hair 才能進行毛髮繪製,而這 個方法不需要任何前置作業便能直接在模型上生成並繪製毛髮。 它是透過加點的方式,將原本使用隨機噪點產生的貼圖往三角片的法線方向 做延伸,藉此產生出像是毛皮般的效果 (如圖6)。 這個呈現方式所生成出來的毛髮效果並不如前兩者的好,但其優點是不需要 做任何前置作業便能直接生成出毛髮的效果,並且可以透過 geometry shader 的 計算處理來加速,快速簡單地呈現出毛髮。. 圖 6 Fins and shells 結果示意圖 [5].

(15) 8. 第三章. Geometry Shader. 3.1 概要 本研究中主要利用從 OpenGL 3.2開始支援的 geometry shader 來進行毛皮的 呈現繪製。Geometry shader 為介於 vertex shader 與 fragment shader 之間的一個可 選擇是否使用之可編譯 shader,其特性在於可以讓繪圖程式工程師在繪圖管線 (rendering pipeline) (如圖7)之中有更高的自由度與變化。. 圖 7 繪圖管線流程示意圖 [6]. 8.

(16) 9. 3.2 輸入與輸出 在 geometry shader 中,資料必須為圖元 (primitive)的形式輸入,其類型可為 points、lines、triangles。Geometry shader 在接收 input 時,會透過所設定的圖元 類型來讀入 vertex 資料,顧名思義,points 是將讀入的每一個頂點資料都作為單 獨的一個點來處理;lines 則是將資料依兩個兩個頂點所形成的線讀入處理; triangles 便是將每三個頂點所形成的三角片讀入進行處理。 而輸出也是以圖元的形式輸出,一樣是只有 points、line_strip、triangle_strip 三種型式輸出,points 是將每一個輸出的頂點直接輸出為單獨的點;line_strip 則 是依序將每兩點當作一條線、也就是以數條線來做輸出;而 triangle_strip 便是以 每三個點為一組形成數個三角片進行輸出。 Geometry shader 的計算與處理主要是對由 vertex shader 處理完後的頂點資料 為基準進行處理,由於這樣的特性,所以輸入的頂點資料皆已轉換為世界空間 (world space),因此經過 geometry shader 轉換完的模型並不需要再次經過 vertex shader 的處理便能直接輸出。 Geometry shader 在使用前需要先宣告輸入與輸出的圖元類型,這時需要在設 定輸出圖元類型時同時設定輸出頂點的數量上限,這個數字的最大值由 GL_MAX_GEOMETRY_OUTPUT_VERTICES 定義,超過的話 geometry shader 將無法正常執行。 Geometry shader 在輸出時需要呼叫 EmitVertex()這個函式,它的作用為生成 一個座標為 gl_Position 這個隱函數的新頂點,而在輸出的頂點數到達圖元所使 用頂點數後,便要呼叫 EndPrimitive()來完成一個圖元的輸出,藉此便可經由可 程式的過程將原本的模型轉換為新的頂點資料。.

(17) 10. 3.3 功能與應用 Geometry shader 的主要功能在於將模型的頂點進行位移、變形、加點…等動 作,通常運用在粒子效果等需要重複產生出新的點的效果。其特點在於使用的 是 GPU 進行運算,並可以在繪圖管線 (rendering pipeline)中對頂點資料進行轉換 與改變,也就是不需要對模型做改變便能實現在呈現的過程對模型進行變化, 因此可以做出許多多樣的效果。 Geometry shader 能做的事情非常多,只要是幾何的變換它都能實現,例如它 能進行曲面細分(tessellation)的處理,然而曲面細分在 OpenGL 4.0後便成了繪圖 管線中的一個單獨的階段 (stage),由曲面細分階段來進行曲面細分的處理會是 較好的選擇,因此 Khronos Group 建議使用者 geometry shader 使用時機應為在不 需要改變原始資料的情況下進行需要將單一圖元作為複數圖形輸出的狀況 [7], 而毛皮的生成便是屬於這類型的應用。. 3.4 對於毛皮生成之運用 在沒有 geometry shader 的時代,要實現毛皮生成是一大工程。舉例來說,以 fins and shells 實現法為例,假如不使用 geometry shader 的話必須要在進入繪圖 管線前便先做前處理,在模型的頂點資料讀入後把每個三角片進行複製後再將 資料存入,這樣的處理方式會需要消耗大量的儲存空間,且這個過程將由 CPU 處理,速度會比使用 GPU 處理的 geometry shader 來的慢上許多,並且假如要在 運行中對毛皮進行改變也將會消耗大量資源來處理。 由於 geometry shader 的特性,他可以將單一的輸入資料作為多個資料進行輸 出,並且透過 GPU 的運算加速,使其在繪製中也能實時地對毛皮進行改變。.

(18) 11. 第四章. 實作細節. 4.1 概要 在分析不同的呈現方式後,本論文決定使用 fins and shells 呈現法中的 shells 進行實作,並配合 geometry shader 來產生毛皮的層 (layer),運用 GPU 對可編譯 shader 的快速運算來達到在不增加記憶體成本與不過於影響效能及 FPS 的情況下 呈現出毛髮。 初始時將用隨機數產生的方式產生出每個像素點上有隨機 RGB 值的貼圖, 接著在讀入模型後透過 geometry shader 進行毛皮層的生成,最後在 fragment shader 時使用 discard 將不希望它顯示的透明部分丟棄掉,便能生成出毛皮或毛 髮的效果。 本篇論文所使用的呈現方式主要參考 [5] [8] [9]中所提到的毛皮 (fur)呈現方 式進行實作並改良,期望發揮 fins and shells 呈現法的特色,使任何已經進行過 unwrapped 處理好的模型都能直接套用,並在盡量不影響效能的狀況下產生出毛 皮的效果。. 11.

(19) 12. 4.2 Shells 所謂的 shell 指的便是一層一層的殼,在 shells 的做法中,他想像每個三角片 (或四邊形)都沿法線方向向上延伸形成一個立體空間,立體空間裡面有許許多多 根長短不一的毛髮髮絲,接著將這個立體空間水平橫切成無數個高度相同的小 空間,而這些切面便是所謂的殼,在這每一面殼上皆會產生出一張毛髮的橫切 面,這些毛髮會在切面上形成一個個的點,由於毛髮生長的特性,最下面的切 面裡會有最多的毛髮點,隨著高度的上升,切面中的點會逐漸減少。 而在繪製(render)時必須做的是將每一層殼都畫上切面的貼圖,在沒有毛髮 點的部分即呈現透明,這樣便能產生出宛如毛皮般的效果(如圖8)。. 圖 8 Shell textures 生成示意圖 [8].

(20) 13. 4.3 Geometry Shader 有了 shells 的概念後,這樣的想法並不能直接交由程式來實現,原因在於所 期望的結果並不是將以存在的毛髮進行分切,而是要無中生有,透過演算法的 計算來生成出長短不一的毛皮效果。. 4.3.1 殼的生成 在 pipeline 來到 geometry shader 時,geometry shader 將頂點資料以三角片 (triangle)的圖元形式輸入,此時的 geometry shader 便是以三角片為單位進行處 理。 接著要將該三角片往法線方向向上進行複製,在 geometry shader 中必須要給 予欲生成的毛皮層數及層與層之間的密集度,層數會決定總共複製出多少個三 角片;密集度則是兩個層之間密集的程度,越密集便越能讓毛髮成形,其中層 數與產生出的毛髮長度成正相關;而密集度則是與毛髮長度呈負相關。 最後的算式如下: gl_Position = gl_in[i].gl_Position + normal * layer * density 其中 i 為輸入頂點的索引值;normal 為標準化後的該三角片的法向量;layer 代表目前是第幾層;density 為層與層之間的密集度。.

(21) 14. 4.3.2 重力 然而這樣生成出的來的毛髮將全部都是直線結果會有如刺蝟一般不自然,因 此參考了 [9]中提到的重力 (gravity),替毛皮加上了重力使其看起來更趨近於真 實。 重力的實作如下: gl_Position = gl_Position + gravity * pow(layer, e) 其中 gravity 為重力的三維向量, y 值為負值;e 為指數。 將 y 為負值的向量加上殼三角片原本的位置會使得殼向下移動,接著透過使 用負數的指數運算,離原三角片越遠的殼會下降更多,藉此便可實現如毛髮下 垂的效果。. 4.3.3 輸出 最後 geometry shader 將會複製出與當初設定的層數數量相同的三角片,並將 複製出來的三角片以 triangle_strip 的形式輸出。此時要注意輸出的頂點數量,不 能超過3.2章提到當初所設定的 max_vertices,超過的話就會導致殼的顯示不完 全。.

(22) 15. 4.4 貼圖 4.4.1 貼圖生成 在 geometry shader 處理完之後,基本的幾何模型之頂點資料便算是完成了, 但只有殼 (shell)的三角片並無法完成毛皮的呈現,因此必須事先生成貼圖並透過 對貼圖進行必要的處理來達到 shells 的效果。 在繪製之前,必須要先生成一張 RGB 的貼圖,在這張貼圖中使用隨機的方 式取出數個像素,此時所取的像素點數量將會影響最後生成出的毛皮的濃密程 度,因此可以透過調整這個參數來改變毛皮的濃密程度。 在被選到的像素中必須將 RGB 值三者皆設定為相同隨機值,這個隨機值將 用作控制毛髮的長度,而剩餘的像素則全部設定為黑色。. 圖 9 由隨機數生成的毛皮貼圖.

(23) 16. 4.4.2 Mipmap 透過呼叫 glGenerateMipmap 生成這張貼圖的 mipmap,與一般貼圖的 mipmaping 一樣,產生 mipmap 後可以減少失真的狀況發生,且在生成出的毛皮 貼圖進行處理的同時,它會將毛髮點四周的點的數值與毛髮點的數值進行平 均,由於黑色的像素即長度值為零,平均時就會將毛皮像素點的四周就會形成 類似梯形的斜度,藉此在 fragment shader 處理透明片段時便能產生出不錯的尖錐 效果與陰影效果。. 4.4.3 Fragment Shader 當 geometry shader 處理完模型資料、生成好殼的三角片之後,fragment shader 便會接手處理貼圖的資訊,此時要將事先生成好的貼圖透過模型的紋理座 標 (texture coordinates)將毛皮貼圖貼到每一層殼的三角形上。 此時就會需要使用到當初在像素點中存的 RGB 數值了,這時的 RGB 值可以 視為毛髮的長度值,在此將與從 geometry shader 傳入、代表目前的殼為第幾層 的層數值做比較,當層數值超過毛髮的長度值時便會被拋棄 (discard)成為透明片 段,而沒有超過的部分就會呈現出來。 至此毛皮的生成就完成了,這樣一層一層的點在畫面上會形成一條線的原因 是當視角從斜角看向殼時,由於每一層殼都是沿著法線方向直線向上延伸,無 數的毛髮點就連成了一條線,使用者便能看到近似於毛皮的效果。.

(24) 17. 4.5 設計者控制 本實作法的特色在於將任何模型讀入皆可以輸出毛皮的效果,並且可以透過 參數控制並改變毛皮的長度、密度、重力…等呈現結果,但所有的三角片都是 同時通過同樣的處理,也因此假如設計者想要個別設定同個模型上的不同部份 產生不同效果會變得有些困難。 解決方法之一為將模型分作好幾個部份,設計者可以把想要在模型上產生不 同效果的部份個別切分出來,接著將每個分割後的模型分別使用不同的 shader 進行繪製,此時便能分別給各自的 shader 不同的參數,藉此來達到分區產生不 同結果的效果。.

(25) 18. 第五章. 實驗結果與討論. 5.1 概要 在本章節中,選擇使用由 Greg Turk 和 Marc Levoy 於1994年在史丹佛大學製 作的 Stanford bunny 模型 [10]來進行測試,用來測試的模型有先經過 unwrapping 處理,使得模型能夠正確貼上毛皮貼圖。. 5.2 Multisampling Anti-aliasing (MSAA) 在實作完成後,發現繪製出的毛皮會有在過遠時消失的問題,後來分析後發 現是因為毛皮像素點過小,且在 fragment shader 時使用 discard 來處理透明的部 份,因此在過遠時會造成失真的問題。 在明白造成此現象的原因後,決定使用多重採樣反鋸齒 (Multisampling Antialiasing,簡稱 MSAA)解決這個問題 (結果比較如圖10圖11所示)且並不影響 FPS,因此之後的實驗結果都是使用 MSAA 後的結果。. 圖 11 使用 MSAA (16 samples)(144 FPS). 圖 10 未使用 MSAA (144 FPS). 18.

(26) 19. 5.3 實驗環境 本研究使用以下的設備與參數進行測試:. CPU. Intel Core i7-7700HQ. GPU. NVIDIA GeForce GTX 1070. RAM. 16 GB. OS. Windows 10 64-bit. IDE. Microsoft Visual Studio 2017 表 1 實驗環境設備. 畫面解析度. 1024 x 1024. 模型. Stanford bunny (69451 triangles). MSAA. 16 samples 表 2 參數設定.

(27) 20. 5.4 毛髮繪製呈現效果 本研究的毛髮繪製呈現結果如圖12所示,殼的數量設定為40,密集度為20, 重力的指數設定為1.6、y 值為-2,毛皮的密度為1000。結果的 FPS 比較如表3所 示,使用了毛皮呈現的結果 FPS 約為143左右,與沒使用時的 FPS 差異不大。. 圖 12 毛皮呈現之結果. 未使用毛皮呈現之 geometry shader. 使用毛皮呈現之 geometry shader. 140.01 FPS. 143.98 FPS. 表 3 毛髮呈現與否之效能比較.

(28) 21. 5.5 毛髮長度比較 毛髮的長度是由 geometry shader 中生成的殼之層數以及殼與殼之間的密集度 來決定,殼的層數的有最大頂點上限的限制;密集度沒有最大限制但將數值設 定過大將會使殼與殼之間的距離過長,使毛皮的像素點無法連線成毛髮的線條 (如圖13所示)。. 10. 20. 30. 40 圖 13 殼的層數結果比較.

(29) 22. 調整密集度時,密集度越低所呈現出來的毛髮就越長。與調整殼之層數相 比,調整層的密集度會將毛髮的線條向內縮,但還是可以形成類似毛髮的線 條,並且重力的計算會使得下垂變得明顯 (如圖14所示)。然而當密集度設定得過 於疏遠時,毛髮的像素點就可能有無法連成毛髮線的狀況發生。. 80. 40. 20. 10 圖 14 殼的密集度之比較.

(30) 23. 5.6 重力比較 重力是由 y 為負數之方向向量乘上殼之層數的 e 次方,其中 e 為自行設定的 指數值,藉由透過改變 y 值便可調整下垂的幅度 (如圖15所示)。但由於指數的特 性,當 y 的絕對值越大時下垂的幅度會大幅改變,因此在調整時需要注意。. 0. -2. -5. -10 圖 15 毛髮下垂度之比較.

(31) 24. 5.7 毛皮密度比較 毛皮的密度是由貼圖上的像素點數量決定,要改變毛皮的密度必須重新生成 毛皮貼圖,在生成時減少毛皮像素點的數量便能使毛皮變得稀疏,增加像素點 則會使毛皮變得濃密 (如圖16)。. 100. 500. 1000. 5000 圖 16 毛皮濃密度之結果比較.

(32) 25. 5.8 顏色 目前在測試中所設定毛髮之顏色為白色,只要透過自行給予顏色資訊,並將 顏色與貼圖的資訊相乘,便能在保留陰影效果的狀態下改變其顏色 (如圖17所 示)。假如透過第二張貼圖,將原貼圖與毛皮貼圖的資訊相乘便能呈現出原本的 顏色。. RGB = (1.0, 1.0, 1.0). RGB = (1.0, 0.0, 0.0). RGB = (0.0, 1.0, 0.0). RGB = (0.0, 0.0, 1.0). 圖 17 不同顏色之毛皮繪製結果.

(33) 26. 第六章. 結論與未來方向. 在現今的電子遊戲中,幾乎都會出現有毛髮的動物或人類、甚至是毛衣或地 毯…等需要在達到實時的條件下進行毛皮呈現的情況,本研究藉由 geometry shader 的特性,在能於即時運算呈現的情況下將毛皮繪製出來,呈現出趨近真實 感之毛皮,並且讓毛皮可以透過改變參數來進行長度、毛髮密度、下垂度的變 化。 透過本實作方式,在呈現毛皮前並不需要事先製作引導髮絲等除原模型外的 額外細節便能透過即時運算呈現出毛皮的效果,相較於其他較為細緻的絲縷等 級 (strand-level)之毛髮模型,本研究之實作方式較為節省效能與記憶體,且能在 不需多作事前準備的情況下快速地將模型套上毛皮。 但本實作方式所製作出來的毛髮並無法像使用引導髮絲實作法所做出的毛髮 模型那樣細緻,且對於細部調整的自由度較低,因此在未來可能可以透過研究 光照等性質使其更加趨近於真實,並且可以繼續往讓設計者能更簡易地透過自 訂控制使其局部調整的方向前進。 除此之外,目前的物理模擬只有向下垂的重力,未來可以繼續研究殼的性 質,實作出更細膩的物理模擬。. 26.

(34) 27. 參考文獻. [1] T. Scheuermann, "Practical Real-Time Hair Rendering and Shading," in ACM SIGGRAPH 2004 Sketches, 2004. [2] S. Hodes and W. Engel, "Hair Rendering in Tomb Raider," in FMX 2013, 2013. [3] NVIDIA, "NVIDIA HairWorks," [Online]. Available: https://developer.nvidia.com/hairworks. [Accessed 9 2018]. [4] J. T. Kajiya and T. L. Kay, "Rendering Fur with Three Dimensional Textures," Computer Graphics, 3 11 1989. [5] S. Tariq, "White Paper - Fur (using Shells and Fins)," NVIDIA Corporation, 2007. [6] K. Group, "Rendering Pipeline Overview," [Online]. Available: https://www.khronos.org/opengl/wiki/Rendering_Pipeline_Overview. [Accessed 23 12 2018]. [7] K. Group, "Geometry Shader," [Online]. Available: https://www.khronos.org/opengl/wiki/Geometry_Shader. [Accessed 23 12 2018]. [8] G. Papaioannou, "A Simple and Fast Technique for Fur Rendering," 2002. [9] [email protected], "Fur Effects - Teddies, Cats, Hair ....," 2017. [Online]. Available: http://www.xbdev.net/directx3dx/specialX/Fur/index.php. [Accessed 23 12 2018]. [10] S. U. C. G. Laboratory, "The Stanford 3D Scanning Repository," [Online]. Available: http://graphics.stanford.edu/data/3Dscanrep/. [Accessed 2 1 2019]. [11] S. Radicke and S. Spielmann, "Real-Time Hair Rendering," 2014. [12] B. Verdonck, "Fur geometry shader," 2015. [13] J. Lengyel, E. Praun, A. Finkelstein and H. Hoppe, "Real-Time Fur over Arbitrary Surfaces," Proceedings of the 2001 symposium on Interactive 3D graphics. ACM, pp. 227-232, 2001.. 27.

(35)

參考文獻

相關文件

由於較大型網路的 規劃必須考慮到資料傳 輸效率的問題,所以在 規劃時必須將網路切割 成多個子網路,稱為網 際網路。橋接器是最早

如圖1-16所示,NOT運算會改變邏輯準位。輸入為 HIGH (1) 時,輸出為LOW (0)。當輸入為LOW時,輸出

具備 (凌陽格式 ) 串列 SRAM 介面. 7 通道10位元電壓類比/數位轉換器 (ADC) 單通道聲音類比/數位轉換器

IOB2 為反相輸出方式 與 IOB4 組成一個 RC.

下列哪一種記憶體屬於非揮發性記憶體, 不會因電源關閉而使其中的資料消 失, 但是可以透過電壓的方式重複抹除資料, 可用於基本輸入/ 輸出系統 (Basic Input / Output System,BIOS)

雙壓力閥在何時才有壓力(訊號)輸出(A) 其中一個輸入口有壓力(訊號)輸出 (B) 經指定的一 個輸入口有壓力(訊號),並且另一個輸入口沒有壓力(訊號) (C)

 真值表必須在關鍵字table table table table及endtable endtable endtable之 endtable 間。. 

 想要設計一個具有兩個輸入G(gate閘控)和 D(data資料)以及一個輸出Q的閘控閂電 路。當G等於1時,在輸入D出現的二進位資料