【技術(shù)美術(shù)百人計(jì)劃】曲面細(xì)分與幾何著色器
講實(shí)話這節(jié)課聽得確實(shí)有點(diǎn)痛苦,因?yàn)殛P(guān)于這兩個(gè)著色器我們更需要學(xué)的是一些基礎(chǔ)的知識(shí),課程上講的東西,感覺更偏向于給一個(gè)懂曲面細(xì)分著色器和幾何著色器看幾個(gè)案例??傊€是先記下知識(shí)點(diǎn),找找其他教程吧。
曲面細(xì)分著色器

將一條直線進(jìn)行細(xì)分,無限逼近這條曲線
可以用來制作海浪,雪地,雪地里出現(xiàn)的腳印,可以和置換貼圖來結(jié)合,真正改變物體形狀,邊緣會(huì)有非常強(qiáng)的凹凸感
為什么不用復(fù)雜模型,而用曲面細(xì)分著色器?
它可以根據(jù)距離或者一些規(guī)則來動(dòng)態(tài)調(diào)整模型的復(fù)雜度,帶來更好的性能
幾何著色器

主要來進(jìn)行一些幾何的繪制
可以用來做一些簡單的幾何動(dòng)畫,可以用來做類似于爆破破碎的效果,也可以草自己定義草是怎么畫的,然后和曲面細(xì)分著色器結(jié)合,這樣就可以有一個(gè)動(dòng)態(tài)調(diào)整密度的草地,遠(yuǎn)的地方稀疏一些,近的地方密一點(diǎn)
執(zhí)行順序

頂點(diǎn)--->曲面細(xì)分---->幾何----->片元
Hull Shader主要作用是用來定義一些細(xì)分的參數(shù),比如每條邊上如何細(xì)分和內(nèi)部三角形如何細(xì)分
Domain Shader它的空間在重心空間,我們需要把這個(gè)重心空間轉(zhuǎn)換到我們要用的空間.
TESS(幾何著色器)的輸入與輸出
輸入:Patch,可以看作多個(gè)頂點(diǎn)的集合,包含每個(gè)頂點(diǎn)的屬性,可以指定一個(gè)Patch包含的頂點(diǎn)數(shù)以及自己的屬性。
功能:將圖元細(xì)分
輸出:細(xì)分后的頂點(diǎn)
TESS(幾何著色器)的流程
HullShader:決定細(xì)分的數(shù)量,并對輸入的Patch參數(shù)進(jìn)行改變(如果需要)
Tessellation Primitive Generation:進(jìn)行細(xì)分操作
Domain Shader:對細(xì)分后的頂點(diǎn)進(jìn)行處理,從重心空間轉(zhuǎn)換到屏幕空間
Hull Shader參數(shù)解析
TessellationFactor:決定將一條邊分為幾部分
equal_Spacing:等距分割
fractional_even_spacing:向上取最近整數(shù),n-2的等長部分,兩邊的小數(shù)部分
fractional_odd_spacing:向上取最近奇數(shù),n-2的等長部分,兩邊的小數(shù)部分


曲面細(xì)分Demo演示
將一個(gè)Quad細(xì)分
體現(xiàn)具體的使用方法,通過一個(gè)quad可以看出不同數(shù)值對細(xì)分的 ? 影響(之后可以使用在草地中),基于shader再回顧一遍各個(gè)參數(shù)的作用

與置換貼圖的結(jié)合

GS(幾何著色器)的輸入與輸出
1.輸入為圖元(三角形,矩形,線等)根據(jù)圖元的不同,shader中會(huì)出現(xiàn)對應(yīng)不同數(shù)量的頂點(diǎn)
2.輸出同樣為圖元,一個(gè)或多個(gè),需要自己從頂點(diǎn)構(gòu)建,順序很重要,同時(shí)需要定義最大輸出的頂點(diǎn)數(shù)
幾何著色器 Demo演示
基于三角形構(gòu)建一個(gè)草地,從簡單的生成三角形開始,涉及Triangle Stream的使用,基于切線空間的頂點(diǎn)操作以及與曲面細(xì)分shader的聯(lián)合使用, 同時(shí)可以說一下曲面細(xì)分參數(shù)的確定方式(基于distance, edge)

Unity Shader學(xué)習(xí):Geometry Shader(幾何著色器)



【技術(shù)美術(shù)百人計(jì)劃】曲面細(xì)分與幾何著色器的評論 (共 條)
