VIVE討論
瀏覽 : 4237
分享

[教程] 如何透過HTC Vive拍攝Mixed Reality (混合實境)影片

Bart2016-7-20 12:35

也許你是一位開發者,想為自己的HTC Vive遊戲製作酷炫的宣傳片;或者你是遊戲主播,想為觀眾帶來高品質的VR直播體驗;甚至你是一位VR的愛好者。無論如何,如果你對Mixed Reality(混合實境)感興趣,請繼續看下去。本文將介紹如何用HTC Vive拍攝高品質MR視頻。

========================================================
什麼是Mixed Reality(混合實境)影片?
========================================================

Mixed Reality影片就是透過VR中的影像+人像合成的影片。相較一般方法錄製的VR影片,Mixed Reality視頻更適合用來做遊戲直播和製作宣傳影片。
如果還是不清楚,可以看看以下這支影片,就是透過Mixed Reality所製作的影片效果。
https://www.youtube.com/watch?v=qYfNzhLXYGc

========================================================
製作Mixed Reality影片需要準備的道具
========================================================

1.) 綠幕環境

2.) 相機/攝影機(建議規格:1080p/60fps)

3.) 4K螢幕:為了合成1080p的影片,螢幕需要能放得下多個1080p視窗(建議規格:4K/60Hz)

4.) HDMI分配器

5.) HTC Vive 一組

6.) 第三個HTC Vive手柄控制器(購買網站:https://www.htcvive.com/tw/accessory/controller/)

7.) VR Ready 電腦(建議規格:https://www.htcvive.com/tw/product-optimized/)

--------------------------------------------------------------------------------------------

如果你是要將畫面直接投出給現場的觀眾看,你可能還需要準備以下道具:
(你可此參拍攝MR影片時的硬體配置圖)

1.) 影像擷取卡:可以將相機或攝影機之影像擷取至電腦,若你是採用網路攝影機直接將影像訊號輸入至電腦,則不需要此裝置

2.) 4K螢幕:為了合成1080p的影片,螢幕需要能放得下多個1080p視窗(建議規格:4K/60Hz)

3.) 螢幕(攝影師觀看用):為了讓MR影片更加豐富,跟隨著體驗者的移動式取景會比固定式取景更有趣。因此需回放合成後的結果,協助攝影師取景。若採用固定式取景方式,如網路直播,則不需此設備

4.) 螢幕(觀眾觀看用途):透過此螢幕即時播放MR畫面,適用於公開展示等活動

========================================================
MR畫面輸出說明
========================================================

一般而言,當VR遊戲執行時,螢幕視窗會顯示頭盔顯示器的視角,而在啟動MR畫面輸出時,螢幕視窗會顯示四個象限的畫面供使用者去合成,此四象限畫面分別為:

.前景(左上)
前景畫面顯示虛擬攝影機的視角,在遊戲場景中,凡是介於頭盔顯示器與虛擬攝影機之間的物體皆會顯示在此畫面中

.前景 alpha 遮罩(右上)
此畫面是前景的alpha遮罩,主要是用於影片後製時可當作前景去背的材料

.背景(左下)
背景畫面顯示虛擬攝影機的視角,在遊戲場景中,凡是介於頭盔顯示器與遠方背景的物體皆會顯示在此畫面中。

.遊戲畫面(右下)

========================================================
如何錄製MR畫面
========================================================

為了啟動混合實境畫面輸出,須達到以下三個條件:

A.) 內容程式必須是由 Unity 引擎 SteamVR 插件版本 v1.0.8 (或是更新的版本) 所開發

B.) 在內容程式執行檔目錄下放置檔案 externalcamera.cfg(純文字檔,副檔名為.cfg)

C.) 連結第三把手柄控制器(透過USB連結電腦)

以下是檔案 externalcamera.cfg 的範例:

-------------------------------------------------------------------------------------
x=0
y=0
z=0
rx=0
ry=0
rz=0
fov=60
near=0.1
far=100
sceneResolutionScale=0.5
-------------------------------------------------------------------------------------

當以上三個條件皆成立時,內容程式會在場景中建立一個虛擬相機,而檔案 externalcamera.cfg 即是定義了此虛擬相機的相關參:


.x, y, z(單位:公尺):虛擬相機與第三把手柄控制器之間的三維距離

