網(wǎng)站建設(shè)多少錢杭州百度搜索引擎廣告
?
一、渲染管線與模型基礎(chǔ)
1. 渲染管線
可編程階段(藍(lán)色區(qū)域):
1頂點(diǎn)著色器
2幾何著色器
3片元著色器
2. 模型的實(shí)現(xiàn)原理
UV:在建模軟件中,進(jìn)行UV展開,UV會(huì)放在一個(gè)橫向?yàn)閁縱向?yàn)閂,范圍(0~1)的二維坐標(biāo)系中。
展開后的UV在SP中繪制貼圖(漫反射貼圖、法線貼圖、高度貼圖、金屬度貼圖、AO貼圖)
一個(gè)模型包含的信息(OBJ文件)
Vertex頂點(diǎn)
Vertex Normal頂點(diǎn)法線
Vertex Texcoord頂點(diǎn)紋理坐標(biāo)
1V:頂點(diǎn)坐標(biāo)數(shù)據(jù)(模型空間中單個(gè)頂點(diǎn)的XYZ坐標(biāo))
2VT:貼圖坐標(biāo)(水平方向是U,垂直方向是V,范圍0~1之間)
3VN:頂點(diǎn)法線
4頂點(diǎn)色(FBX格式才有):單個(gè)頂點(diǎn)的RGB顏色信息。一個(gè)頂點(diǎn)包含了法線,紋理坐標(biāo),頂點(diǎn)色等信息。
OBJ和FBX格式對(duì)比
總結(jié)下,FBX相較于OBJ多支持了骨骼動(dòng)畫相關(guān)的東西,同時(shí)也可以存儲(chǔ)頂點(diǎn)色和LOD。
二、材質(zhì)基礎(chǔ)
1.漫反射
最容易模擬的模型。比如現(xiàn)實(shí)中的石頭,水泥,磚塊等。
光線均勻的反射出去。
Diffuse = baseColor * LightColor * dot(LightDir, Normal);
2.(光滑)鏡面反射
鏡面反射就是將入射光線根據(jù)表面發(fā)現(xiàn)進(jìn)行反射,入射角等于出射角。
Specular = Pow(saturate(dot(RefDir,ViewDir,32)))* LightColor;
3.粗糙鏡面反射
法線偏移較小。反射依然集中在一個(gè)區(qū)域,形成磨砂的質(zhì)感。
4.折射
對(duì)于玻璃這種介質(zhì),除了反射之外還有根據(jù)物體的折射率折射一部分光線進(jìn)入物體中,反射和折射能量的多少是根據(jù)菲尼爾定律決定的。
R = refract(View,Normal,ration);
ReflColor = tex2D(skybox,R);
5.粗糙鏡面折射
毛玻璃會(huì)有這種現(xiàn)象。
6.多層材質(zhì)
涂了透明油漆的木地板,上層是油漆,下層是地板,同時(shí)油漆還會(huì)反射上部的物體。
7.次表面散射
半透明的物體,例如玉石、蠟燭、牛奶、皮膚等。
以皮膚為例:光進(jìn)入皮膚后照亮了毛細(xì)血管,因此在明暗分界的位置,反射出的紅光就更容易被看到。
8.改變材質(zhì)表面
現(xiàn)實(shí)世界中不存在完美平滑的表面,因此需要對(duì)模型表面的發(fā)現(xiàn)進(jìn)行擾動(dòng)。其中一個(gè)方法是使用法線貼圖。
漫反射,高光,折射都與法線有關(guān),因此改變法線,就能改變其光照結(jié)果。
三、模型數(shù)據(jù)在渲染中的作用
1.頂點(diǎn)動(dòng)畫
在頂點(diǎn)著色器中,修改模型的頂點(diǎn)位置,進(jìn)而達(dá)到模型運(yùn)動(dòng)的效果。
○頂點(diǎn)著色器計(jì)算的是模型的每一個(gè)頂點(diǎn),每一個(gè)頂點(diǎn)的數(shù)據(jù)是不同的,因此同一個(gè)計(jì)算公式在不同的頂點(diǎn)上計(jì)算出來的結(jié)果也是不同的。
○需要一定數(shù)量的頂點(diǎn),頂點(diǎn)動(dòng)畫的效果才會(huì)明顯。
○在一些三維建模軟件中,動(dòng)畫的k幀也是一種頂點(diǎn)動(dòng)畫
2.紋理動(dòng)畫
在片段著色器中,修改模型的UV信息,使得采樣貼圖時(shí)發(fā)生位置而產(chǎn)生的運(yùn)動(dòng)效果。
效果:
利用法線貼圖,改變反射與折射的朝向。
原理1:
○修改前,使用1這個(gè)法線,反射出去的就是1。
○修改后,使用2這個(gè)法線,反射出去的就是2.
○修改的只是法線信息,因此其他數(shù)據(jù)還是保持修改前的樣子。
對(duì)背部畫面采樣的部分
原理2:
○改變UV采樣點(diǎn)的位置,產(chǎn)生動(dòng)畫效果
3.頂點(diǎn)色
在渲染時(shí),影響輸出結(jié)果??刂祁伾秶?/p>
因?yàn)樗倪吤姹举|(zhì)上還是三角面組合而成,所以在繪制時(shí)會(huì)出現(xiàn)三角形的分界。
FragColor = FinalColor * VertexColor;
●可以通過判斷頂點(diǎn)色,來做一些操作
○例如,頂點(diǎn)色到達(dá)一定的值,就可以做陰影
●Maya中頂點(diǎn)色的繪制
4.重心坐標(biāo)
●具體可以參考下GAMES101—L9部分
5.頂點(diǎn)與面法線
原理:
面法線
○未使用平滑時(shí),三角形三個(gè)頂點(diǎn)公用一個(gè)法線,那么插值時(shí),因?yàn)槿齻€(gè)頂點(diǎn)的法線相同,所以插值的結(jié)果相同。
頂點(diǎn)法線
○使用平滑后,一個(gè)頂點(diǎn)一個(gè)法線。三角形三個(gè)頂點(diǎn)的法線就不相同,插值結(jié)果也就不同。
平滑/未使用平滑,在模型文件內(nèi)部存儲(chǔ)方式
擴(kuò)展
在NPR渲染中
○通常在頂點(diǎn)著色器中,將頂點(diǎn)往法線方向偏移。然后再在片段著色器中直接輸出一個(gè)顏色,達(dá)到描邊的效果。
○B(yǎng)ackFacing描邊時(shí),描邊線條斷開就是因?yàn)闆]有平滑頂點(diǎn)之間的法線導(dǎo)致的。
作業(yè)
1.頂點(diǎn)色的其他作用
1.作為一種存儲(chǔ)的mask使用(這樣可以少使用一張圖)
●不想讓連上有菲尼爾效應(yīng),就把臉涂黑,乘上頂點(diǎn)色
●不想讓某些地方有描邊,同上
●拿到頂點(diǎn)色后可以做一些其他操作,塞入頂點(diǎn)色的信息必須是線性變化的,如果不是,就要做好精度打折的準(zhǔn)備
●可用于預(yù)先指定光照、阻光和其他視覺效果
●可以把顏色信息存在頂點(diǎn)里,但是在低模的情況下效果很差。
簡(jiǎn)單說頂點(diǎn)色相當(dāng)于一個(gè)數(shù)據(jù)存儲(chǔ)的地方,你可以將任何數(shù)據(jù)塞到此處,然后利用這些數(shù)據(jù)進(jìn)行操作,考慮優(yōu)化時(shí)更應(yīng)注重頂點(diǎn)色的應(yīng)用。
2.模型光滑組對(duì)法線有什么影響
在模型上沒有真正的光滑面,也沒有真正的四邊形面,所有面都是三角形組成的。
平常說的布線合理,拓?fù)淦鋵?shí)是保持兩個(gè)三角形面的一致性(構(gòu)成一個(gè)四邊面的兩個(gè)三角形面)
①光滑組的含義
下圖標(biāo)出了面的亮度,純打比方不是確切數(shù)字。
光滑組處理面之間的光照信息,提高它們的亮度、飽和度,兩面之間的過渡就是兩面亮度和平均值。
②光滑組如何計(jì)算?
如果一個(gè)面的光滑組是1,一個(gè)是2,那么他們之間不存在計(jì)算。
如果它們光滑組都是1,就會(huì)進(jìn)行光照計(jì)算,并且影響最終渲染,也就是說他們光滑組一樣的話,就會(huì)進(jìn)行光照計(jì)算,產(chǎn)生光滑效果。
下圖為不同數(shù)值下的光滑效果,數(shù)值一致就會(huì)有平滑效果。
網(wǎng)格平滑和渦輪平滑:通過增加面,把面分的更細(xì)膩來表達(dá)曲度。
自動(dòng)平滑默認(rèn)所有面的夾角小于45°的進(jìn)行光滑,默認(rèn)創(chuàng)建的球面的夾角都小于45°所以都平滑了,下圖為數(shù)值為10的時(shí)候。
③光滑組對(duì)法線的影響
法線
●烘焙發(fā)現(xiàn)的意義,就是把高模的法線方向,用一張圖(RGB)來存儲(chǔ)法線信息,存到低模的表面上。貼上法線貼圖的低模,就會(huì)在視覺上產(chǎn)生凹凸不平、增加細(xì)節(jié)的渲染效果,從而看起來像高模一樣。Normal Mapping法線貼圖本質(zhì)上就是一種圖片,只是這樣圖片的用途比較特殊而已。
●沒有光滑組的話,烘出來的法線貼圖是一棱一棱的。一般情況華至少也要給一個(gè)光滑組。
光滑組(軟硬邊)和UV對(duì)法線的影響
●光滑組相連接的模型,法線貼圖都存在打漸變色,導(dǎo)致魔性的法線效果會(huì)很奇怪(平面上有法案發(fā)涼的光影)。當(dāng)你發(fā)現(xiàn)模型出現(xiàn)這種漸變時(shí),一定是出現(xiàn)了光滑組的問題。
●中間的兩個(gè)模型出現(xiàn)了不同程度的接縫(第三個(gè)模型的接縫非常明顯,第二個(gè)模型則弱一些)。光滑組和UV統(tǒng)一相連或斷開,是不會(huì)出現(xiàn)明顯接縫的,當(dāng)遇到解封問題,優(yōu)先考慮模型的光滑組和UV是否統(tǒng)一。