螢幕後處理

2021-08-02 09:14:29 字數 1368 閱讀 7396

void onrenderimage(rendertexture src, rendertexture dest){}//螢幕後處理函式

graphics.blit (src, dest,mat,pass);//螢幕後處理 src當前螢幕紋理

graphics.drawmesh(amesh, vector3.zero, quaternion.identity, amaterial, 0);//給定材質繪製網格模型 只能在update裡邊呼叫生效。

graphics.drawmeshnow(amesh, vector3.zero, quaternion.identity);//在相機上,用上一次(最近一次)處理的材質進行繪製,一般前邊加mat.setpass(1);只用該pass進行渲染。

mat.setpass(0);//給當前渲染幀設定shader渲染,為渲染啟用給定的pass 設定後如果blit沒有使用材質也會使用該pass,blit and drawmeshnow.

graphics.setrendertarget(rtex)//設定當前的渲染紋理,如果設定該項後,drawmeshnow再繪製的影象將儲存在該紋理中,然後blit到dst就可以單獨渲染顯示了。這是渲染總的圖形目標不同於相機視角的渲染目標。

rendertexture rt=new rendertexture(...)

camera.clearflags=cameraflags.solidcolor;

camera.settargetbuffers(rt.colorbuffer,rt.depthbuffer)//設定當前相機的渲染目標rendertarget//和camera.targettexture類似。

camera.renderwithshader(shader,"rendertype")//找物體shader有"rendertype"字段 和shader有"rendertype"字段相等的shader的subshader進行替換渲染。每幀呼叫才會生效。也可以自定義如"tag"="mainchar"

繪製到rt後再和其他相機rt混合然後blit輸出,在該功能下的相機深度和顏色都是新的只滿足條件的物體的。如果在場景中,多個camera需要把深度和顏色存起來,然後設進去。

camera.setreplacementshader(shader,tag)//呼叫這個函式之後,相機將使用替換的shader來渲染它的檢視,一直替換渲染。當replacementtag為空時會替換視口中所有物體的shader。

camera.resetreplacementshader()//從相機上移除shader替換。

ds渲染流程:shader寫好後在colorbuff.cg裡邊運算和輸出,螢幕後處理會根據平台和設定使用替換的shader如mrt.shader去渲染,然後mrt.cg去輸出顏色。

螢幕後處理 邊緣檢測

如上圖所示,使用卷積核,計算螢幕影象每個點的畫素和當前點周圍的畫素,進行卷積操作,可以得到梯度值。主要演算法如下 for int it 0 it 9 it half edge 1 abs edgex abs edgey 計算最後的梯度值 如果當前畫素左右色差大,說明處於邊緣的位置,根據上面演算法得到...

螢幕後處理 運動模糊(通過畫素速度)

在相機上掛指令碼,獲得引數 模糊程度 前乙個視角投影矩陣 當前視角投影矩陣的逆矩陣,傳遞給到shader中 shader中,先對深度紋理取樣,得到深度值。再通過之前傳遞的矩陣,得到世界空間中,當前幀改點所在位置與前一幀改點所在位置。再根據這兩個點,求得速度值 也就是上一步求得的兩個點的中心點 使用傳...

第十一章 螢幕後處理效果(4)

bloom特效是遊戲中常見的一種螢幕效果。這種特效可以模擬真實攝像機的一種影象效果,它讓畫面中較量的區域 擴散 到周圍的區域中,造成一種朦朧的效果。下圖給出了動畫短片 大象之夢 英文名 elephants dream 中的乙個bloom效果。本節將會實現乙個基本的bloom特效,在學習完本節後,我們...