2022年8月22日 星期一

Viewport豆知識:Untiy Vs Unreal

今天在Unreal把MousePosition映射到NDC

(Editor Mode)

-1 < Xn < 1

-1 < Yn < 1


再從NDC映射到Camera的近平面上的點P時

Field of View = θ

ratio = screen width / screen height


scaleU = Xn * tan(θ/2) * ratio

scaleV = Yn * tan(θ/2) 

P = CameraPos + CameraX

 + CameraY * scaleU

 + CameraZ * scaleV

(Unreal的Camera是X軸和近平面垂直)

發現不管怎麼結果都很奇怪


後來先把ratio拿掉

scaleU = Xn * tan(θ/2) 

scaleV = Yn * tan(θ/2) 

才看出Unreal和Unity處理NDC到P的做法是不一樣的


Unreal使用的是

scaleU = Xn * tan(θ/2) 

scaleV = Yn * tan(θ/2) /ratio

假設 ratio = 2、θ = π/2 (90度)

當 Yn = 0.5, 有 scalueV = 1 


Unity使用的是

scaleU = Xn * tan(θ/2) * ratio

scaleV = Yn * tan(θ/2) 

假設 ratio = 2、θ = π/2 (90度)

當 Xn = 1, 有 scalueU = 2 


這代表,在Unity裡

你把Screen Width拉長時

水平方向會看到更多的東西


而在Unreal裡

當你把Screen Width拉長時

水平方向看到的範圍不變

但垂直方向看到的東西會變少


乘下的2個Case

在Unity裡, 把Screen Height拉長時


在Unreal裡, 把Screen Height拉長時