作者:鄭洪智
在通用渲染管線(URP)中,相機(jī)有堆棧相機(jī)、渲染到同一渲染目標(biāo)、渲染為RenderTexture(渲染紋理)三種工作方式。
在通用渲染管線(URP)中,相機(jī)有以下工作方式:
堆棧相機(jī)(Stack Cameras)可以將多個(gè)相機(jī)的輸出合并為單個(gè)輸出。通過相機(jī)堆棧,你可以在2D UI中加入3D模型,或者創(chuàng)建車輛駕駛艙的效果。
將多個(gè)基礎(chǔ)相機(jī)或相機(jī)堆棧渲染到同一渲染目標(biāo)。這使你可以創(chuàng)建例如分屏渲染效果。
將基礎(chǔ)相機(jī)或相機(jī)堆棧渲染為RenderTexture(渲染紋理)。通過渲染到RenderTexture,可以創(chuàng)建例如CCTV監(jiān)視器之類的效果。
URP中的相機(jī)堆棧
你可以結(jié)合使用這些工作方式來獲得更復(fù)雜的效果。例如,你可以定義兩個(gè)相機(jī)堆棧,然后將每個(gè)相機(jī)堆棧設(shè)置為渲染到同一渲染目標(biāo)的不同區(qū)域。
相機(jī)堆棧
相機(jī)堆棧由基礎(chǔ)相機(jī)和一個(gè)或多個(gè)疊加相機(jī)組成。相機(jī)堆棧使用堆棧中所有相機(jī)的組合輸出疊加基礎(chǔ)相機(jī)的輸出。這樣,你可以對(duì)基礎(chǔ)相機(jī)的輸出進(jìn)行任何處理,也可以對(duì)相機(jī)堆棧的輸出進(jìn)行處理。例如,你可以將相機(jī)堆棧渲染到給定的渲染目標(biāo)、應(yīng)用后處理效果等等。
URP在Camera中執(zhí)行了多項(xiàng)優(yōu)化,包括渲染順序優(yōu)化以減少overdraw。但是,使用相機(jī)堆棧時(shí),你在手動(dòng)定義渲染這些相機(jī)的順序。因此,你必須小心對(duì)相機(jī)進(jìn)行排序,不要導(dǎo)致過度overdraw。有關(guān)URP中overdraw的信息,后面開一節(jié)專門講。
01 將相機(jī)添加到相機(jī)堆棧
將相機(jī)添加到相機(jī)堆棧
在場(chǎng)景中創(chuàng)建相機(jī)。它的Render Type默認(rèn)為Base,使其成為基礎(chǔ)相機(jī)。
在場(chǎng)景中創(chuàng)建另一個(gè)相機(jī),然后選中。
在相機(jī)Inspector中,將相機(jī)的渲染類型RenderType更改為Overlay。
再次選擇基礎(chǔ)相機(jī)。在相機(jī)Inspector中,滾動(dòng)到Stack部分,單擊加號(hào)(+)按鈕,然后單擊疊加相機(jī)的名稱。
疊加相機(jī)現(xiàn)在是基礎(chǔ)相機(jī)的相機(jī)堆棧的一部分。Unity在基礎(chǔ)相機(jī)的輸出之上渲染疊加相機(jī)的輸出。
你可以通過直接操縱cameraStack基礎(chǔ)相機(jī)的UniversalAdditionalCameraData組件的屬性,將腳本中的相機(jī)添加到相機(jī)堆棧中,如下所示:
var cameraData = camera.GetUniversalAdditionalCameraData(); cameraData.cameraStack.Add(myOverlayCamera);
02 從相機(jī)堆棧中移除相機(jī)
從相機(jī)堆棧中移除相機(jī)
創(chuàng)建一個(gè)至少包含一個(gè)疊加相機(jī)的相機(jī)堆棧。
選擇相機(jī)堆棧的基礎(chǔ)相機(jī)。
在相機(jī)Inspector中,滾動(dòng)到Stack部分,單擊要?jiǎng)h除的疊加相機(jī)的名稱,然后單擊減號(hào)(-)按鈕。
疊加相機(jī)保留在場(chǎng)景中,但不再是相機(jī)堆棧的一部分。
你可以通過直接操縱cameraStack基礎(chǔ)相機(jī)的UniversalAdditionalCameraData組件的屬性,從腳本中的相機(jī)堆棧中刪除相機(jī),如下所示:
var cameraData = camera.GetUniversalAdditionalCameraData(); cameraData.cameraStack.Remove(myOverlayCamera);
03 更改相機(jī)堆棧中相機(jī)的順序
從相機(jī)堆棧中移除相機(jī)
創(chuàng)建一個(gè)包含多個(gè)疊加相機(jī)的相機(jī)堆棧。
在相機(jī)堆棧中選擇基礎(chǔ)相機(jī)。
在相機(jī)Inspector中,滾動(dòng)到“堆?!辈糠帧?/p>
使用疊加相機(jī)名稱旁邊的手柄重新排列疊加相機(jī)列表。
基礎(chǔ)相機(jī)會(huì)渲染相機(jī)堆棧的基礎(chǔ)層,堆棧中的疊加相機(jī)會(huì)按照從上到下的列出順序在其頂部進(jìn)行渲染。
你可以通過直接操縱cameraStack基礎(chǔ)相機(jī)的UniversalAdditionalCameraData組件的屬性,在腳本中對(duì)相機(jī)堆棧進(jìn)行重新排序。
04 將同一臺(tái)疊加相機(jī)添加到多個(gè)堆棧
要將疊加相機(jī)添加到多個(gè)相機(jī)堆棧:
創(chuàng)建一個(gè)至少包含一個(gè)疊加相機(jī)的相機(jī)堆棧。
在場(chǎng)景中創(chuàng)建相機(jī)。它的渲染類型默認(rèn)為Base,使其成為基礎(chǔ)相機(jī)。
選擇新的基礎(chǔ)相機(jī)。
在相機(jī)Inspector中,滾動(dòng)到堆棧部分,單擊加號(hào)(+)按鈕,然后單擊要在兩個(gè)相機(jī)堆棧中使用的疊加相機(jī)的名稱。
現(xiàn)在,疊加相機(jī)將同時(shí)在兩個(gè)相機(jī)堆棧中渲染。
你還可以通過直接操縱cameraStack基礎(chǔ)相機(jī)的UniversalAdditionalCameraData組件的屬性,將腳本中的相機(jī)添加到相機(jī)堆棧中,如下所示:
var cameraData = camera.GetUniversalAdditionalCameraData(); cameraData.cameraStack.Add(myOverlayCamera);
將多個(gè)相機(jī)渲染到一個(gè)目標(biāo)
在通用渲染管線(URP)中,多個(gè)基礎(chǔ)相機(jī)或相機(jī)堆??梢凿秩镜酵讳秩灸繕?biāo)。這使你可以創(chuàng)建例如分屏渲染的效果。
如果有多個(gè)基礎(chǔ)相機(jī)或相機(jī)堆棧渲染到渲染目標(biāo)的同一區(qū)域,則Unity會(huì)多次繪制重疊區(qū)域中的每個(gè)像素。最高優(yōu)先級(jí)的基礎(chǔ)相機(jī)或相機(jī)堆棧最后繪制。
你可以使用基礎(chǔ)相機(jī)的輸出目標(biāo)屬性來定義渲染目標(biāo),并使用視口矩形(Viewport Rect)屬性來定義要渲染到的渲染目標(biāo)的區(qū)域。
設(shè)置分屏渲染
在URP中設(shè)置分屏渲染
在場(chǎng)景中創(chuàng)建相機(jī)。其渲染模式默認(rèn)為Base,使其成為Base Camera。
選擇相機(jī)。在Inspector中,滾動(dòng)到Output部分。將Viewport的值更改為以下值:
X:0
Y:0
Width:0.5
Height:1
在場(chǎng)景中創(chuàng)建另一個(gè)相機(jī)。其渲染模式默認(rèn)為Base,使其成為Base Camera。
選擇相機(jī)。在Inspector中,滾動(dòng)到Output部分。將Viewport Rect的值更改為以下值:
X:0.5
Y:0
Width:0.5
Height:1
Unity將第一個(gè)Camera渲染到屏幕的左側(cè),將第二個(gè)Camera渲染到屏幕的右側(cè)。
你可以通過設(shè)置其rect屬性,在腳本中更改相機(jī)的視口矩形,如下所示:
myUniversalAdditionalCameraData.rect = new Rect(0.5f, 0f, 0.5f, 0f);
渲染到RenderTexture
在通用渲染管線(URP)中,相機(jī)可以渲染到屏幕或RenderTexture(渲染紋理)。渲染到屏幕是默認(rèn)設(shè)置,也是最常見的用例,但是渲染到RenderTexture可讓你創(chuàng)建如CCTV相機(jī)監(jiān)視器的效果。
如果你有要渲染為RenderTexture的相機(jī),則必須有第二個(gè)相機(jī),然后再將該RenderTexture渲染到屏幕上。在URP中,所有渲染到RenderTexture的相機(jī)都在所有渲染到屏幕的相機(jī)之前執(zhí)行其渲染循環(huán)。這樣可以確保RenderTexture已準(zhǔn)備好渲染到屏幕上。
渲染到RenderTexture,然后將該RenderTexture渲染到屏幕。
在URP中渲染到RenderTexture
使用Assets > Create > Render Texture在項(xiàng)目中創(chuàng)建Render Texture資產(chǎn)。
在場(chǎng)景中創(chuàng)建一個(gè)Quad。
在你的項(xiàng)目中創(chuàng)建一個(gè)材質(zhì),然后選擇它。在Inspector中,將RenderTexture拖動(dòng)到材質(zhì)的BaseMap字段。
在Scene視圖中,將材質(zhì)拖到Quad上。
在場(chǎng)景中創(chuàng)建相機(jī),其渲染模式默認(rèn)為Base,使其成為Base Camera。
選擇基礎(chǔ)相機(jī)。在Inspector中,滾動(dòng)到Output部分,然后將Render Texture拖到Output Texture字段。
在場(chǎng)景中創(chuàng)建另一個(gè)相機(jī)。它的渲染模式默認(rèn)為Base,使其成為Base Camera,將Quad放置在新Base Camera的視圖內(nèi)。
第一臺(tái)Camera將其視圖渲染到RenderTexture。第二臺(tái)相機(jī)將包括RenderTexture的場(chǎng)景渲染到屏幕上。
你可以通過設(shè)置cameraOutput相機(jī)的UniversalAdditionalCameraData組件的屬性,在腳本中設(shè)置相機(jī)的Output,如下所示:
myUniversalAdditionalCameraData.cameraOutput = CameraOutput.Texture; myCamera.targetTexture = myRenderTexture;
本文轉(zhuǎn)自:Unity官方平臺(tái) ,作者:鄭洪智,轉(zhuǎn)載此文目的在于傳遞更多信息,版權(quán)歸原作者所有。
審核編輯:何安
-
相機(jī)
+關(guān)注
關(guān)注
4文章
1369瀏覽量
53920 -
Unity
+關(guān)注
關(guān)注
1文章
127瀏覽量
21879
發(fā)布評(píng)論請(qǐng)先 登錄
相關(guān)推薦
晶振在工業(yè)相機(jī)中的應(yīng)用
![晶振在工業(yè)<b class='flag-5'>相機(jī)</b><b class='flag-5'>中</b>的應(yīng)用](https://file1.elecfans.com/web3/M00/05/25/wKgZPGd9CdOAHVYxAABbIVFq60I764.png)
AUTOSAR中通信堆棧的配置 AUTOSAR通信模塊測(cè)試方法
![](https://file1.elecfans.com/web1/M00/F4/EB/wKgaoWczJ5WAbMtsAASWS8wbnh4987.png)
深視智能高速相機(jī)觀測(cè)水滴滴落過程#高速相機(jī) #高清高速相機(jī) #高速工業(yè)相機(jī) #工業(yè)相機(jī) #機(jī)器視覺 #傳感器
![](https://file1.elecfans.com/web1/M00/F3/93/wKgaoWcZqo-AQt7lAAIisywsuc8607.jpg)
新品上市|深視智能高速相機(jī)精靈系列引領(lǐng)行業(yè)新風(fēng)尚 集多項(xiàng)高端技術(shù)于一體!#深視智能#高速相機(jī)
![](https://file1.elecfans.com/web1/M00/F2/F1/wKgZoWcOMseAF0h-AAGvvUBicDQ042.jpg)
使用Simplelink?無線MCU系列測(cè)量堆棧終端器件功耗
![使用Simplelink?無線MCU系列測(cè)量<b class='flag-5'>堆棧</b>終端器件功耗](https://file.elecfans.com/web1/M00/D9/4E/pIYBAF_1ac2Ac0EEAABDkS1IP1s689.png)
C2000?MCU的運(yùn)行時(shí)堆棧大小監(jiān)測(cè)
![C2000?MCU的運(yùn)行時(shí)<b class='flag-5'>堆棧</b>大小監(jiān)測(cè)](https://file.elecfans.com/web1/M00/D9/4E/pIYBAF_1ac2Ac0EEAABDkS1IP1s689.png)
堆棧和內(nèi)存的基本知識(shí)
![<b class='flag-5'>堆棧</b>和內(nèi)存的基本知識(shí)](https://file1.elecfans.com/web2/M00/05/7C/wKgaombQES2AFnb1AAEisWjn2dk976.png)
銀月光VCSEL激光紅外在熔池監(jiān)控相機(jī)中的應(yīng)用
如何使用Polyspace Code Prover來統(tǒng)計(jì)堆棧
![如何使用Polyspace Code Prover來統(tǒng)計(jì)<b class='flag-5'>堆棧</b>](https://file1.elecfans.com/web2/M00/FE/63/wKgZomah68aALHvbAAL60nhE0Jk365.png)
請(qǐng)問est_printf為什么要使用堆棧空間?
熔池監(jiān)控相機(jī)的原理是什么
![熔池監(jiān)控<b class='flag-5'>相機(jī)</b>的原理是什么](https://file1.elecfans.com//web2/M00/ED/46/wKgZomZqjQaALUUqAAA2EnsuT9I980.jpg)
Koolance 散熱器在科學(xué)相機(jī)中的應(yīng)用(二)
![Koolance 散熱器在科學(xué)<b class='flag-5'>相機(jī)</b><b class='flag-5'>中</b>的應(yīng)用(二)](https://file1.elecfans.com//web2/M00/E8/E0/wKgaomZNoaaAEChSAABh-ZFZF3w869.png)
IAR中調(diào)試freertos系統(tǒng)怎樣才能方便的獲得任務(wù)的堆棧情況?
機(jī)器視覺中如何選擇相機(jī)與對(duì)應(yīng)的鏡頭
![機(jī)器視覺<b class='flag-5'>中</b>如何選擇<b class='flag-5'>相機(jī)</b>與對(duì)應(yīng)的鏡頭](https://file1.elecfans.com/web2/M00/C7/45/wKgZomYSSyKAEEnhAAAP09aywr0701.jpg)
評(píng)論