久久久精品一区ed2k-女人被男人叉到高潮的视频-中文字幕乱码一区久久麻豆樱花-俄罗斯熟妇真实视频

使用shader怎么實(shí)現(xiàn)屏幕高斯模糊

今天就跟大家聊聊有關(guān)使用shader怎么實(shí)現(xiàn)屏幕高斯模糊,可能很多人都不太了解,為了讓大家更加了解,小編給大家總結(jié)了以下內(nèi)容,希望大家根據(jù)這篇文章可以有所收獲。

秦都ssl適用于網(wǎng)站、小程序/APP、API接口等需要進(jìn)行數(shù)據(jù)傳輸應(yīng)用場景,ssl證書未來市場廣闊!成為創(chuàng)新互聯(lián)的ssl證書銷售渠道,可以享受市場價(jià)格4-6折優(yōu)惠!如果有意向歡迎電話聯(lián)系或者加微信:028-86922220(備注:SSL證書合作)期待與您的合作!

1.新建一個(gè)C#腳本,改腳本必須掛在攝像機(jī)上

using UnityEngine;
using System.Collections;
/// <summary>
/// 高期模糊
/// </summary>
public class GaussianBlur : PostEffectsBase {
 
	//調(diào)整高斯模糊迭代次數(shù)
	[Range(0, 4)]
	public int iterations = 3;
	//模糊范圍
	[Range(0.2f, 3.0f)]
	public float blurSpread = 0.6f;
	//縮放系數(shù)
	//downSample越大,需要處理的像素越少,同時(shí)也能進(jìn)一步提高模糊程序,
	//但過大的downSample可能會使圖像像素化。
	[Range(1, 8)]
	public int downSample = 2;
 
	public Shader gaussianBlurShader;
	private Material gaussianBlurMaterial = null;
 
	public Material material {
		get {
			gaussianBlurMaterial = CheckShaderAndCreateMaterial(gaussianBlurShader, gaussianBlurMaterial);
			return gaussianBlurMaterial;
		}
	}
 
	void OnRenderImage(RenderTexture src, RenderTexture dest) {
		if (material != null) {
			//利用縮放對圖像進(jìn)行降采樣,從而減少需要處理的像素個(gè)數(shù),提高性能。
			int rtW = src.width / downSample;
			int rtH = src.height / downSample;
 
			//分配一塊緩沖區(qū),這是因?yàn)?,高斯模糊需要調(diào)用兩個(gè)Pass,我們需要使用一塊中間緩存來
			//存儲第一個(gè)Pass執(zhí)行完畢后得到的模糊結(jié)果。
			RenderTexture buffer0 = RenderTexture.GetTemporary(rtW, rtH, 0);
			//將該臨時(shí)渲染紋理的濾波模式設(shè)置為雙線性。這樣,在調(diào)用第一個(gè)Pass時(shí),我們需要處理的
			//像素個(gè)數(shù)就是原來的幾分之一。對圖像進(jìn)行降采樣不僅可以減少需要處理的像素個(gè)數(shù),提高性能,
			//而且適當(dāng)?shù)慕挡赏€可以得到更好的模糊效果。
			buffer0.filterMode = FilterMode.Bilinear;
 
			Graphics.Blit(src, buffer0);
 
			//高斯模糊迭代次數(shù)
			for(int i=0; i<iterations; i++){
				material.SetFloat("_BlurSize", 1.0f + i * blurSpread);
 
				RenderTexture buffer1 = RenderTexture.GetTemporary(rtW, rtH, 0);
 
				//執(zhí)行第一個(gè)Pass
				Graphics.Blit(buffer0, buffer1, material, 0);
 
				RenderTexture.ReleaseTemporary(buffer0);
				buffer0 = buffer1;
				buffer1 = RenderTexture.GetTemporary(rtW, rtH, 0);
 
				//執(zhí)行第二個(gè)Pass
				Graphics.Blit(buffer0, buffer1, material, 1);
 
				RenderTexture.ReleaseTemporary(buffer0);
				buffer0 = buffer1;
			}
 
			Graphics.Blit(buffer0, dest);
			//釋放臨時(shí)緩存
			RenderTexture.ReleaseTemporary(buffer0);
 
		} else {
			Graphics.Blit(src, dest);
		}
	}
}

2.新建一個(gè)頂點(diǎn)著色器的shader,實(shí)現(xiàn)高斯模糊的shader代碼如下:

using UnityEngine;
using System.Collections;
/// <summary>
/// 高期模糊
/// </summary>
public class GaussianBlur : PostEffectsBase {
 
	//調(diào)整高斯模糊迭代次數(shù)
	[Range(0, 4)]
	public int iterations = 3;
	//模糊范圍
	[Range(0.2f, 3.0f)]
	public float blurSpread = 0.6f;
	//縮放系數(shù)
	//downSample越大,需要處理的像素越少,同時(shí)也能進(jìn)一步提高模糊程序,
	//但過大的downSample可能會使圖像像素化。
	[Range(1, 8)]
	public int downSample = 2;
 
	public Shader gaussianBlurShader;
	private Material gaussianBlurMaterial = null;
 
	public Material material {
		get {
			gaussianBlurMaterial = CheckShaderAndCreateMaterial(gaussianBlurShader, gaussianBlurMaterial);
			return gaussianBlurMaterial;
		}
	}
 
	void OnRenderImage(RenderTexture src, RenderTexture dest) {
		if (material != null) {
			//利用縮放對圖像進(jìn)行降采樣,從而減少需要處理的像素個(gè)數(shù),提高性能。
			int rtW = src.width / downSample;
			int rtH = src.height / downSample;
 
			//分配一塊緩沖區(qū),這是因?yàn)椋咚鼓:枰{(diào)用兩個(gè)Pass,我們需要使用一塊中間緩存來
			//存儲第一個(gè)Pass執(zhí)行完畢后得到的模糊結(jié)果。
			RenderTexture buffer0 = RenderTexture.GetTemporary(rtW, rtH, 0);
			//將該臨時(shí)渲染紋理的濾波模式設(shè)置為雙線性。這樣,在調(diào)用第一個(gè)Pass時(shí),我們需要處理的
			//像素個(gè)數(shù)就是原來的幾分之一。對圖像進(jìn)行降采樣不僅可以減少需要處理的像素個(gè)數(shù),提高性能,
			//而且適當(dāng)?shù)慕挡赏€可以得到更好的模糊效果。
			buffer0.filterMode = FilterMode.Bilinear;
 
			Graphics.Blit(src, buffer0);
 
			//高斯模糊迭代次數(shù)
			for(int i=0; i<iterations; i++){
				material.SetFloat("_BlurSize", 1.0f + i * blurSpread);
 
				RenderTexture buffer1 = RenderTexture.GetTemporary(rtW, rtH, 0);
 
				//執(zhí)行第一個(gè)Pass
				Graphics.Blit(buffer0, buffer1, material, 0);
 
				RenderTexture.ReleaseTemporary(buffer0);
				buffer0 = buffer1;
				buffer1 = RenderTexture.GetTemporary(rtW, rtH, 0);
 
				//執(zhí)行第二個(gè)Pass
				Graphics.Blit(buffer0, buffer1, material, 1);
 
				RenderTexture.ReleaseTemporary(buffer0);
				buffer0 = buffer1;
			}
 
			Graphics.Blit(buffer0, dest);
			//釋放臨時(shí)緩存
			RenderTexture.ReleaseTemporary(buffer0);
 
		} else {
			Graphics.Blit(src, dest);
		}
	}
}

看完上述內(nèi)容,你們對使用shader怎么實(shí)現(xiàn)屏幕高斯模糊有進(jìn)一步的了解嗎?如果還想了解更多知識或者相關(guān)內(nèi)容,請關(guān)注創(chuàng)新互聯(lián)行業(yè)資訊頻道,感謝大家的支持。

分享名稱:使用shader怎么實(shí)現(xiàn)屏幕高斯模糊
分享網(wǎng)址:http://sd-ha.com/article48/iedhep.html

成都網(wǎng)站建設(shè)公司_創(chuàng)新互聯(lián),為您提供網(wǎng)站建設(shè)、小程序開發(fā)建站公司、網(wǎng)站策劃品牌網(wǎng)站設(shè)計(jì)、關(guān)鍵詞優(yōu)化

廣告

聲明:本網(wǎng)站發(fā)布的內(nèi)容(圖片、視頻和文字)以用戶投稿、用戶轉(zhuǎn)載內(nèi)容為主,如果涉及侵權(quán)請盡快告知,我們將會在第一時(shí)間刪除。文章觀點(diǎn)不代表本網(wǎng)站立場,如需處理請聯(lián)系客服。電話:028-86922220;郵箱:631063699@qq.com。內(nèi)容未經(jīng)允許不得轉(zhuǎn)載,或轉(zhuǎn)載時(shí)需注明來源: 創(chuàng)新互聯(lián)

成都定制網(wǎng)站建設(shè)