歐洲卡車模擬2 - 多屏自定義設置

作者:xueyrcn,首發(fā)于百度貼吧
《歐洲卡車模擬2》(以下簡稱《歐卡2》)于2013年1月發(fā)售,在2013年7月的1.4.1版本更新中,加入了三屏顯示的支持,提供了平板、環(huán)繞等多種預設設置,在其官網(wǎng)也給出了設置接口的簡要說明。然而許多玩家的三屏顯示系統(tǒng)并非嚴格按照平板或環(huán)繞方式布置,出現(xiàn)了畫面變形以至于玩家頭暈等現(xiàn)象。本文針對此問題,詳細介紹《歐卡2》多屏顯示模型結構,并通過實例講解具體計算與設置步驟。
1 《歐卡2》多屏顯示模型
如下圖所示,《歐卡2》的多屏顯示模型由 3D場景中的攝像機、虛擬顯示器、顯卡邏輯顯示器、物理顯示器,共四個層次構成。

攝像機是通過小孔成像原理進行三維到二維投影的虛擬設備,可參考3DS MAX等軟件中的相同概念。攝像機的參數(shù)有攝像機中心位置三維坐標、偏航、俯仰、翻滾三個角度、橫向與縱向視場角。在《歐卡2》無設置或多屏的平板模式中,僅使用一個攝像機,而在環(huán)繞或自定義模式中需要使用多個攝像機從不同角度分別成像。
游戲虛擬顯示器是對每個攝像機成像后的二維圖像空間取一塊矩形子區(qū)域,進行實際的渲染。設置參數(shù)有左下角的相對坐標和相對的寬度、高度,取值范圍均為0到1。
顯卡邏輯顯示器是在顯卡驅動程序的設置中,通過AMD Eyefinity等技術將多個物理顯示器拼接而成的顯示設備。此顯示器的顯示范圍是可以容納排列好的物理顯示器所有像素的一個矩形,其像素數(shù)大于或等于物理顯示器像素之和。對于《歐卡2》而言,這就是它的最終顯示設備。
2 預設的多屏設置
《歐卡2》針對幾種較為簡單和典型的多屏配置,提供了預設的設置。用Notepad++等文本編輯器打開 <文檔>\Euro Truck Simulator 2\config.cfg 文件,修改r_multimon_mode后的數(shù)字即可啟用。

r_multimon_mode為0或1時,是平板模式,即三屏擺在同一平面上。不同的是模式1中用戶界面元素都顯示在中間屏幕上。此時游戲內(nèi)只使用1個攝像機。玩家視線正對中間屏幕中心。

r_multimon_mode為2時,是環(huán)繞模式。此模式中使用3個攝像機,攝像機原點重合,都在游戲內(nèi)設置的視角原點,但左右兩個攝像機分別設置了偏航角,角度等于一個屏幕的水平可視角度。此時玩家視點應同時處于三個屏幕的中垂線上。

r_multimon_mode為3時,是在環(huán)繞模式的基礎上添加了一臺下方的顯示器,用來顯示車輛儀表等內(nèi)容。相應地增加了一個攝像機,并設置了等于屏幕垂直可視角度的俯仰角。
r_multimon_mode為4時開啟自定義模式,是本文的重點,在下文中介紹。
在使用預設模式時,可以調整其他r_multmon_xxx參數(shù),例如r_multimon_fov_horizontal設置水平可視角度,r_multimon_border_fov_left設置左側屏幕邊框對應的視角等。
3 三屏系統(tǒng)設置實例
常用的三屏系統(tǒng)一般不符合上述平板或環(huán)繞的布置方式。以作者自用的三屏系統(tǒng)為例,三臺戴爾E2214Hv并排,兩側向內(nèi)轉20°,顯示寬度475mm,單側邊框17.5mm。在中間顯示器水平視場角為65°時,兩側顯示器水平視場角約為37.61°。

單臺顯示器分辨率1920*1080,通過顯卡驅動程序提供的AMD Eyefinity技術組成一臺5760*1080的邏輯顯示器。NVIDIA顯卡也有類似設置。
用Notepad++等文本編輯器打開 <文檔>\Euro Truck Simulator 2\config.cfg 設置文件,設置r_multimon_mode為4,開啟自定義多屏設置,設置r_multimon_fov_horizontal(水平視場角)為65,設置g_console(控制臺)為1,設置g_developer(開發(fā)者模式)為1,開啟游戲控制臺功能。
進入游戲,設置分辨率為5760*1080,進入駕駛模式可以看到三屏都有顯示,此時為默認的平板模式。按~鍵(一般在主鍵盤區(qū)1鍵左邊)打開控制臺,輸入命令multimon init three回車,初始化為默認環(huán)繞三屏模式。再輸入命令multimon save保存設置文件,此時 <文檔>\Euro Truck Simulator 2\ 目錄中出現(xiàn)multimon_config.sii文件,即多屏設置文件。

在環(huán)繞模式中,右側屏幕應與玩家到屏幕中心的視線垂直,若按照此約束,則實際的右側屏幕應是上圖藍線所在的虛擬顯示器視野中一個梯形區(qū)域經(jīng)射影變換拉伸變形得到。但《歐卡2》并沒有關于射影變換的設置選項,因此這個思路不可取。

借鑒移軸攝影的思路,使主軸(攝像機中心到圖像平面的垂線)離開畫面中心,可以構造上圖藍色線所示的顯示器。此顯示器相當于將右側顯示器左邊界向左大幅延伸,而高度保持不變,使玩家視點處在成像平面中心點的垂線上,以符合攝像機小孔成像模型。然后從此攝像機成像中提取右側所需部分作為游戲虛擬顯示器的實際渲染區(qū)域。
此時可以構造攝像機模型,用文本編輯器打開multimon_config.sii文件,找到第三段monitor_config,其中name應為right,即右側顯示器。修改:horizontal_fov_relative_offset(相對可視角度的偏航角)為 0,heading_offset(偏航角)為-20,horizontal_fov_override(水平可視角度)為108.22,vertical_fov_override(垂直可視角度)按atan(475/2*(9/16)/437.53)*2計算得33.958,frustum_subrect_width(視場子區(qū)域寬)按475/1209.23計算得0.392812,frustum_subrect_x(視場子區(qū)域左下角x坐標)按1-0.392812計算得0.607188。另有normalized_xxx參數(shù)用于設置從虛擬顯示器到顯卡邏輯顯示器的映射關系,本次由于三臺顯示器分辨率相同,不需改動。保存multimon_config.sii文件,在游戲內(nèi)控制臺輸入multimon reload載入配置文件,可以看到右側顯示器可以正常顯示。
類似地,修改第二段monitor_config,其中name應為left,即左側顯示器。各項參數(shù)參照右側顯示器,其中heading_offset為20,frustum_subrect_x為0。保存后控制臺輸入multimon reload命令即起效。

最終效果如上圖,可以看到在兩側邊框的位置有畫面斷層,對應的是顯示器邊框遮擋的部分,此例中左側顯示器邊框正好處在左后視鏡邊框位置。從右側遠處樹叢輪廓也能看出不同屏幕因為攝像機偏航角導致的透視關系不同。圖中游戲使用了創(chuàng)意工坊MOD: minimal adviser interface for ATS & ETS2。