您的位置:首頁 > 動漫 >

當前熱議!MME編寫入門(六)后處理模板

生成后處理用的效果文件的情況下,一定要在效果文件中聲明以下變量。創(chuàng)建后期效果時,必須始終包含以下內容:

這聲明了此效果文件是后期效果,沒有它,您將無法使用 ScriptExternal 命令

為了處理后期效果,有必要準備一個特殊的紋理,該紋理將成為繪圖的輸出目標(渲染目標)。


(資料圖片僅供參考)

帶有“RENDERCOLORTARGET”的紋理參數(shù)是一種可以記錄繪制結果顏色信息的紋理。 此外,帶有“RENDERDEPTHSTENCILTARGET”的紋理參數(shù)被指定為深度緩沖區(qū)(Z緩沖區(qū))。

上所述設置時,每個紋理都以與屏幕相同的大小生成。?

采樣器

渲染的目標屏幕的尺寸。類型是float2,單位是像素。此值為MMD的預覽窗口大小或者離屏渲染的屏幕大小。即使通過Scripts的RenderColorTarget命令變更了渲染目標,此值也不會改變。此語義可以使用以下值:VIEWPORTPIXELSIZE

為什么添加了ViewportOffset

主要是處理紋理坐標偏移的情況。

紋理坐標 Tex 指向屏幕左上點 (0,0) 處和屏幕右下點 (1,1)。?

頂點著色器中,視口偏移量被添加到 Tex,但如果將輸入 Tex 值按原樣傳遞給像素著色器并用作輸入紋理的坐標,則會出現(xiàn)以下問題。

當光柵器將頂點信息擴展為像素時,像素的頂點信息是該像素左上點的信息。 例如,如果您考慮屏幕上的左上角像素,如果未添加視口偏移,則 Tex 的值將為 (0,0)。?

這指向表示此像素的 1x1 矩形的左上點,而不是像素的中心。?

為了獲得紋理每個像素的確切顏色,我們需要為 tex2D() 函數(shù)提供一個指向像素矩形中心的坐標。 根據(jù)采樣器設置,如果紋理坐標不指向一個像素的中心,而是指向像素之間邊界的坐標,則生成的像素顏色將是兩個像素顏色的平均值。

為了避免這種情況,我們正在執(zhí)行在頂點著色器中向 Tex 添加視口偏移的操作。 這會將紋理坐標的高度和寬度分別移動 0.5 個像素,并且像素著色器中的 Tex 值指向像素的中心坐標。

以上解釋頂點著色器中添加的移動。

頂點著色器

像素著色器

在像素著色器中實現(xiàn)后期效果主體的處理。

比如實現(xiàn)灰度。常用的灰度算法 gray=(r+b+g)/3

比如實現(xiàn)對比度。

繪制部分

前邊是Script部分

后處理效果,technique的Script通常會執(zhí)行以下步驟:

1、使用準備好的紋理更改渲染目標

2、變更或清除渲染目標自身的紋理。

執(zhí)行初始化操作(使用清除顏色或清除深度)??梢允褂靡韵旅睿?/p>

Clear=Color/Depth

3、針對當前呈現(xiàn)目標繪制其他對象

4、將呈現(xiàn)目標返回到屏幕

指定要使用的深度緩沖(Z緩沖)。

RenderDepthStencilTarget=(紋理名或空白)

通常和RenderColorTarget0一起使用。參數(shù)為通過RENDERDEPTHSTENCILTARGET語義聲明了的變量名。需要重置為默認深度緩沖時,參數(shù)應為空白。

5、繪制緩沖區(qū)

后期效果主體是通過創(chuàng)建一個著色器來處理的,該著色器繪制大小與屏幕匹配的矩形多邊形。 為此需要添加pass,pass部分

寫后處理難度基本都在算法上了。這個模板,大概可能基本上是這樣的。寫一個簡單的調色器還是可以的,還有多的就是需要添加采樣器。

再往后的mme編寫就直接放代碼、注解、參考網(wǎng)址了。沒有那么啰嗦的了。

舞力介入P的后處理介紹,原文中還包括了一個模糊和柔光算法的例子

https://codezine.jp/article/detail/6298

標簽:

相關閱讀