(八)Grahpics之Blit


1.前言

Graphics的Blit方法是比較簡單也是比較常用的方法。最簡單的作用是將一張紋理繪制到另一張紋理中。而在此方法中可以指定一種材質來實現特殊的效果,所以常和OnRenderImage方法配合使用來實現屏幕后處理效果。

2.OnRenderImage簡介

void OnRenderImage(RenderTexture src, RenderTexture dest)方法是unity中渲染流程的最后階段,如果不調用此方法則渲染的圖像直接顯示到屏幕上(不考慮buffer問題),如果調用則src為獲取到的渲染圖像,dest則為繪制的目標紋理。調用此方法的腳本需要掛載在含有camera組建的腳本上。

3.應用示例

3.1 最簡單應用

下述方法為將camera渲染結果直接繪制到屏幕上,不做任何處理,當然如果這樣調用也就沒有調用此方法的意義了。

    void OnRenderImage(RenderTexture src, RenderTexture dest) { Graphics.Blit(src, dest); } 

3.2 最基本應用

一般應用如下所示,設置某一材質,然后通過材質對src紋理進行處理,並繪制到dest上,但是material要包含_MainTex變量,因為unity會默認將src紋理賦值給_MainTex。

    material.SetFloat("_Brightness", brightness); void OnRenderImage(RenderTexture src, RenderTexture dest) { Graphics.Blit(src, dest, material); }

3.3 完整范例

public class GaussianBlur : PostEffectsBase { public Shader matShader; private Material mat; public Material material { get { if(mat==null) { mat=new Material(matShader)} return mat; } } [Range(0, 4)] public int iterations = 3; void OnRenderImage (RenderTexture src, RenderTexture dest) { if (material != null) { int rtW = src.width int rtH = src.height RenderTexture buffer0 = RenderTexture.GetTemporary(rtW, rtH, 0); buffer0.filterMode = FilterMode.Bilinear; Graphics.Blit(src, buffer0); for (int i = 0; i < iterations; i++) { RenderTexture buffer1 = RenderTexture.GetTemporary(rtW, rtH, 0); Graphics.Blit(buffer0, buffer1, material, 0); RenderTexture.ReleaseTemporary(buffer0); buffer0 = buffer1; buffer1 = RenderTexture.GetTemporary(rtW, rtH, 0); // Render the horizontal pass Graphics.Blit(buffer0, buffer1, material, 1); RenderTexture.ReleaseTemporary(buffer0); buffer0 = buffer1; } Graphics.Blit(buffer0, dest); RenderTexture.ReleaseTemporary(buffer0); } else { Graphics.Blit(src, dest); } } } 

4.結語

此方法應用就是如此簡單。


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM