不論什麼樣的遊戲開發,Camera Component絕對是場景裡必備的
它是畫面呈現的最基本要求,沒了它跟盲人打遊戲差不多
直接切入正題,來看一下Camera Component的截圖:
該有的設定基本上都有了,投影方法、FOV、畫面比例,甚至是預覽用的Camera Mesh..xd
但是就是沒有Near / Far clipping plane這兩個參數?!?!
Near/Far plane決定了一個Camera渲染的範圍 (下圖取自
WebGL教學)
UE卻沒有提供有關於此的完整設定,僅提供了Near Plane的設定
(可從Edit → Project Settings → General Settings設定或使用r.SetNearClipPlane)
但一般來說我們反而是調整Far Plane居多,為什麼沒有這個設定呢?
一窺UE的Projection Matrix
要解答Far plane這個問題,得先從了解UE的
投影矩陣開始
它由FOV, Near, Far等等組成,決定渲染最後輸出在螢幕上的位置
問題就在於UE的投影矩陣定義如下:
然後引擎在使用這個建構子時,會讓minZ = maxZ,這樣第三排的值就會是0,而第四排的值是minZ
Z = 1的時候代表位置在Near plane, Z = 0的時候代表它在無限大的地方
那也難怪沒有Far plane設定了,根本不需要!
有一些人應該已經注意到了,預設情況下,你在UE的編輯畫面不論鏡頭拉多遠
物件就是不會不見~因為Far plane可是跟黑暗大法師一樣,無限的
為什麼會選擇使用Infinite Far Plane??
簡單來說就是比起Near = 0, Far = 1這種設定
Near = 1, Far = 0這樣反轉過來,深度的精確度更高,配上無限遠平面更高
那麼要怎麼根據距離剔除物件??
簡單來說,Culling功能是獨立於Camera之外的
其他場合要根據距離來淡出怎麼辦??
自己定義,像是UE內建的Volumetric Fog,淡出距離是要另外設定的
大概這樣~
轉UE後發現沒有Near/Far設定的話也不要太糾結