国产日韩欧美一区二区三区三州_亚洲少妇熟女av_久久久久亚洲av国产精品_波多野结衣网站一区二区_亚洲欧美色片在线91_国产亚洲精品精品国产优播av_日本一区二区三区波多野结衣 _久久国产av不卡

?

基于Unity引擎的紅青立體影像實現(xiàn)方案研究

2021-02-02 06:07曹心怡趙建軍
現(xiàn)代電影技術(shù) 2021年1期
關(guān)鍵詞:紋理攝像機引擎

曹心怡 趙建軍

(北京電影學院,北京 100088)

《阿凡達》以來,數(shù)字3D電影的發(fā)行給制片方帶來了高額的票房,數(shù)字3D電影技術(shù)因此發(fā)展迅速。即使如此,3D電影制作過程中仍然要受到諸多因素的制約,導致拍攝時和成片后的效果不甚理想。Unity是當下使用最為廣泛的3D引擎之一,其強大的功能為立體拍攝提供了得天獨厚的支持,也為立體電影的虛擬制作提供了解決方案。

1 研究背景

現(xiàn)代立體電影的發(fā)展過程中,拍攝畫面從2K到4K,攝影機從雙機平行放置到垂直90度立體支架放置,進而發(fā)展到便攜式雙鏡頭一體機。立體電影對于拍攝條件要求較高,且DI工藝中增加了立體調(diào)整環(huán)節(jié)。傳統(tǒng)3D技術(shù)與Unity引擎和虛擬制作技術(shù)的結(jié)合,產(chǎn)生了像《獅子王》這種完全虛擬拍攝的立體電影。相比傳統(tǒng)3D電影,在Unity引擎中進行虛擬拍攝擁有以下優(yōu)點:

(1)傳統(tǒng)3D電影受到攝影機和支架物理尺寸的制約,導致基線不能無限大小,拍攝一些特殊景別的鏡頭時非常受限。即使使用分光鏡解決了雙機光軸間距問題,也有很多局限性:損失2/3檔光圈,縮小景深;工藝質(zhì)量不夠高造成反射面殘影;系統(tǒng)結(jié)構(gòu)復雜導致雙機穩(wěn)定性大打折扣等。Unity中的攝像機為虛擬攝像機,沒有機身或支架尺寸的限制,基線理論上可以是無限大小。

(2)傳統(tǒng)3D電影為常規(guī)的24幀格式,幀率不足造成的運動模糊會大大降低3D效果的品質(zhì)。而Unity引擎中優(yōu)化得當,幀率可以達到60幀甚至120幀。

(3)傳統(tǒng)3D電影需要攝影師盡力追求更大的景深,以便增加左右兩眼觀看到兩組畫面的區(qū)分度和影像清晰度,以營造立體效果。Unity中的攝像機可以實現(xiàn)無限大景深,為立體虛擬空間提供足夠清晰明亮的視覺線索。

(4)傳統(tǒng)3D電影后期DI成本高,處理復雜。Unity封裝的可編程渲染流水線能夠讓開發(fā)者更輕松地管理渲染設(shè)置,著色器(Shader)則能控制渲染細節(jié),從而實現(xiàn)特定的渲染效果。

目前,利用Unity引擎創(chuàng)作立體影像的方法,有基于裸眼3D顯示裝置的顯示系統(tǒng),也有針對特定3D顯示器的適配指南,立體效果優(yōu)秀,但是普遍存在的問題就是成本較高、較難實施。

上述的兩個Unity 立體影像方案都對硬件有較高的要求。而本文提出的方案則是利用渲染紋理(Render Texture)和Shader對左右攝像機輸出的圖像進行分別處理,實現(xiàn)方法成本低廉,實現(xiàn)簡單,立體效果較好,擁有較強的可配置性。本方案的研究目標主要包括兩部分:一是紅青立體影像的基本功能實現(xiàn),二是對于該方案的效果測試。

其中,紅青立體影像的基本功能實現(xiàn)需要在Unity場景中建立攝像機,并把攝像機的渲染目標設(shè)置成渲染紋理。還需要了解紅青立體影像的原理,并在Shader中實現(xiàn)左右機影像不同通道的分別渲染與合并工作。

