Unity 之渲染管線初探

Unity 是一款跨平臺(tái)的 3D 引擎摆霉,有著強(qiáng)大的渲染功能,并主要用于游戲開(kāi)發(fā)讼昆。

談到 Unity 的渲染功能蒙袍,我們不得不提及到著色器(Shader)——3D 游戲引擎中最重要的一個(gè)因素-,它在游戲效果以及畫(huà)面顯示方面起到了決定性的作用。Shader 編程也屬于計(jì)算機(jī)圖形學(xué)中一個(gè)重要的部分玄坦。

接下來(lái)讓我們從可編程渲染管線來(lái)了解 Shader 編程血筑。

渲染管線模型

3D 游戲以及 3D 模型通過(guò)渲染管線來(lái)渲染到 2D 的屏幕上。渲染管線的流程是在 GPU 中進(jìn)行的煎楣,它主要占有計(jì)算機(jī)的顯存部分豺总。渲染管線在這個(gè)過(guò)程中進(jìn)行了頂點(diǎn)處理、面處理择懂、光柵化喻喳、像素處理。

1)頂點(diǎn)處理

大多數(shù)接觸過(guò) 3D 圖形的人都知道3D 模型是通過(guò)眾多點(diǎn)構(gòu)成的面而展現(xiàn)出來(lái)的困曙。

頂點(diǎn)處理表伦,是通過(guò)一系列坐標(biāo)系的變換,讓各個(gè)頂點(diǎn)通過(guò)一定的規(guī)律在攝像機(jī)前位移慷丽,最終在屏幕上對(duì)應(yīng)這些頂點(diǎn)的過(guò)程蹦哼。

首先,物體的各個(gè)頂點(diǎn)從自身坐標(biāo)系要糊,通過(guò)世界變換矩陣處理轉(zhuǎn)換到世界坐標(biāo)系纲熏,再通過(guò)取景變換矩陣變換到觀察者坐標(biāo)系,最后通過(guò)投影變換锄俄,將頂點(diǎn)轉(zhuǎn)移到屏幕坐標(biāo)系局劲。

有一點(diǎn)大家會(huì)經(jīng)常忘記,在觀察者坐標(biāo)系轉(zhuǎn)換到投影坐標(biāo)系的過(guò)程中珊膜,GPU(圖形處理單元)還對(duì)材質(zhì)屬性和光照屬性進(jìn)行了處理容握。

2)面處理

三點(diǎn)成一面。面處理有三個(gè)部分:面的組裝车柠、面的截取剔氏、面的剔除。

面的組裝:模型中的三個(gè)點(diǎn)會(huì)組成一個(gè)三角形的面(非任意點(diǎn)竹祷,因?yàn)槊總€(gè)點(diǎn)都有自己的編號(hào))谈跛。這些面,面面相接塑陵,組成了我們能看到的模型感憾。

面的截取:由于攝像機(jī)和人眼一樣令花,可視的區(qū)域是一個(gè)錐形阻桅,模型在攝像機(jī)可視范圍內(nèi)可能并不是全覆蓋凉倚,也就是在攝像機(jī)外,這些在攝像機(jī)之內(nèi)的部分就會(huì)被截取嫂沉。

面的剔除:為了模擬肉眼稽寒,攝像機(jī)前的物體會(huì)出現(xiàn)近大遠(yuǎn)小的現(xiàn)象,那么物體和物體之間會(huì)有遮擋趟章,被遮擋的面會(huì)被剔除不處理杏糙;每個(gè)面都有法向量,所以只有在面的法向量和攝像機(jī)散射向量夾角大于90度的才會(huì)被攝像機(jī)捕捉到蚓土。

3)光柵化

光柵化宏侍,又稱之合并階段。它的主要功能是將面轉(zhuǎn)換成一幀中的像素集合蜀漆。

