最美情侣中文字幕电影,在线麻豆精品传媒,在线网站高清黄,久久黄色视频

歡迎光臨散文網(wǎng) 會員登陸 & 注冊

Minecraft GLSL Shader著色器基礎教程#2.5 著色器是個啥?著色器相關名詞的解釋

2023-07-31 07:24 作者:軒宇1725  | 我要投稿

注意:閱讀本篇教程需要您有以下基礎:

1.基本了解原版資源包的功能,包括方塊狀態(tài)調用、模型、紋理等內(nèi)容

2.有編寫過資源包json、mcmeta等文件

3.無論是利用軟件建模還是“記事本”建模,了解原版模型文件的結構等


著色器

很多人學著色器面臨的一大問題就是不明白著色器到底是個什么東西,著色器到底是干什么的?學起來模模糊糊,感覺很抽象。

其實著色器就是資源包的一個模塊,就像blockstate文件夾下的方塊狀態(tài)文件控制方塊的不同狀態(tài)調用的不同模型;textures下的紋理決定了貼到模型上的貼圖,shader文件夾下的著色器則控制了游戲中所有內(nèi)容的渲染,這就是說,著色器是對游戲內(nèi)容有實實在在的操作,它讀取并在運算后輸出,而不僅僅是其他內(nèi)容如模型、紋理那樣的“被調用”

控制渲染是什么意思?聽它的中文譯名,感覺是給游戲內(nèi)容著色的,就像怪物蛋、藥水、皮革套的著色。但著色器所控制的渲染程序不止于此。

著色器的工作,主要有兩項:

取得游戲內(nèi)容的頂點位置,通過一系列運算并輸出頂點位置

取得游戲內(nèi)容的顏色信息,通過一系列運算并輸出顏色信息

但是這里要注意的是,盡管著色器的對象不止一個頂點,但是著色器在工作時只對一個點進行更改,而且也只能獲得這個點的信息。但是別擔心,這個頂點所在的整張紋理圖片atlas也是頂點信息的一部分,這張atlas貼圖包含了資源包內(nèi)所有被加載的紋理,能夠訪問的信息還是比較客觀的。甚至包含玩家攝像機看到這個頂點的視角、光線、霧等信息和一個比較特殊的全局量GameTime(或Time,可以訪問時間)。但是著色器不能知道模型上相鄰的頂點的信息,盡管我們知道、也可以調用處相鄰頂點處“應該”調用的紋理信息,但是這不意味著我們訪問了那個點。要記?。褐髅看沃桓囊粋€點的內(nèi)容,它無法獲得到其他點的內(nèi)容!

注意:這里說的一個點并不是貼圖上的一個像素,貼圖的像素

著色器只需要更新gl_Positiongl_FragColor這兩個變量,就可以做到對游戲內(nèi)容渲染的控制。現(xiàn)在不理解這兩個變量沒關系,你將在以后的教程中了解著色器的編寫。

此外,著色器目前有三個類別:核心著色器(Core Shader 負責渲染所有的游戲內(nèi)容如方塊、UI欄、實體等)、后處理著色器(Post?Shader 負責渲染整個屏幕,在核心著色器之后開啟,將整個屏幕作為一張2D的“照片”進行更改)、包含著色器(Include?Shader 負責聲明一些常量和函數(shù),開發(fā)者將包含著色器引入vsh或fsh中,這樣就可以利用包含著色器中的函數(shù)進行開發(fā)

著色器程序

在shader文件夾下,有許多json格式的著色器程序,游戲通過調用這些著色器程序來更新渲染。

著色器程序(json)本身不包含代碼,而是和我們所熟悉的資源包中其他的json一樣,負責指定一些類內(nèi)容。

如模型的json文件中指定了每一個體素的位置、大小和貼圖,著色器程序這個json文件則指定了一系列全局量(uniform),一個頂點著色器(vsh)和一個片段著色器(fsh)等內(nèi)容,這些內(nèi)容則涉及到GLSL的編寫,也就是前文涉及到的“一系列運算”這個步驟。

游戲內(nèi)容的頂點位置顏色信息在每一個著色器程序中都不同,這些不同的內(nèi)容可以被著色器程序傳到相同或不同的頂點著色器。最終輸出到屏幕上面。比如后處理著色器creeper,就將整個屏幕的內(nèi)容(這是后處理著色器所負責渲染的游戲內(nèi)容)通過著色器程序:color_convolve、scan_pincushion層層運算并最終輸出的特殊的“苦力怕視角”效果。(其中還有兩個blit程序,但blit程序的工作就是啥也不干)

后處理著色器和渲染管線(緩沖層)

后處理著色器的工作是在核心著色器之后對整個屏幕生效,也就是說它每次會讀取一個屏幕上的像素并通過一系列著色器程序進行更改。

這個“一系列”著色器程序即為渲染管線,渲染管線也是一個json文件,其中聲明了一些類緩沖層,并以列表形式聲明了啟用的著色器程序的順序和參數(shù),以及緩沖層的傳遞順序。參數(shù)以全局量的形式被vsh和fsh調用。

緩沖層類似畫布(也有直接將緩沖層翻譯為畫布的,json文件中叫做target,這里采用我第一次見到的翻譯),畫布的大小可以自定義,其中有幾個特殊的畫布如minecraft:main緩沖,它的大小是玩家的窗口大?。▎挝粸橄袼兀@個緩沖中則是之前所說的“整個屏幕的內(nèi)容”,并且在渲染管線的最后也要將畫面?zhèn)骰豰inecraft:main