對于該方案的效果測試需要完成零平面位置的調(diào)整對于立體效果的測試、攝像機橫向運動對于立體效果的測試。

2 Unity引擎與3D拍攝原理

2.1 Unity引擎概述

Unity 3D是Unity Technologies公司開發(fā)的一款3D引擎,因其強大的跨平臺特性、絢麗的3D渲染效果以及自由豐富的人機交互功能而聞名出眾。其跨平臺開發(fā)特性可以節(jié)省開發(fā)時間,省去開發(fā)者在不同平臺之間的移植開發(fā)工作。

新版《獅子王》就是使用Unity引擎進行虛擬制作,雖然現(xiàn)場有傳統(tǒng)的電影設(shè)備,包括三腳架、dolly車、云臺、調(diào)焦遙控器、搖臂、無人機,但是這些設(shè)備要么是被重新編程,像軌道和伸縮炮,用來確定攝像機的位置;要么是用Opti Track進行追蹤,例如手持或斯坦尼康。真正用于拍攝的都是Unity內(nèi)部的虛擬攝像機。最終實際使用的拍攝場景并不大,只有約21×12米,并且攝制組只用了其中大約1/3的空間就拍攝了《獅子王》的大部分內(nèi)容。

使用Unity寫Shader的一個好處在于,在Unity中,渲染管線被高度封裝,用戶不再需要親力親為手動計算一些值(通常是重復性的矩陣運算)。同時,它提供了很多內(nèi)置的參數(shù),能夠讓用戶很方便地調(diào)用,實現(xiàn)特定的渲染效果。

2.2 3D拍攝原理

人眼在觀看自然物體時,兩眼是從不同角度觀看物體,從而在左右眼視網(wǎng)膜上形成稍有差異的像,然后再經(jīng)過大腦分析融合形成立體視覺。3D拍攝時也是利用雙目視差來形成立體感的。

本項目選擇使用的是紅青立體3D方法,通過紅色和青色的色彩濾鏡對每個眼睛的圖像進行編碼,當通過用顏色“編碼”的彩色濾色片眼鏡時,對應每只眼睛的圖像都能夠到達預期的眼睛,從而在大腦皮層中合成立體圖像。

紅青立體方案有以下優(yōu)點:

(1)相比較濾色片更便宜的紅藍眼鏡,紅青眼鏡能夠更好地還原色彩,尤其是膚色。

(2)相比較偏振立體方案,不需要額外的顯示設(shè)備,普通顯示器即可觀看,成本更加低廉。

(3)相比較平行視圖(side-by-side)的立體圖案,可以擁有更大的視場角,而不會造成觀看者的不適。

基于以上方面,本項目使用紅青立體3D方法作為使用Unity輸出立體影像的方案。

2.3 Shader與渲染紋理

著色器(Shader)是GPU渲染流水線中的一個環(huán)節(jié),用來對三維物體進行著色處理、光影計算和紋理顏色呈現(xiàn)等。

圖1是GPU的渲染流水線實現(xiàn),顏色表示了不同階段的可配置性或可編程性:綠色表示該流水線階段是完全可編程控制的,黃色表示該流水線階段可以配置但不是可編程的,藍色表示該流水線階段是由GPU固定實現(xiàn)的,開發(fā)者沒有任何控制權(quán)。實線表示該Shader必須由開發(fā)者編程實現(xiàn),虛線表示該Shader是可選的。

圖1 GPU的渲染流水線實現(xiàn)

著色器中包括頂點著色器(Vertex Shader)和片元著色器(Fragment Shader)兩個部分,它們是GPU渲染流水線中完全可編程控制的部分。

在沒有渲染紋理的時候,一個攝像機的渲染結(jié)果會輸出到顏色緩沖中,并顯示到屏幕上?,F(xiàn)代的GPU允許我們把整個三維場景渲染到一個中間緩沖中,即渲染目標紋理(Render Target Texture,RTT),而不是傳統(tǒng)的幀緩沖或后備緩沖(back buffer)。Unity為渲染目標紋理定義了一種專門的紋理類型——渲染紋理(Render Texture)。渲染紋理可以看成是一種特殊的紋理類型,它在引擎運行時可以實時更新。