.rx, ry, rz(單位:度):虛擬相機相對於第三把手柄控制器的翻轉角度

.fov: 虛擬相機的垂直 FOV。(此 FOV 需與實體相機的 FOV 相同)

除了定義虛擬相機的參數之外,此檔案亦定義了一些畫面參數:

.far(單位:公尺):背景畫面顯示的最遠距離,若遊戲場景很大,建議調高此參數

.sceneResolutionScale:遊戲畫面的品質,降低畫質可減少電腦資源使用

========================================================
如何校準相機參數(計算垂直FOV)
========================================================

在拍攝混合實境影片時,最重要的是取得 FOV 參數值以及取得第三隻手柄控制器與實體相機的距離,才能順利地將前景與實體物件合成。此處我們採用 AR 的工具來計算相機與鏡頭的特性,並取得正確的垂直 FOV。(除非更換拍攝時的相機或鏡頭,否則此步驟執行一次即可)

1.) 下載 ARToolKit for Unity(http://artoolkit.org/dist/arunity5/5.3/ARUnity5-5.3.2-tools-win.zip)

2.) 在 ARToolKit for Unity 中找到校準樣板 \"Calibration chessboard (A4).pdf” 並且依原尺寸列印(路徑:[downloaded ARToolKit root directory]/doc/patterns)

3.) 從命令提示字元執行程式 calib_camera.exe(路徑:[downloaded ARToolKit root directory]/bin)指令如下:

-----------------------------------------------------------------------------------------------------
> calib_camera.exe --vconf \"-devNum=1 -flipV -showDialog”

校準工具必須取得實體相機的畫面,若抓取到頭盔的前置鏡頭,請修改指令參數至 1 或 2
-----------------------------------------------------------------------------------------------------

4.) 依照線上教學步驟 (http://artoolkit.org/documentation/doku.php?id=2_Configuration:config_camera_calibration) 產生相機的特性參數檔案 camera_para.byte


\"若校準的結果是可採用的,則每個影像的誤差應在一個像素以內,若誤差超過兩個像素,表示此校準結果未成功,請重新校準\"

5.) 將校準後產生的檔案camera_para.bytes 複製到位移計算工具externalcamera_cfg_gen中

$PATH\\externalcamera_cfg_gen\\
      externalcamera_cfg_gen_Data\\
      StreamingAssets\\
      ardata\\

========================================================
將第三隻手柄控制器固定於相機上的方式
========================================================

接下來,我們嘗試計算出第三隻手柄控制器與實體相機的距離。計算的難易度取決於將手柄控制器固定於相機的方式,而且相對位置一有改變,便需要修改檔案 externalcamera.cfg,因此建議找一個固定且穩定的方式,例如將手柄控制器固定在熱靴上,拆卸安裝快速,且相對位置容易固


為了讓控制器與實體相機呈現相同的水平,我們建立了一個控制器托架,透過此托架垂直立於相機上,在檔案 externalcamera.cfg 中的三軸旋轉十分接近零度。 目前可下載 3D 列印檔案,並於列印後黏貼一至二個六角螺母(含1/4螺孔)
( 3D 列印檔案下載連結:https://drive.google.com/drive/folders/0B9XEEDfLPxmjek5ObnBsVkhmR1U


一旦順利地將第三隻控制器固定於腳架、相機支架或熱靴上後,接下來便是計算出檔案 externalcamera.cfg 裡需要的位移 (x, y, z) 以及旋轉 (rz, ry, rz)。我們建議以下兩種方式:

方案 A:

若你採用 HTC Vive控制器托架並且將其固定於相機熱靴上,此時控制器與相機鏡頭應該在同一個水平上,所有的相對旋轉 (rx, ry, rz) 接近於零,因此我們只需要計算位移即可:

1.) 找出控制器的中:控制器的中心點位於圓盤追蹤器的上緣,下圖中,矩形的位置即代表著控制器的中心點。


2.) 計算位移(x, y, z):透過捲尺等工具計算出控制器中心點與相機鏡頭成像位置的三度空間距離,上圖右下方即為x, y, z 軸與控制器的相對位置。


方案 B:

