最近正在準備雅思,趁機翻譯了Cardboard的文檔,這個文檔掛在谷歌官網上,不翻牆根本看不了,翻了牆這個網頁也很不穩定,經常上不去,所以就搬運了過來,不過我英語水平實在有限,這次翻譯也是對自己的一次鍛鍊,有的地方我自己明白但是也很難表述好,還請大神輕噴。
裏面有很多奇怪的詞彙查不到,都是我自己猜着翻譯的,還有的詞查到了也不知道是啥,比如“剔除掩膜”啥的…,翻譯工作量也很大,都是我自己擠時間翻譯的,還請大神們指出翻譯的不好的地方,英文版請見我上一篇博客:http://blog.csdn.net/sunmc1204953974/article/details/47157951
Cardboard Unity SDK Reference中文翻譯版,水平有限請以英文版爲準。
Plugin Reference
Package 內容
Unity插件包包含以下內容:
腳本
· Cardboard.cs -本地代碼虛擬現實設備的單例模式連接。
· CardboardEye.cs -用於立體相機的視角(eye view)/投影
· CardboardHead.cs -用於虛擬現實眼鏡的頭部視圖的變換
· GazeInputModule.cs -通過目光(注視點)和點擊觸發控制uGUI元素。
· Pose3D.cs -包含一個旋轉和平移。
· RadialUndistortionEffect.cs -圖像效果虛擬現實校正(雙屏)。
*注:這裏的distortion我理解爲利用雙屏變換模擬顯示,後同。
· StereoController.cs -控制非立體顯示(全屏顯示)還是立體顯示(分屏顯示)。
*注:這裏的mono/ stereo我理解爲全屏顯示(VR模式關)與分屏顯示(VR模式開),後同
編輯器腳本
· CardboardEditor.cs - Cardboard對象的自定義參數。
· StereoControllerEditor.cs -添加了一個按鈕來更新立體雙眼攝像頭。
Prefabs
· CardboardMain -一個可直接替代的主相機對象。
· CardboardHead -一個可直接替代的其他攝像機。
· CardboardAdapter -將立體渲染添加到現有的攝像頭。
Shaders
· RadialUndistortionEffect -着色器虛擬現實校正(雙屏)。
演示
· DemoScene -插件的簡單演示。
Legacy
這些特性是爲了支持現有項目在老版本的Unity上也可以運行,是爲統一版本而設計的。
· CardboardGUI.cs -採集OnGUI到一個紋理。
· CardboardGUIWindow.cs -在場景中的網格上顯示OnGUI紋理。
· CardboardGUIMouse.cs -用用戶的目光控制鼠標; 繪製鼠標指針。
· CardboardGUI Prefab -使得可以很容易的在立體視角中通過OnGUI實現顯示和交互。
· SkyboxMesh.cs -將一個攝像頭的skybox轉換爲一個運行時的網格紋理。
· StereoLensFlare.cs -支持方向的鏡頭耀斑但是存在一定視差。
· SkyboxMesh Shader-不發光的紋理背景。
· GUIScreen Shader-具有透明度的不發光紋理覆蓋。
這部分包含單個腳本的特定目的和他們如何一起工作,無論是在使用提供的預製件時(prefab)還是如果您自己添加到自己的場景。
提供了去訪問底層虛擬現實設備的方法,這是在本地代碼中實現的。應該只在其中一個場景中。如果需要的話,一個實例會在運行時產生,如果你想自定義它的初始屬性,你也可以通過編輯器添加一個。
enum Eye { Left, Right }
兩隻眼睛之間的區別(左眼右眼)。
enum Distortion { Distorted, Undistorted }
檢索投影和視口(Viewport)屬性,確定您是希望通過Cardboard眼鏡來觀看時所需的圖像(Distorted,雙屏)或如果沒有眼鏡的存在時所需的圖像(Undistorted,全屏)。(注* 視口(ViewPort)是計算機圖形學裏面的重要概念之一,是與設備相關的一個矩形區域,座標單位是與設備相關的,簡單理解就是你在顯示屏幕裏能夠看到的顯示內容.)
Cardboard SDK [static, read only]
指向該腳本的單一全局實例。如果不是已經存在的話,該實例是按需創建的。
bool DistortionCorrection [default true]
是否虛擬現實校正由插件進行。如果被禁用,則它是由應用程序執行任何它想執行的虛擬現實校正,如果有的話。
bool VRModeEnabled [default true]
確定場景是非立體顯示(全屏顯示)還是立體顯示(分屏顯示)。指定這個字段可以自己控制分屏/全屏
bool TapIsTrigger [default false]
當啓用時,Cardboard把一個屏幕點擊(screen tap)視爲一個觸發(trigger pull)進行處理。(注* 感覺這裏說的trigger是扣Cardboard側面的磁鐵)
bool EnableAlignmentMarker [default true]
啓用或禁用立體視圖之間呈現的垂直線,以幫助用戶將手機屏幕對準Cardboard眼鏡的中線。
bool EnableSettingsButton [default true]
啓用或禁用Cardboard的設置按鈕。它顯示爲立體視圖之間的空白上的一個齒輪圖標。這個設置按鈕打開谷歌Cardboard app,允許用戶配置他們的個人設置和Cardboard的耳機參數。
float NeckModelScale [0..1, default 1]
原生SDK將使用一個頸部偏移的頭部跟蹤,從而實現一個更逼真的人的頭部位置模型。
該控制確定偏移的比例因子。要關閉頸部模型,將其設置爲0,將其全部打開,設置爲1。中間值可用於動畫從開到關,反之亦然。
bool AutoDriftCorrection [default true]
當啓用時,會進行陀螺漂移讀數的估計和去除(自動漂移修正)。
bool Triggered [read only]
判斷是否觸發了Cardboard的觸發器。在每次觸發後爲一個十分精確的完整幀。(注* 感覺這裏說的trigger是扣Cardboard側面的磁鐵)
bool Tilted [read only]
判斷Cardboard使用者是否呈傾斜在其一側的狀態。在每次傾斜後爲一個十分精確的完整幀。一些應用程序把它視爲一個“返回”或“退出場景”的動作。
RenderTexture StereoScreen
當虛擬現實模式被啓用(VR Mode enable)時,立體相機會自動的並排的渲染在這一目標上。每一幀,其結果是經過虛擬現實校正(分屏)的,然後顯示出來。請注意,當VR模式被禁用(VR Mode disable)或不支持虛擬現實校正,此屬性將返回null。
該屬性通常是通過Cardboard自動初始化的,但如果你想自定義紋理,你可以指派它到你的代碼中。
Pose3D HeadPose [read only]
當前幀的頭部姿態,將頭部跟蹤系統作爲返回值。
Pose3D EyePose(Cardboard.Eye eye)
指定的眼睛相對於頭部的姿態。
Matrix4x4 Projection(Cardboard.Eye eye, Distortion distortion [default Distorted])
當前幀的投影矩陣,用於給定的眼睛。該矩陣是一個分別具有1米和1千米的近端和遠端剪裁平面的離軸透視投影。 CardboardEye 腳本負責採用調整這個特殊相機的矩陣。
Rect Viewport(Cardboard.Eye eye, Distortion distortion [default Distorted])
指定眼的攝像機會渲染成屏幕空間的視口(Viewport),在虛擬現實的情況下,這將是左或右半邊的stereoscreen渲染紋理。在非虛擬現實的情況下,它指的是屏幕上可以看到實際看到的矩形區域。(注* 視口(ViewPort)是計算機圖形學裏面的重要概念之一,是與設備相關的一個矩形區域,座標單位是與設備相關的,簡單理解就是你在顯示屏幕裏能夠看到的顯示內容.)
Vector2 ComfortableViewingRange [read only, default 1-100000 meters]
在現實世界中,一個可以通過設備舒適地觀看一個物體的最小和最大距離。
Action OnTrigger
每當觸發(Trigger)發生時發生該事件。如果 TapIsTrigger 被啓用,那麼當一個屏幕點擊(screen tap)發生時也會發生該事件。(注* 感覺這裏說Trigger的是扣Cardboard側面的磁鐵)
Action OnTilt
每當使用者呈傾斜在其一側的狀態(Tilt)發生該事件。如果 TapIsTrigger被啓用,退出鍵也會成爲需要注意的問題:在Android上,Unity會將後退按鈕(BackButton)視爲退出鍵。
void UpdateState()
從手機中讀取最新的跟蹤數據。這必須在訪問任何的姿態信息和矩陣之前調用。
每幀多次調用是允許的:後續調用僅僅產生第一次調用的緩存結果。爲了最小化延遲,如果可能的話,應該首先在一幀的稍後進行第一次調用(例如,in LateUpdate)
bool Recenter()
使頭部追蹤器回到中心位置,使手機的當前方向變爲正方向。
void CreateStereoScreen()
創建(或重新創建)StereoScreen紋理並使用合理的默認設置。如果不支持虛擬現實校正則沒有效果。
渲染同樣的視圖作爲父類StereoController的一個單攝像頭,而不是完整的立體眼睛。視圖和投影矩陣被連續不斷地從Cardboard對象的 EyeView 和 Projection 屬性更新。渲染輸出被指向到Cardboard的 StereoScreen 渲染紋理,是在左半或右半取決於所選擇的眼睛。
渲染 CardboardEye 相機是由StereoController所控制的,而不是由正常的Unity渲染管線所控制的。因此, CardboardEye 相機一般都將enable設置爲false。
在每個幀中,所有的攝像機設置(例如,剔除掩模,視野,近/遠剪裁距離,等等)在父類單相機渲染之前被複制。因此,去設置附屬於cardboardeye本身的相機的屬性是毫無意義的。
Cardboard.Eye eye
確定要渲染的立體眼睛,就是去用哪個 EyeOffset 和 Projection 矩陣並且去渲染到屏幕的哪一半。
LayerMask toggleCullingMask
允許你爲這個眼睛打開或關閉特定剔除掩模層。掩模是一個觸發器:這個眼睛的剔除掩模首先從父單相機複製,然後在此指定的層被啓用。每隻眼睛有它自己的觸發器掩模。
StereoController Controller [read only]
返回 StereoController 來控制這個眼睛。
CardboardHead Head [read only]
返回最近的祖先 CardboardHead。
將此腳本附加到任何與用戶頭部運動相匹配的遊戲對象上。默認情況下,它連續不斷地去更新本地轉換到 HeadView 的 Cardboard 對象。一個目標對象可以被指定去爲運動提供一個可替換的參考系。
如果你需要從原點偏移相機的話,這個腳本通常會直接連接到一個攝像頭對象,或者其父類。另外,它可以作爲Camera的子類以及CardboardEye Camera的父類插入 。如果你已經掌控了邏輯驅動的單攝像機(*注:不知道翻譯的對不對,原文:if you already have steering logic driving the mono Camera),並希望讓用戶的頭部運動與此相關則需要這樣去操作。需要注意的是在後者的設置中,只有當啓用VR模式時,頭部跟蹤纔是是可見的。
在某些情況下,你可能需要CardboardHead的兩個實例,指的是兩個不同的目標(其中之一可以是父類),爲了將執行旋轉與執行位置偏離分開。在這種情況下,將使用trackRotation 和 trackPosition 的特性。
bool trackRotation [default true]
確定是否將用戶的頭部轉動應用到gameobject 的方向。(*注:如果該屬性爲false,則轉動頭部和側歪頭部都無效,無法轉動視角)
bool trackPosition [default true]
確定是否將用戶的頭部偏移應用到gameobject 的位置。(*注:類比上個屬性)
Transform target [default null]
用戶的頭部運動將被應用在該對象的參考系,而不是頭部對象的父類。一個良好的使用情況下是基於頭部轉向。通常情況下,將父對象(換言之即身體或車輛)轉向用戶正在看的方向,head也會跟隨附帶着,由此創造了一個正反饋迴路。使用一個外部的目標對象作爲用戶注視方向的一個固定參考點。通常情況下,父類的父類或更高的祖先是一個合適的目標。
bool updateEarly [default false]
確定頭部跟蹤是應用 LateUpdate() 還是 Update() 。默認值是LateUpdate() ,以減少等待時間。但是,一些腳本需要使用攝像機的方向來影響遊戲的玩法,例如在LateUpdate() 階段,使用投射光線或者操縱一輛車 。(*注:不知道casting rays是什麼鬼,原文:e.g by casting rays or steering a vehicle, during the LateUpdate() phase.)
由於Unity的原因,這可能會導致令人討厭的抖動,在 LateUpdate() 階段,在一些幀中將會優先更新頭部對象,而其他的放在第二位。如果你的遊戲出現了這些糟糕的情況,請嘗試切換頭部對象使用 Update() 。
Ray Gaze [read only]
在確保變換是最新的之後,返回基於頭的位置和直視方向的光線。在場景中使用光線投射(注* Physics.Raycast 光線投射)來確定該用戶正在查看的對象。
此腳本提供統一個Unity的BaseInputModule 類的實現,使得Canvas-based UI元素(uGUI)可以通過注視以及磁鐵觸發或者觸摸屏幕這三種方式來選擇和使用。請參閱 指南 中有關使用的詳細信息。
GazeInputModule 發出以下事件: 進入, 退出, 向下, 向上, 點擊, 選擇, 取消選擇和 選擇更新(UpdateSelected)。但不能發出滾動,拖拽,移動,以及提交和取消事件。
bool vrModeOnly [default false]
確定目光(注視點)輸入是否是隻在VR模式下有用(true),或所有的情況下(false)。如果你打算在非VR模式下使用直接的屏幕觸擊或其他輸入方式時,設置爲false。
GameObject cursor [default null]
這是一個可選的對象被作爲注視點的光標(raycast intersection)放置,擔任3D的鼠標光標。 重要提示: 請務必設置所有的光線發射器都忽略這個對象的所在層。
float clickTime [default 0.1]
在通過進行一次觸發,指針按下與彈起之間的一段短時間,是UI元素去轉換他們的狀態的准許時間。
Vector2 hotspot [default (0.5, 0.5)]
在視口(ViewPort)座標中,通過該像素投射光線。一般地,中心像素是最佳的,假定一個單視場攝像機被選作Canvas的事件相機。(注* 視口(ViewPort)是計算機圖形學裏面的重要概念之一,是與設備相關的一個矩形區域,座標單位是與設備相關的,簡單理解就是你在顯示屏幕裏能夠看到的顯示內容.)
封裝一個旋轉和一個平移。這是一個很方便的類,允許構造和值訪問無論是通過Matrix4x4或是四元數 + Vector3的類型。
Vector3 Position
pose的translation組件。
Quaternion Orientation
Pose的rotation組件。
Matrix4x4 Matrix
Pose在Unity遊戲對象習慣約定下的Matrix4x4矩陣。(左手系)
Matrix4x4 RightHandedMatrix
Pose在右手座標系下的矩陣。
實現了由本地代碼執行的相同的桶形變形。它用於在編輯器裏去運行一個場景時,能夠顯示失真校正的效果,並且在本地代碼的失真校正爲不可用或禁用時進行返回。(注* 一條直線經過鏡頭拍攝後,變成彎曲的現象,稱爲歪曲像差。向對角線往外彎的是「枕狀變形」(pincushion),向內彎的是「桶狀變形」(Barrel)。一支變焦鏡頭,通常在廣角端呈現桶狀變形,而在望遠程呈現枕狀變形。)
這個腳本必須被添加到任何一個當APP在VR Mode下時可以渲染立體效果(雙屏)的相機。這包括畫中畫窗口,無論它們的內容是否在立體模式下(雙屏):不管什麼情況窗口本身必須成雙用於立體顯示。
對於每一幀, StereoController 決定是否經由其綁定的攝像機(單攝像機)進行渲染還是使用其控制的立體的eyes(見 CardboardEye)。您可以通過設置Cardboard.SDK.VRModeEnabled的值來立馬控制所有攝像機 。
由於技術原因,在幀的起始部分單攝像頭保持啓用。它只在渲染在 OnPreCull()的作用下開始時被禁用,並在該幀的末尾再次被重新啓用。這將允許使用第三方使用Camera.main的腳本,例如,即使在VR模式被啓用的情況下引用該單攝像機。
在啓動腳本時請確保有一個完整的立體顯示系統,其中包括兩個附加了CardboardEye 腳本的子攝像機,以及一個用於頭部追蹤的在某個父子層級的CardboardHead 腳本。在必要的情況下該系統被創建, CardboardHead 被連接到控制器本身。子攝像機的設置會從單攝像機克隆或更新。
一個 StereoController 包含另一個StereoController作爲一個孩子是被允許的。在這種情況下,一個CardboardEye 由其最近的 StereoController 父級控制。
此腳本的Inspector面板包括一個按鈕來更新立體攝像機。這會執行與上述啓動相同的動作,但是可以在編輯器(Editor)中運行。如果你想要自定義使用的話就這樣來產生立體顯示系統。這個功能也可以在編輯器的主菜單中的Component- >Cardboard- >Update Stereo Cameras使用,也可以通過該攝像機組件的右鍵菜單來使用。
bool directRender [default true]
如果您想在立體模式下使用延遲渲染或任何圖像效果,關閉該選項。
float stereoMultiplier [0..1, default 1]
調整該立體顯示系統中實體視覺的等級。請注意,此參數並不是Head的虛擬尺寸—爲此使用一個CardboardHead 對象上的尺寸。相反,它是一個對人眼聚散度的控制,換言之,是立體顯示系統的視覺重合程度。如果設置爲0,將會獨立的將此立體顯示系統的立體視覺關閉。
float matchMonoFOV [0..1, default 0]
立體攝像機默認使用Cardboard裝置的實際光學視野(actual optical FOV),因爲否則將會破壞頭部運動和場景運動之間的匹配關係,從而影響到虛擬現實的效果。然而,在某些情況下,比如爲了特殊效果或藝術原因,去調整視野也是可取的。但在任何情況下都不要讓視野與真正的光學視野有很大出入,否則用戶可能會感到不適。
這個值決定了單攝像機的視野的匹配。這是一個分數:0意味着沒有匹配,1意味着完全匹配,中間的值是一種折衷。不去匹配100%的原因包括保留一些虛擬現實,以及由於鏡頭畸變,當手機不是在虛擬現實模式時,視野的邊緣是不容易看到的。
這個變量的另一個用途是保存在各種Cardboard模型的光學視場的不同場景組成。在所有的情況下,這個值只允許單攝像頭在虛擬現實模式中有一定的控制權,就像它在非虛擬現實模式下一樣。
float matchByZoom [0..1, default 0]
確定由立體攝像機的視場匹配單攝像機的視場的方法(假設matchmonofov不是0)。默認是移動立體相機(matchByZoom = 0),與之相反的是做一個簡單的攝像機縮放(matchByZoom= 1)。中間值爲兩種行爲的混合。
不建議對典型場景組合使用簡單的縮放,因爲它會與虛擬現實需要匹配用戶的頭部運動與相應的場景運動的要求相矛盾。這應該作爲特殊效果例如當玩家通過望遠鏡或其它放大鏡(以及因此玩家知道VR是要受到影響)來觀看場景,或類似的情況下被保留。
值得注意的是,通過移動眼睛的匹配要求centerofinterest對象是非空的,否則會沒有效果。
Transform centerOfInterest [default null]
通過移動眼睛來使立體顯示(分屏顯示)中的單攝像機視野保持一致需要一個指定的“興趣中心(center ofinterest)”。無論是一個你在場景中放置的空間中的點(空遊戲物體)來作爲一種“三維光標”,還是一個玩家有可能被吸引的實際的場景實體都可以作爲“興趣中心”。
由於在單攝像機上,其FOV調節是通過移動眼睛的朝向或遠離COI來完成的,以便於在屏幕上看起來有相同大小。如果COI爲null,該調節將被禁用。
float radiusOfInterest [default 0]
該 “興趣中心(center of interest)” 通常指的就是空間中的一個點,就像一個三維光標一樣。有時候,你將希望它是一個具有明確的大小的實際物體。將此屬性設置爲該物體的近似半徑會幫助視場匹配代碼(FOV-matching code)去補償物體的視野(*注:原文:object's horizon 不知道翻譯的對不對)。
bool checkStereoComfort [default true]
當控制器檢查 centerOfInterest 在最近和最遠舒適的觀看距離(見Cardboard)之間,則爲真,否則調節立體效果倍率來彌補。如果 centerOfInterest 具有非零的radiusOfInterest,那麼近側將會被檢查。該 centerOfInterest 必須爲非空時此設置才能生效。
float screenParallax [0..1, default 0]
對於畫中畫攝像機不填充整個屏幕的問題,可以設置窗口本身的虛擬深度。值爲0意味着零視差,這是相當貼近用戶的。值爲1表示完全視差,這等於瞳距並且相當於視覺上無限遠的窗口。這不影響所述窗口部分(以像素爲單位)的實際屏幕大小,隻影響立體分屏顯示的左右圖像。
float stereoPaddingX [0..1,
default
0]
float stereoPaddingY [0..1,
default
0]
對於畫中畫攝像機,通過移動窗口來遠離VR模式中的邊緣使其更容易地看到。HMD光學系統會使屏幕邊緣很難看到,所以你可以用該屬性來保持VR模式或非VR模式下的PIP可見。 X值是沿屏幕兩邊墊起的部分,以及Y值是用於在屏幕的頂部和底部。
CardboardHead Head [read only]
返回最近的影響該控制器的立體攝像機的 CardboardHead。
CardboardEye[] Eyes [read only]
返回一個由該腳本的實例控制的立體攝像機的數組。請注意,爲了更快的訪問該數組會有一定的緩存。調用 InvalidateEyes() ,可以調用 InvalidateEyes() 。
RenderTexture StereoScreen [read only]
返回eyes將要進行渲染的目標texture。在存在一個的情況下,這是一個單攝像機的目標texture,否則有其他Cardboard.SDK.StereoScreen。
void InvalidateEyes()
清除緩存的 Eyes 數組。只有你改變其活動的遊戲對象有被這個StereoController所控制的 CardboardEye組件時,才能調用這個函數。
下面的腳本定製了一些Cardboard組件的inspector面板。
一個爲Cardboard腳本的屬性設計的自定義編輯器。它會出現在一個Cardboard對象的inspector窗口中。其目的是爲了改變 Cardboard.SDK 對象的屬性。特別是,當遊戲在Editor中運行時,可以直接對InCardboard 屬性的值進行設置,以便去模擬手機被插入Cardboard或從Cardboard中拿出。
一個爲 StereoController 腳本設計的自定義編輯器 。它存在的意義在於向StereoController的Inspector窗口添加一個更新立體相機的按鈕,並將該按鈕添加進了相應的主菜單項和攝像機的右鍵菜單。對這些行爲的使用說明在stereocontroller.cs以上部分。
本節描述了由包所提供的預製件。
這種預製旨在成爲一個正常的Unity攝像頭的簡易替換品,如主相機,前提是當相機很簡單時,即還沒有掛滿腳本的時候。一個全新的Unity項目是一個使用它的好時機。在把他應用於編輯器時,刪除上述相機,並將其用該預製的實例來替換。
這種預製含有一個叫做CardboardMain的頂層對象,並且會有一個Cardboard腳本附着於它用來控制VR模式的設置。在它之下有一個Head對象,會有一個 CardboardHead 附着用於跟蹤該用戶的頭部運動。Head之下還有一個 Main Camera 子對象,附着一個StereoController 腳本。這個攝像機被標記爲一個 MainCamera 從而使Unity的屬性 Camera.main 發現它。最後,在層級的最底部會有左右立體攝像機。
這種預製是爲了替換場景中那些同樣需要頭部跟蹤的其他攝像機。它有含有一個附着CardboardHead 腳本的叫做Head 的頂層對象。在它之下是一個附有 StereoController 腳本的Camera子對象,然後是左,右立體聲攝像機。與 CardboardMain不同,Camera在這個預製種不會被標記爲 MainCamera。
這種預製是爲你希望保留現有的Camera對象時準備的,通常是因爲Camera在很大程度上與遊戲邏輯相連並且已經完全符合非虛擬現實遊戲的玩法了。把這個預製件作爲Camera的孩子,然後執行更新立體相機 (或手動附加 StereoController到Camera)來完成配置。
不像其他的預製件那樣,這種預置的設置是將頭部跟蹤節點放置在主攝像的下面。因此,只有立體攝像機受到用戶的頭部運動的影響。
每個預製被作爲用戶自定義化的起點提供。這是一個爲您的需要而附加額外腳本的框架。Head節點以下的元素將保持在屏幕上的固定位置,就像個平視顯示器一樣。Head的同級元素會保持一個固定的位置和相對於全局的方向,從而更像一個駕駛艙儀表板。