這一階段是不可以編程的谅河,它負(fù)責(zé)執(zhí)行多個(gè)片段測(cè)試,包括:深度測(cè)試嗜愈、alpha 測(cè)試和模板測(cè)試旧蛾,程序員可以通過(guò)高度配置來(lái)實(shí)現(xiàn)想要的效果莽龟。如果通過(guò)了所有的測(cè)試蠕嫁,這部分顏色就會(huì)與幀緩沖存儲(chǔ)的顏色通過(guò) alpha 混合函數(shù)進(jìn)行合并。

4)像素處理

這個(gè)階段將像素區(qū)域著色毯盈,然后賦予貼圖剃毒。

(左上為3D網(wǎng)格模型,左下為賦予貼圖后的3D模型搂赋,右圖為貼圖)

Shader 詳解

介紹完GPU 渲染管線之后赘阀,我們?cè)賮?lái)簡(jiǎn)單了解一下可編程著色器 Shader?——?圖形渲染里最有趣的部分。Shader 能讓渲染的圖形展示出水面效果脑奠、火焰的熱流效果基公、角色的虛化效果等視覺(jué)效果。

著色器可分為頂點(diǎn)著色器(VertexShader)宋欺、幾何著色器(Geometry Shader)和像素著色器(Pixel Shader)轰豆。它們從輸入的數(shù)據(jù)中取得一個(gè)元素,通過(guò)程序計(jì)算齿诞,變換為輸出數(shù)據(jù)的一個(gè)或多個(gè)元素酸休。

頂點(diǎn)著色器輸入源為頂點(diǎn),頂點(diǎn)包含其在自身坐標(biāo)系或世界坐標(biāo)系的位置和矢量信息祷杈,而輸出源為已通過(guò)變換和照明處理的頂點(diǎn)斑司,包含其投影坐標(biāo)系的信息。

幾何著色器的輸入源為一個(gè)有 n 個(gè)頂點(diǎn)的幾何圖元以及最多 n 個(gè)作為控制點(diǎn)的額外頂點(diǎn)但汞,輸出源則變成 0 或多個(gè)圖元宿刮。根據(jù)效果需要互站,這些圖元的可能和輸入的時(shí)候不同。

像素著色器輸入為頂點(diǎn)間的片段僵缺,這些片段所包含的信息來(lái)自于對(duì)三角形頂點(diǎn)信息的插值云茸,輸出成將要寫(xiě)到幀緩沖里的顏色

結(jié)語(yǔ)

在游戲中谤饭,絢麗的場(chǎng)景和角色是怎么來(lái)的呢标捺? 很簡(jiǎn)單,紋理數(shù)據(jù)以紋理坐標(biāo)(UV 坐標(biāo))尋址的揉抵,而并非內(nèi)存地址亡容。通過(guò)著色器我們可以直接讀取紋理貼圖。

模型的頂點(diǎn)和紋理內(nèi)的 UV 坐標(biāo)一一對(duì)應(yīng)冤今,這樣闺兢,紋理就以一定的規(guī)則貼在了模型上。

以上就是對(duì)渲染管線的簡(jiǎn)單介紹戏罢,關(guān)于著色器語(yǔ)法且待下回分解屋谭。