若你的控制器與相機不在同一個水平上,這裡提供一個計算位移的工具(下載連結:https://drive.google.com/file/d/0B9XEEDfLPxmjZjhYaEZrNE9mLVE/view)

1.) 下載 ARToolKit for Unity(http://www.artoolkit.org/dist/arunity5/5.3/ARUnity5-5.3.2-tools-win.zip)

2.) 在 ARToolKit for Unity 中找到校準樣板 “Multi pattern 4x3 (A4).pdf” 並且依原尺寸列印。(路徑:[downloaded ARToolKit root directory]/doc/patterns)

3.) 將校準後產生的檔案 camera_para.bytes 複製到位移計算工具 externalcamera_cfg_gen 中

$PATH\\externalcamera_cfg_gen\\
   externalcamera_cfg_gen_Data\\
   StreamingAssets\\
   ardata\\

4.) 將相機連結上電腦

5.) 執行 $PATH\\externalcamera_cfg_gen\\externalcamera_cfg_gen.exe

-----------------------------------------------------------------------------------------------------------------------------

.請確認計算工具抓取到正確的校準參數檔案名稱,你可以在檔案 videopara.cfg 中指定:

                        videoCParamName0 = camera_para

.校準工具必須取得實體相機的畫面,若抓取到頭盔的前置鏡頭,請修改檔案 videopara.cfg 中的參數至 1 或 2:

                        videoConfigurationWindows0 = -devNum=1 -showDialog -flipV

.請確認實體相機的螢幕比例為 16:9,例如:1920 x 1080

-----------------------------------------------------------------------------------------------------------------------------

6.) 戴上頭盔顯示器

7.) 將兩隻控制器置放於藍色虛擬控制器的位置上(請參考圖八)


8.) 卸下頭盔顯示器

9.) 將校準樣板 ”Multi pattern 4x3 (A4).pdf” 至於兩隻控制器的中央,方向需與虛擬場景中的一致


10.) 將相機對準校準樣板 ”Multi pattern 4x3 (A4).pdf”。(最好透過腳架固定)


11.) 戴上頭盔顯示器

12.) 按下任一控制器側邊的 Grip 按鈕,將虛擬的橘色控制器切換至第三把控制器所在位置。 此時橘色控制器與虛擬相機的相對位置與實體狀況相同


13.) 按下任一控制器的 Trigger 按鈕,產生檔案 externalcamera00.cfg

14.) 重新命名檔案至 externalcamera.cfg,並且將其複製到遊戲執行檔資料夾

此工具亦提供 ”地板校正功能“,當你發現地板有些微傾斜時(控制器無法與藍色控制器吻合),可能會影響計算結果,請透過此功能先行校準地板高度。

========================================================
透過OBS Studio合成影像
========================================================

接下來,我們將透過OBS Studio軟體來合成影像,在開始之前,需要先決定輸出影片的品質,而品質取決於你的對象與目的,以下是此案例的設定,必要時可做調整:

.解析度: 1080P, 30FPS

.影片大小: 100~200MB (三至五分鐘)

1.) 在 OBS Studio > 設定 > 輸出 > 標籤 “錄影”:


.輸出模式:進階

.類型:標準

.錄影格式:mp4

.流量:6000

2.) 在 OBS Studio > 設定 > 影像:


.來源(全畫面)解析度:1920x1080

.輸出(縮放)解析度:1920x1080

.常用 FPS:29.97

3.) 為了取得解析度為 1080P 的影片,必須在 4K 螢幕上以全螢幕的方式打開遊戲:


.按著 Shift 鍵,執行遊戲執行檔 (.exe)

.取消選取“Windowed”

.螢幕解析度:3840 x 2160


4.) 在 OBS Studio 中,必須依照以下順序新增三個來源,分別為”前景”、”影像擷取”及”背景”:

a.) 前景設定


前景畫面顯示虛擬攝影機的視角,在遊戲場景中,凡是介於頭盔顯示器與虛擬攝影機之間的物體皆會顯示在此畫面中。由於前景物體需要疊在玩家上方,因此前景層需至於最上方。

.新增一個來源“視窗擷取”

.視窗:指定遊戲的執行檔名稱

.取消“捕捉游標”

在前景層新增兩個特效濾鏡:

.Crop(右:1920,下:1080)

.Color Key (Black) 將前景層的黑色部分去背處理。

b.)  影像擷取設定 [解析度:1920x1080]


此來源主要是擷取來自於相機的影像,因此新增一個影像擷取裝置:

.裝置:選取網路攝影機或是影像擷取卡

.解析度/FPS 類型:自訂