針對得到的渲染紋理,本方案將利用Shader做如下處理:首先對輸入的兩張渲染紋理進行采樣得到紋素值(Texel);然后把兩張圖片分別采樣得到的紋素值,RGB通道分離處理;最后,取其中一張圖片的紅(R)通道和另一張圖片的青(GB)通道,合成為一張新的紋理進行輸出。

圖2 方案結(jié)構(gòu)圖

3 基于Unity引擎的紅青立體影像的設(shè)計方案

3.1 方案概述

本文使用的方案,首先在需要處理的Unity場景里面架設(shè)2臺虛擬攝像機,再把兩臺攝像機的渲染目標設(shè)置成渲染紋理。把這兩張渲染紋理作為輸入,用Shader對它們分別做處理之后,輸出到另一個材質(zhì),作為最終的輸出。圖2為方案的結(jié)構(gòu)圖。

3.2 方案詳解

本方案由兩部分構(gòu)成,一是Unity場景的搭建和前期工作的準備,二是在Shader中處理獲得的渲染紋理,并輸出最終效果。其中在Unity中的準備工作是紅青影像方案實施的核心部分,下文將從3個角度詳解本方案。

3.2.1 場景搭建

測試場景需要保證實驗的正常進行,首先必須是三維場景,其次要有足夠的景深,遠、中、近景都有被攝物體分布。

最終確定的場景如圖3。

圖3 場景斜向俯瞰圖

圖4 Scene窗口攝像機景別

序號①處為遠處的山峰,②為中景的石頭,③為近景且在畫面邊緣的植物。最終確定的攝像機景別如圖4。

3.2.2 攝像機搭建

在圖4中確定的攝像機位置建立一個空物體,這個位置就是兩臺攝像機的中心所在的位置。把兩臺攝像機作為此空物體的子物體,位置、旋轉(zhuǎn)全部歸零。此時,這兩臺攝像機的視角均和圖4中所呈現(xiàn)的一致。

為了模擬立體攝像機的雙目視差,把兩臺攝像機分別向左右兩邊移動0.3單位,攝像機搭建完成。

目前兩臺攝像機均為平行拍攝,為了方便確定零平面的位置,還需要在Scene視圖中顯示出兩臺攝像機的主光軸。用兩個x和y方向縮放均為0的正方體(Cube)分別作為左右兩臺攝像機的子物體,同樣把位置、旋轉(zhuǎn)全部歸零,這樣轉(zhuǎn)動攝像機的時候這條兩線也會跟著顯示。用這種方法可以得到主光軸匯聚的位置。把主光軸匯聚的位置放在中景的石頭上面。

圖5 Scene窗口主光軸匯聚在中景的石頭上

3.2.3 創(chuàng)建渲染紋理

在Project目錄下創(chuàng)建一個渲染紋理,然后把左攝像機的渲染目標設(shè)置成該渲染紋理,這樣一來該攝像機的渲染結(jié)果就會實時更新到渲染紋理中,而不會顯示到屏幕上。使用這種方法,我們還可以選擇渲染紋理的分辨率、濾波模式等紋理屬性。右攝像機也做同樣操作。

因為渲染紋理經(jīng)過處理后最終要輸出到屏幕上作為輸出結(jié)果,因此大小要盡可能大。理想情況下,紋理可以是非正方形的,但是長寬的大小應該是2的冪。如果使用了非2的冪(Non Power of Two,NPOT)的紋理,那么這些紋理往往會占用更多的內(nèi)存空間,GPU讀取該紋理的速度也會有所下降。出于性能和空間的考慮,把紋理大小設(shè)置成1024×1024。

把兩個渲染紋理分別賦給兩個Quad,并排這兩個Quad,用最終輸出的攝像機拍攝side-by-side版本,測試雙目立體效果。

圖6 Game窗口Side-by-side測試輸出

3.2.4 利用著色器(Shader)處理渲染紋理

著色器的可編程部分為頂點著色器和片元著色器。

