溫馨提示×

溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊×
其他方式登錄
點(diǎn)擊 登錄注冊 即表示同意《億速云用戶服務(wù)條款》

[Unity 3D]攝像機(jī)Clear Flags和Culling Mask屬性用途詳解

發(fā)布時(shí)間:2020-07-11 14:51:08 來源:網(wǎng)絡(luò) 閱讀:1389 作者:蓬萊仙羽 欄目:開發(fā)技術(shù)

1.簡述兩個(gè)屬性

1.1 Clear Flags 清除標(biāo)記

       每個(gè)相機(jī)在渲染時(shí)會(huì)存儲(chǔ)顏色和深度信息。屏幕的未繪制部分是空的,默認(rèn)情況下會(huì)顯示天空盒。當(dāng)你使用多個(gè)相機(jī)時(shí),每一個(gè)都將自己的顏色和深度信息存儲(chǔ)在緩沖區(qū)中,還將積累大量的每個(gè)相機(jī)的渲染數(shù)據(jù)。當(dāng)場景中的任何特定相機(jī)進(jìn)行渲染時(shí),你可以設(shè)定清除標(biāo)記以清除緩沖區(qū)信息的不同集合??梢酝ㄟ^下面四個(gè)選項(xiàng)之一來完成:

1.Skybox 天空盒

     這是默認(rèn)設(shè)置。在屏幕上空的部分將顯示當(dāng)前相機(jī)的天空盒。如果當(dāng)前相機(jī)沒有設(shè)置天空盒,它會(huì)默認(rèn)使用渲染設(shè)置(在Edit->Render Settings里)中選擇的天空盒。然后它將退回使用背景顏色。另外天空盒組件可以添加到相機(jī)上。如果你想創(chuàng)建一個(gè)新的天空盒,您可以使用本指南。

2.Solid Color 純色

     屏幕上的任何空的部分將顯示當(dāng)前相機(jī)的背景顏色。

3.Depth Only 僅深度

     如果你想繪制一個(gè)玩家的槍而不讓它在環(huán)境內(nèi)部得到裁剪,你要設(shè)置一個(gè)深度為0的相機(jī)來繪制環(huán)境,還要另一個(gè)深度為1的相機(jī)單獨(dú)繪制武器。該武器相機(jī)的清除標(biāo)記應(yīng)設(shè)置為僅深度。這將保持環(huán)境的圖形顯示在屏幕上,但會(huì)丟棄所有關(guān)于每個(gè)對象在三維空間中的位置的信息。當(dāng)槍被繪制出來,不透明的部分將完全覆蓋任何已繪制的事物,而不管槍到墻之間如何接近。(這部分看起來很費(fèi)勁)

4.Don't Clear 不清除

該模式不清除任何顏色或深度緩存。其結(jié)果是,每幀繪制在下一幀之上,造成涂片效果。這不是用于游戲的典型方式,最好是與自定義著色器一起使用。

1.2 Culling Mask 剔除遮罩

剔除遮罩使用層有選擇地渲染一組對象。有關(guān)使用層的信息可以在這里找到。

通常好的做法,是把用戶界面放到不同的層,然后用一個(gè)獨(dú)立相機(jī)單獨(dú)渲染UI層。

為了使UI顯示在其他相機(jī)視角的頂部,你還需要設(shè)置清除標(biāo)記為Depth only,并確保UI相機(jī)的深度比其他相機(jī)高。

 

2.下面將通過幾步演示來展示攝像機(jī)該兩個(gè)屬性

一:

         首先在Unity場景中創(chuàng)建兩個(gè)攝像機(jī),分別命名為camera1camera2;

         再在場景中創(chuàng)建一個(gè)cube和Sphere作為攝像機(jī)的拍攝物體;并讓兩攝像機(jī)都能夠拍攝到兩個(gè)物體。


         接著設(shè)置camera1的Depth為0,camera2的Depth為1;

         你會(huì)發(fā)現(xiàn)Game窗口將只顯示camera2拍攝到的畫面;

         可見攝像機(jī)Depth屬性設(shè)置相機(jī)繪圖順序,具有較大值的相機(jī)將被繪制在具有較小值的相機(jī)的上面,換言之,一個(gè)深度為1的相機(jī)將繪制在一個(gè)深度為0的相機(jī)之上。

二:

Clear Falgs默認(rèn)Skybox;

         將camera2的Clear Falgs設(shè)置為Depth Only;


此時(shí)你可以看到Game窗口將顯示camera1camera2同時(shí)拍攝到的畫面


      由此可見,要想將多個(gè)相機(jī)拍攝的畫面渲染到同一個(gè)畫面是很簡單的事情,只需要將它們的Clear Falgs設(shè)置為Depth Only;但是有一個(gè)條件是,它們的Depth都需要比Clear Falgs為Skybox或Solid Color的攝像機(jī)的Depth高,這樣才可以將多個(gè)相機(jī)單獨(dú)拍攝的畫面疊加于同一個(gè)畫面上。

三:

         現(xiàn)在的問題是,兩個(gè)攝像機(jī)拍攝的物體是一樣的,我該如何讓camera1只拍攝場景背景,而camera2只拍攝制定的物體;

         在場景中創(chuàng)建一個(gè)plane,并設(shè)置材質(zhì),充滿camera1畫面,當(dāng)做場景背景。


接下來,我們要為物體設(shè)置層關(guān)系。Unity的Layer的概念可以類比PS里面的圖層。

      首先,添加一個(gè)層(Layer),如下圖所示,并命名為object;


      其次,給物體設(shè)置層;如圖將sphere物體的層設(shè)為object層;同樣cube的層也設(shè)置為object層。


最后你將設(shè)置兩個(gè)攝像機(jī)的culling mask 屬性,以使攝像機(jī)渲染指定層物體。

         攝像機(jī)的cullingmask默認(rèn)為Everything,表明渲染所有層的物體。


Camera1:將culling mask里面的object層勾去掉,culling mask將顯示為Mixed… ;你將發(fā)現(xiàn)Camera1的窗口將只顯示背景圖片,物體沒有被渲染。


Camera2:在culling mask選項(xiàng)里面先勾選Nothing,再勾選object層,表明該攝像機(jī)只渲染屬于object的東西,將不會(huì)拍攝到別的圖層。


最后,在Game窗口看到兩個(gè)攝像機(jī)疊加的畫面;


四:

         至此,我們明白了攝像機(jī)的Depth、Clear Falgs和Culling Mask的強(qiáng)大作用。

         同樣的,如果是制作游戲,你可以創(chuàng)建一個(gè)界面攝像機(jī),單獨(dú)渲染界面,而別的攝像機(jī)將渲染場景。你只需要添加UI圖層,將所有的界面物體的Layer設(shè)置為UI,UI攝像機(jī)的Culling Mask也只勾選UI層。

上面的Game窗口視圖,為三個(gè)攝像機(jī)拍攝的畫面疊加而成。

向AI問一下細(xì)節(jié)

免責(zé)聲明:本站發(fā)布的內(nèi)容(圖片、視頻和文字)以原創(chuàng)、轉(zhuǎn)載和分享為主,文章觀點(diǎn)不代表本網(wǎng)站立場,如果涉及侵權(quán)請聯(lián)系站長郵箱:is@yisu.com進(jìn)行舉報(bào),并提供相關(guān)證據(jù),一經(jīng)查實(shí),將立刻刪除涉嫌侵權(quán)內(nèi)容。

AI