鏡子

「鏡子」(Mirrors),是可反射場景的面板,其允許 VRChat 用戶查看自己角色的鏡像畫面。鏡子經過設定後也能同時看見其他用戶或所在世界的環境樣貌。很多世界都設有供用戶在前方進行社交活動所用的鏡子。
鏡子類型

個人鏡子
個人鏡子(Personal Mirror)是一種可由用戶自行召喚並手持移動的鏡子,並且僅有召喚鏡子的用戶自己能看見。
這項功能可以從動作選單(Action Menu)或主選單(Main Menu)中的設定(Settings)標籤頁啟用與設定。
臉部鏡子


臉部鏡子(Face Mirror)是一種會在用戶的 HUD 上特寫顯示角色臉部的鏡子。臉部鏡子的設計目的是協助用戶隨時掌握自己角色的表情變化,特別是在表情由手勢控制的情況下。與傳統鏡子不同,臉部鏡子不會呈現出景深效果。在 PC 模式下,臉部鏡子的解析度會依據顯示尺寸進行縮放,最高可達 2048 × 2048 像素。當透過 Spout 輸出功能進行串流時,則會持續以最高解析度進行渲染。
校正鏡子
校正鏡子(Calibration Mirror)是在用戶按下「FBT 校正」(Calibrate FBT)時會自動啟用的鏡子。其僅有正在進行全身追蹤(FBT)校正的用戶可見,並會在校正完成後自動關閉。校正鏡子只會顯示用戶的角色、控制器以及 FBT 追蹤器模型,而該模型可於主選單中的「設定」標籤頁設定。若在「追蹤與 IK」(Tracking and IK)中啟用了「顯示 FBT 校正範圍」(Display Calibration Visuals),那麼校正鏡子也會一併顯示,用以展示校正完成後各追蹤器所對應的追蹤點。
這項功能可以從動作選單或主選單中的設定標籤頁設定啟用,但校正鏡子沒有任何可進一步調整的設定選項。
常見配置
鏡子預製組件(Mirror Prefab)允許創作者選擇哪些圖層會顯示於反射之中。因此,許多世界通常會設置多種不同的鏡子供使用者切換。一般常見會分為三種類型:高畫質鏡子、低畫質鏡子以及透明鏡子。有些世界甚至還會提供比這些更進階或更專業化的配置。
高畫質
高畫質鏡子會如同現實中的鏡子一般,從鏡子的視角完整反射周圍的世界與角色。
低畫質
低畫質鏡子通常會以較低解析度反射周圍的角色,並以 Skybox 取代,阻止反射其世界環境樣貌。
透明
透明鏡子通常會反射周圍的角色,同時像窗戶般顯示著鏡子後方的景象,並帶有些微從鏡子視角所呈現的世界反射效果。這需要特殊的設定方式,而社群上也提供了可直接使用的透明鏡子預製組件。
效能問題
鏡子中所反射到的每個物件,全都必須再額外重新渲染一次,並獨立於用戶在世界中實際看到的畫面之外。若鏡子反射了整個世界,則世界的渲染效能成本幾乎會往上再增加一倍。另外,遮擋剔除(Occlusion Culling)在鏡面反射中不會生效,因此即使鏡子正對著牆壁,它仍然會嘗試渲染牆壁後方的所有內容。
創作者可以透過多種方式降低鏡子的效能消耗,例如:
- 預設停用所有鏡子。只有在用戶按下按鈕,或實際靠近鏡子時才啟用。
- 當用戶離開區域時停用鏡子。這能在用戶未使用鏡子時移除其渲染成本。由於用戶通常不會自行關閉鏡子,因此可透過腳本自動處理。
- 考量鏡子的擺放位置。朝向世界外側的鏡子,相較於朝向世界中心的鏡子,需要渲染的內容通常更少。
- 調整鏡子所反射的 Layers(圖層)。鏡子只會渲染指定圖層上的物件。例如,若有一個大型戶外世界,而中央有一棟房屋,可以將戶外環境物件設為 Environment Layer(環境圖層),並在屋內鏡子的設定中停用 Environment Layer。如此一來,鏡子便不會嘗試渲染它實際上看不見的戶外環境。
當用戶要使用到世界中的鏡子時,通常也可以啟用或切換不同選項來節省效能,例如:
- 同時只使用一面鏡子。
- 若有提供,可選擇鏡子的低畫質模式。
- 或者以個人鏡子來取代使用世界中的鏡子。
- 也可以在圖形設定中調整鏡子的解析度。
SDK
世界預製組件
VRChat SDK 內含可直接使用的鏡子預製組件(Prefab),創作者可以直接將其拖曳至場景中使用。該預製組件位於以下路徑:
Packages\com.vrchat.worlds\Samples\UdonExampleScene\Prefabs\VRCMirror.prefab
技術細節
鏡子會於 Camera.onPreCull 階段進行渲染。使用依賴鏡子渲染時機之腳本的世界創作者,應將此行為納入考量。