在頂點著色器中并沒有經(jīng)過太復雜的處理。首先把頂點坐標從模型空間轉(zhuǎn)換到剪裁空間中。雖然使用了兩張紋理,但是它們不存在紋理坐標上的變化操作,所以它們共用同一組紋理坐標。

在片元著色器中,因為輸出的是攝像機拍到的圖像,因此不用對法線方向和光照方向進行處理,否則會影響到輸出面片的光照效果。使用Cg的tex2D函數(shù)對輸入的渲染紋理進行采樣。它的第一個參數(shù)是需要被采樣的紋理,第二個參數(shù)是一個float2類型的紋理坐標,它將返回計算得到的紋素值。

對兩張渲染紋理做兩次采樣,其中左眼的紋理只輸出紋素值的紅色(R)通道,右眼的紋理只輸出紋素值的青色(GB)通道。最后返回的顏色則是把它們混合在一起,形成新的彩色圖像。關(guān)鍵代碼如下:

fixed RedChannel=tex2D(_Left Tex,i.uv).r;

fixed2 CyanChannel=tex2D(_Right Tex,i.uv).gb;

return fixed4(RedChannel,CyanChannel,1.0);

4 立體效果測試

4.1 匯聚對立體效果的影響

分別調(diào)整左右攝像機的旋轉(zhuǎn)參數(shù),測試平行拍攝和匯聚在中景的石頭上的效果。兩者的輸出如圖7所示。

圖7 左圖:雙機平行拍攝,右圖:匯聚在中景的石頭上

圖7左圖所有的物體都在負空間(即屏幕之前),很容易視覺疲勞。小恐龍左右像差過大,令觀察者很難融像,努力融像之后視覺非常疲憊。在Photoshop中測量負像差為42像素,圖片尺寸為1024像素,遠遠超過相差標準。

圖7右圖以中景為分界線,遠景在正空間,近景的小恐龍和植物在負空間,雖然立體感覺不如左圖強烈,但是沒有任何不適。

4.2 攝像機運動對立體效果的影響

將腳本Translating.cs拖拽給攝像機對,使兩個攝像機能夠一致往返不斷運動。

調(diào)節(jié)攝像機對橫向移動的速度,實驗證明在幀率刷新極限范圍內(nèi),速度增大都不會影響立體效果。因為Unity虛擬攝像機雙機影像能夠做到完全的幀同步,且攝像機畫面是逐幀刷新的,沒有果凍效應。

5 結(jié)語

在上文中,提出了基于Unity游戲引擎的紅青立體影像的實現(xiàn)方案,給出了此方案的研究內(nèi)容和目標。然后詳細介紹了Unity場景中準備工作應該如何進行,以及如何利用Shader對渲染紋理進行處理。最后簡單測試了本方案的立體效果。

本方案還有許多工作需要進一步實施。首先是攝像機光軸可以使用gizmos.drawline函數(shù)在Scene視圖中畫出來。然后是利用屏幕后處理給屏幕影像加運動模糊,測試運動模糊對于影像的立體效果有無影響;給輸出壓一個暗角,改善邊緣的顯示效果。最后是測試鏡面和透明物體對于立體空間的影響。

猜你喜歡
紋理攝像機引擎
點燃企業(yè)發(fā)展的“引擎”
打造信息化建設(shè)的“黨建引擎”
車壇往事4:引擎進化之屢次失敗的蒸汽機車
肺紋理增多是病嗎?
童夢
用迷你攝像機代替眼球
TEXTURE ON TEXTURE質(zhì)地上的紋理
消除凹凸紋理有妙招!
高清新陣營
看透佳能心FS11攝像機構(gòu)造揭秘
辛集市| 广水市| 赤水市| 靖州| 丁青县| 大姚县| 连州市| 绍兴市| 宁城县| 米林县| 常山县| 什邡市| 梨树县| 襄樊市| 锦屏县| 汾西县| 宜都市| 麻栗坡县| 宝清县| 长汀县| 阳西县| 华坪县| 伽师县| 绿春县| 宁远县| 威海市| 光山县| 洪江市| 常山县| 澎湖县| 乌拉特后旗| 绍兴市| 蒙自县| 宣城市| 清苑县| 宕昌县| 定远县| 精河县| 萝北县| 法库县| 开化县|