之前說過,blit程序什么也不干,但是他還是有存在的意義:因為渲染管線的組成是:著色器程序+傳入+傳出+可選的參數(shù),而且傳入和傳出的緩沖不能是同一個,所以在把A通過一定運算傳到B后,需要一個什么也不干的著色器程序把B傳回A(但是mojang做了很多個啥也不干的著色器程序,這點我確實是看不懂了)

頂點著色器和片段著色器

片段著色器(fragment?shader)也可以翻譯為幀著色器或按用法命名為顏色著色器,我這里采用了我首次見到而且我比較順口的一種翻譯即片段著色器

頂點著色器和片段著色器是實際包含GLSL代碼的部分,它們可以被多個著色器程序共用,用uniform修飾的變量(譯為全局量)來接收著色器程序傳遞給它的實參,用sampler采樣器對緩沖或游戲內(nèi)容進行采樣,獲得顏色信息或光照信息等,由于采樣器與采樣到的東西是一對應的,所以可以將采樣器視為一個緩沖或一張紋理

頂點著色器和片段著色器的語法是一致的,它們的區(qū)別主要在順序和“任務”上,頂點著色器比片段著色器要先執(zhí)行,甚至在大多數(shù)著色器中,頂點的顏色是在頂點著色器中先初步運算再傳入片段著色器的。片段著色器

在vsh和fsh之間還可以使用in和out來修飾變量,使其傳遞到下一個著色器中,如:游戲內(nèi)容的一些信息如頂點位置在vsh中用in接收,vsh更新頂點位置并運算出紋理坐標和頂點顏色,用out傳輸?shù)絝sh中,又在fsh中用in接收這些變量以更新頂點顏色。

為了便于理解,可以這樣來表示著色器變量的傳輸

著色器程序.json?->in?頂點著色器.vsh?out->in 片段著色器.fsh?out->??屏幕,uniform變量則是共通的

著色器可以干什么

這個問題對已經(jīng)有資源包制作經(jīng)驗的人可能更有意義,我們在制作資源包的時候常常遇到很多限制,比如:

制作模型的時候有大小、旋轉限制:這可以用頂點著色器偏移頂點位置的功能解決

希望可以在UI界面的物品和手上的物品上調用兩套模型:這可以通過檢測不同位置和貼圖的不同來決定是否渲染某一張貼圖,做到不同模型的效果

希望可以實現(xiàn)自發(fā)光功能:通過檢測需要自發(fā)光的紋理,更改顏色的計算過程,將頂點的顏色以原始亮度渲染,做到自發(fā)光的效果

此外著色器還可以檢測到:玩家的視角使游戲內(nèi)容隨視角的變化而變化,甚至做到更改某些游戲內(nèi)容被看到的視角和投影方式?;蛘邫z測游戲時間來做到模型動畫等,由于偏移頂點的單位是以像素為單位的,這意味著可以利用著色器來制造一些曲面,讓原版mc模型也出現(xiàn)球體。

后處理著色器則可以單獨訪問一些游戲內(nèi)容,如粒子、深度等,以及通過采樣器訪問到屏幕某一點的顏色,甚至在屏幕上“打印文字”、記錄過去某一幀的屏幕并再未來調用。

本篇教程先到這里,如果有錯誤或需要補充可以在評論區(qū)指出,我會找時間修改。

關于渲染管線、后處理著色器、著色器程序的結構和全局量、采樣器的用法在前兩篇教程中已經(jīng)介紹過,請讀者自行翻閱。

Minecraft GLSL Shader著色器基礎教程#2.5 著色器是個啥?著色器相關名詞的解釋的評論 (共 條)

分享到微博請遵守國家法律
桑植县| 巢湖市| 密山市| 昌黎县| 开原市| 高平市| 宝丰县| 邮箱| 霍邱县| 永仁县| 兴业县| 漳平市| 萨迦县| 开远市| 镇宁| 拜城县| 平江县| 彰武县| 三都| 湖北省| 远安县| 白城市| 永昌县| 福安市| 贵南县| 确山县| 茌平县| 沁水县| 塔河县| 江门市| 肃南| 海盐县| 清远市| 定南县| 敦化市| 定安县| 托克逊县| 自贡市| 汉中市| 建昌县| 天门市|