本文作者:吳思淇(點(diǎn)融黑幫), 現(xiàn)就職于點(diǎn)融Social team龟糕,一個(gè)熱愛(ài)游戲設(shè)計(jì)的web 前端程序猿一枚桐磁。

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
  • 序言:七十年代末,一起剝皮案震驚了整個(gè)濱河市讲岁,隨后出現(xiàn)的幾起案子我擂,更是在濱河造成了極大的恐慌,老刑警劉巖缓艳,帶你破解...
    沈念sama閱讀 218,755評(píng)論 6 507
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件校摩,死亡現(xiàn)場(chǎng)離奇詭異,居然都是意外死亡阶淘,警方通過(guò)查閱死者的電腦和手機(jī)衙吩,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 93,305評(píng)論 3 395
  • 文/潘曉璐 我一進(jìn)店門(mén),熙熙樓的掌柜王于貴愁眉苦臉地迎上來(lái)溪窒,“玉大人坤塞,你說(shuō)我怎么就攤上這事∶姑停” “怎么了尺锚?”我有些...
    開(kāi)封第一講書(shū)人閱讀 165,138評(píng)論 0 355
  • 文/不壞的土叔 我叫張陵,是天一觀的道長(zhǎng)惜浅。 經(jīng)常有香客問(wèn)我瘫辩,道長(zhǎng),這世上最難降的妖魔是什么? 我笑而不...
    開(kāi)封第一講書(shū)人閱讀 58,791評(píng)論 1 295
  • 正文 為了忘掉前任伐厌,我火速辦了婚禮承绸,結(jié)果婚禮上,老公的妹妹穿的比我還像新娘挣轨。我一直安慰自己军熏,他們只是感情好,可當(dāng)我...
    茶點(diǎn)故事閱讀 67,794評(píng)論 6 392
  • 文/花漫 我一把揭開(kāi)白布卷扮。 她就那樣靜靜地躺著荡澎,像睡著了一般。 火紅的嫁衣襯著肌膚如雪晤锹。 梳的紋絲不亂的頭發(fā)上摩幔,一...
    開(kāi)封第一講書(shū)人閱讀 51,631評(píng)論 1 305
  • 那天,我揣著相機(jī)與錄音鞭铆,去河邊找鬼或衡。 笑死,一個(gè)胖子當(dāng)著我的面吹牛车遂,可吹牛的內(nèi)容都是我干的封断。 我是一名探鬼主播,決...
    沈念sama閱讀 40,362評(píng)論 3 418
  • 文/蒼蘭香墨 我猛地睜開(kāi)眼舶担,長(zhǎng)吁一口氣:“原來(lái)是場(chǎng)噩夢(mèng)啊……” “哼坡疼!你這毒婦竟也來(lái)了?” 一聲冷哼從身側(cè)響起柄沮,我...
    開(kāi)封第一講書(shū)人閱讀 39,264評(píng)論 0 276
  • 序言:老撾萬(wàn)榮一對(duì)情侶失蹤回梧,失蹤者是張志新(化名)和其女友劉穎废岂,沒(méi)想到半個(gè)月后祖搓,有當(dāng)?shù)厝嗽跇?shù)林里發(fā)現(xiàn)了一具尸體,經(jīng)...
    沈念sama閱讀 45,724評(píng)論 1 315
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡湖苞,尸身上長(zhǎng)有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 37,900評(píng)論 3 336
  • 正文 我和宋清朗相戀三年拯欧,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片财骨。...
    茶點(diǎn)故事閱讀 40,040評(píng)論 1 350
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡镐作,死狀恐怖,靈堂內(nèi)的尸體忽然破棺而出隆箩,到底是詐尸還是另有隱情该贾,我是刑警寧澤,帶...
    沈念sama閱讀 35,742評(píng)論 5 346
  • 正文 年R本政府宣布捌臊,位于F島的核電站杨蛋,受9級(jí)特大地震影響,放射性物質(zhì)發(fā)生泄漏。R本人自食惡果不足惜逞力,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 41,364評(píng)論 3 330
  • 文/蒙蒙 一曙寡、第九天 我趴在偏房一處隱蔽的房頂上張望。 院中可真熱鬧寇荧,春花似錦举庶、人聲如沸。這莊子的主人今日做“春日...
    開(kāi)封第一講書(shū)人閱讀 31,944評(píng)論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽(yáng)。三九已至峦嗤,卻和暖如春添祸,著一層夾襖步出監(jiān)牢的瞬間,已是汗流浹背寻仗。 一陣腳步聲響...
    開(kāi)封第一講書(shū)人閱讀 33,060評(píng)論 1 270
  • 我被黑心中介騙來(lái)泰國(guó)打工刃泌, 沒(méi)想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留,地道東北人署尤。 一個(gè)月前我還...
    沈念sama閱讀 48,247評(píng)論 3 371
  • 正文 我出身青樓耙替,卻偏偏與公主長(zhǎng)得像,于是被迫代替她去往敵國(guó)和親曹体。 傳聞我的和親對(duì)象是個(gè)殘疾皇子俗扇,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 44,979評(píng)論 2 355

推薦閱讀更多精彩內(nèi)容