當(dāng)前熱議!MME編寫入門(六)后處理模板
生成后處理用的效果文件的情況下,一定要在效果文件中聲明以下變量。創(chuàng)建后期效果時(shí),必須始終包含以下內(nèi)容:
這聲明了此效果文件是后期效果,沒有它,您將無法使用 ScriptExternal 命令
為了處理后期效果,有必要準(zhǔn)備一個(gè)特殊的紋理,該紋理將成為繪圖的輸出目標(biāo)(渲染目標(biāo))。
(資料圖片僅供參考)
帶有“RENDERCOLORTARGET”的紋理參數(shù)是一種可以記錄繪制結(jié)果顏色信息的紋理。 此外,帶有“RENDERDEPTHSTENCILTARGET”的紋理參數(shù)被指定為深度緩沖區(qū)(Z緩沖區(qū))。
上所述設(shè)置時(shí),每個(gè)紋理都以與屏幕相同的大小生成。?
采樣器
渲染的目標(biāo)屏幕的尺寸。類型是float2,單位是像素。此值為MMD的預(yù)覽窗口大小或者離屏渲染的屏幕大小。即使通過Scripts的RenderColorTarget命令變更了渲染目標(biāo),此值也不會(huì)改變。此語義可以使用以下值:VIEWPORTPIXELSIZE
為什么添加了ViewportOffset
主要是處理紋理坐標(biāo)偏移的情況。
紋理坐標(biāo) Tex 指向屏幕左上點(diǎn) (0,0) 處和屏幕右下點(diǎn) (1,1)。?
頂點(diǎn)著色器中,視口偏移量被添加到 Tex,但如果將輸入 Tex 值按原樣傳遞給像素著色器并用作輸入紋理的坐標(biāo),則會(huì)出現(xiàn)以下問題。
當(dāng)光柵器將頂點(diǎn)信息擴(kuò)展為像素時(shí),像素的頂點(diǎn)信息是該像素左上點(diǎn)的信息。 例如,如果您考慮屏幕上的左上角像素,如果未添加視口偏移,則 Tex 的值將為 (0,0)。?
這指向表示此像素的 1x1 矩形的左上點(diǎn),而不是像素的中心。?
為了獲得紋理每個(gè)像素的確切顏色,我們需要為 tex2D() 函數(shù)提供一個(gè)指向像素矩形中心的坐標(biāo)。 根據(jù)采樣器設(shè)置,如果紋理坐標(biāo)不指向一個(gè)像素的中心,而是指向像素之間邊界的坐標(biāo),則生成的像素顏色將是兩個(gè)像素顏色的平均值。
為了避免這種情況,我們正在執(zhí)行在頂點(diǎn)著色器中向 Tex 添加視口偏移的操作。 這會(huì)將紋理坐標(biāo)的高度和寬度分別移動(dòng) 0.5 個(gè)像素,并且像素著色器中的 Tex 值指向像素的中心坐標(biāo)。
以上解釋頂點(diǎn)著色器中添加的移動(dòng)。
頂點(diǎn)著色器
像素著色器
在像素著色器中實(shí)現(xiàn)后期效果主體的處理。
比如實(shí)現(xiàn)灰度。常用的灰度算法 gray=(r+b+g)/3
比如實(shí)現(xiàn)對(duì)比度。
繪制部分
前邊是Script部分
后處理效果,technique的Script通常會(huì)執(zhí)行以下步驟:
1、使用準(zhǔn)備好的紋理更改渲染目標(biāo)
2、變更或清除渲染目標(biāo)自身的紋理。
執(zhí)行初始化操作(使用清除顏色或清除深度)??梢允褂靡韵旅睿?/p>
Clear=Color/Depth
3、針對(duì)當(dāng)前呈現(xiàn)目標(biāo)繪制其他對(duì)象
4、將呈現(xiàn)目標(biāo)返回到屏幕
指定要使用的深度緩沖(Z緩沖)。
RenderDepthStencilTarget=(紋理名或空白)
通常和RenderColorTarget0一起使用。參數(shù)為通過RENDERDEPTHSTENCILTARGET語義聲明了的變量名。需要重置為默認(rèn)深度緩沖時(shí),參數(shù)應(yīng)為空白。
5、繪制緩沖區(qū)
后期效果主體是通過創(chuàng)建一個(gè)著色器來處理的,該著色器繪制大小與屏幕匹配的矩形多邊形。 為此需要添加pass,pass部分
寫后處理難度基本都在算法上了。這個(gè)模板,大概可能基本上是這樣的。寫一個(gè)簡(jiǎn)單的調(diào)色器還是可以的,還有多的就是需要添加采樣器。
再往后的mme編寫就直接放代碼、注解、參考網(wǎng)址了。沒有那么啰嗦的了。
舞力介入P的后處理介紹,原文中還包括了一個(gè)模糊和柔光算法的例子
https://codezine.jp/article/detail/6298
標(biāo)簽: