unity?

Tags: 效果, 照明,

shader遮罩利用alhpa通道改變紋理的區域透明度,添加多層貼圖就可以實現紋理多個區域不同的透明情況。

結果如下圖所示:

我們說一下如何實現,當然看這篇之前最好先看看這篇:

unity用shader遮罩模擬黑夜火把照明效果

/shuma/1859561sbl.html

工具/原料

一臺電腦

unity4.0

unity用shader遮罩模擬黑夜火把照明效果/shuma/1859561sbl.html

方法/步驟

首先在場景中放幾個火盆,隨便你想放幾個。當然這裡放幾個,後面shader裡就需要幾張遮罩貼圖。這裡我們放倆個火盆。

unity 添加多個shader遮罩

我們在shader中添加三張貼圖來做遮罩,豬腳一張、火盆三張,分別為

_Mask ("Mask", 2D) = "white" {}

_Mask0 ("Mask0", 2D) = "white" {}

_Mask1 ("Mask1", 2D) = "white" {}

在紋理混合中進行如下設置:

SetTexture [_Mask] {combine texture}

SetTexture [_MainTex] {combine texture,texture-previous}

SetTexture [_Mask0] {combine previous,previous-texture}

SetTexture [_Mask1] {combine previous,previous-texture}

SetTexture 的原理在

unity用shader遮罩模擬黑夜火把照明效果

中有說過,這裡就不詳細說了

總之就是將上一步計算的的alpha通道值減去這張貼圖的alpha通道值就是了。

unity 添加多個shader遮罩

保存一下,回到我們的主界面,將我們的遮罩貼圖拖到三個子貼圖中,

但是這樣場景中只看到了一個光圈。

unity 添加多個shader遮罩

我們把他的offset都偏移一下,這樣三個就齊了。

將光圈對準火盆與光圈跟隨豬腳移動原理一樣。

下一步讓光圈移到火盆處。

unity 添加多個shader遮罩

unity 添加多個shader遮罩

我們打開腳本,

腳本中添加:

public GameObject fire;

public GameObject fire0;

然後按照獲得倆火盆的位置:

float firex = fire.transform.position.x;

float firey = fire.transform.position.y;

float fire0x = fire0.transform.position.x;

float fire0y = fire0.transform.position.y;

然後就是根據火盆的位置獲得遮罩的偏移量:

float offsetfirex=-firex/(Le*2f);

float offsetfirey=-firey/(Wi*2f);

float offsetfire0x=-fire0x/(Le*2f);

float offsetfire0y=-fire0y/(Wi*2f);

最後是改變遮罩的位置:

renderer.material.SetTextureOffset ("_Mask0", new Vector2 (offsetfirex,offsetfirey));

renderer.material.SetTextureOffset ("_Mask1", new Vector2 (offsetfire0x,offsetfire0y));

OK,回到場景運行,測試一下效果不錯:

unity 添加多個shader遮罩

我們最後讓火盆的光圈也能和豬腳一樣忽大忽小:

我們在如圖所示腳本位置添加:

renderer.material.SetTexture("_Mask0",mask[i]);

renderer.material.SetTexture("_Mask1",mask[i]);

具體腳本如下:

f(Time.time>b){

b=b+c;

if(i

i++;

}else

{

i=0;

}

renderer.material.SetTexture("_Mask",mask[i]);

renderer.material.SetTexture("_Mask0",mask[i]);

renderer.material.SetTexture("_Mask1",mask[i]);

}

原理就是循環一組大小不同的的光圈圖片作為遮罩的貼圖,具體在

unity 貼圖動畫實現照明忽大忽小

/shuma/1859864cnu.html

裡面說過,就不詳細說了。

最終腳本如下圖:

unity 添加多個shader遮罩

unity 添加多個shader遮罩

OK,最終效果如下圖,很不錯吧!

unity 添加多個shader遮罩

相關問題答案