.解析度:1920 x 1080

新增一個特效濾鏡:

.Chroma Key (Green) 將玩家背後的綠幕做去背處理,可以調整 “Similarity” 及 “Smoothness” 來取得較好的去背效果

c.) 背景設定

背景畫面顯示虛擬攝影機的視角,在遊戲場景中,凡是介於頭盔顯示器與遠方背景的物體皆會顯示在此畫面中。

在背景層新增一個特效濾鏡:

‧ Crop(右:1920,上:1080)

----------------------------------------------------------------------------------------------------------------------
現在就開始製作自己的HTC Vive Mixed Reality (混合實境)影片吧!!



檢舉 回應

一般用戶

等級4

模範鄉民

Redhair2016-7-24 12:09

這個真的蠻實用的,推實用教學,感謝大大分享

安靜~閃到一邊去,看我表演
檢舉 回應

一般用戶

等級1

路過旅人

查無原作者2016-8-22 13:37

這篇文章不錯,解決了我的一些疑惑,在我的實踐操作中存在一些問題,前景視頻影像進行color key(色值)進行去除黑色,遊戲中的前景模型會存在大量的黑邊,而HTC VIVE的官方宣傳視頻中並不會有這種情況,請問該現象要怎麼去進行解決?

檢舉 回應

一般用戶

等級1

路過旅人

Hanson Lu2016-8-22 22:16

OnlionLam 發表於 2016-8-22 13:37
這篇文章不錯,解決了我的一些疑惑,在我的實踐操作中存在一些問題,前景視頻影像進行color key(色值)進 ...

請問有試著調整黑色 Color key 的相似度 (Similarity) 嗎?

檢舉 回應

一般用戶

等級1

路過旅人

查無原作者2016-8-23 09:21

Hanson 發表於 2016-8-22 22:16
請問有試著調整黑色 Color key 的相似度 (Similarity) 嗎?

是的,有調整過,但會導致接近黑色的物體模型也會被去除,或者是不完整。HTC VIVE的官方視頻是很完美的。還有請問alpha通道是拿來幹什麼用的,裡面具備了alpha通道透明信息,可以通過OBS直接透明,不需要去進行color key 去除黑色。

檢舉 回應

一般用戶

等級1

路過旅人

Hanson Lu2016-8-25 16:25

OnlionLam 發表於 2016-8-23 09:21
是的,有調整過,但會導致接近黑色的物體模型也會被去除,或者是不完整。HTC VIVE的官方視頻是很完美的。 ...


Alpha mask是後製時可以使用的素材,當成遮罩去背用的,會比較乾淨。但因為OBS沒有提供遮罩的filter,所以不能透過alpha mask去背。如果遊戲是自己開發的,可以考慮修改 Unity 專案目錄的 Assets\\SteamVR\\Resources\\SteamVR_ColorOut.shader:

// return float4(color.rgb, 1);
return float4(color.rgb, color.a);

再透過 OBS \"Game Capture\" 裡的 allow transparency,就能達到較好的即時去背效果。 本文章最後由( Hanson )於 2016-8-25 16:47 編輯

檢舉 回應

一般用戶

等級1

路過旅人

查無原作者2016-8-26 09:49

Hanson 發表於 2016-8-25 16:25
Alpha mask是後製時可以使用的素材,當成遮罩去背用的,會比較乾淨。但因為OBS沒有提供遮罩的filter,所 ...

非常感謝,我自己開發的unity3D 應用已經實現,最近換了個4K顯示屏 為了錄製1920x1080的視頻,debug 和 運行VR緩慢,目前配置是 i7 4790 16G RAM  GTX1060 ,請問有什麼推薦的開發配置?

檢舉 回應

一般用戶

等級1

路過旅人

查無原作者2016-9-25 13:53

13.) 按下任一控制器的 Trigger 按鈕,產生檔案 externalcamera00.cfg  為什麼我沒有反應,檔案在哪裡位置


此工具亦提供 ”地板校正功能“,當你發現地板有些微傾斜時(控制器無法與藍色控制器吻合),可能會影響計算結果,請透過此功能先行校準地板高度。

請問怎麼校正

檢舉 回應

一般用戶

等級1

路過旅人

查無原作者2016-10-14 16:19

請問控制器托架的3D列印檔案還能夠授予存取權嗎?

檢舉 回應

分享