對於vr渲染來說後期處理是乙個很重要的過程,但是由於vr渲染分左右眼,所以很多基於的後處理過程是不能簡單適用,例如在vr中做乙個扭曲,鮮血,或者霧氣等等的特效等等,那麼如何在vr中做分螢幕的後處理並且保證效果正確呢。
其實vr裡後處理特效主要就是解決兩個問題:
1.影象的畸變
這本質上就是因為vr頭顯渲染的是左右眼兩個rendertarget,而不同的vr頭顯根據投影矩陣不同投影出來的fov自然也是不一樣,對於後處理使用的貼圖來說,如果原來是按照螢幕的fov製作的,比如1920*1080等,那麼現在現在就需要按照hmd的fov去對紋理貼圖做拉伸畸變,所以我們需要乙個這樣的功能,在ue4裡這個可以用remapuvrange這個material function 做如下的實現:
這個材質函式能夠在水平方向保持對稱的對紋理進行拉伸。
那麼接下來我們就是根據各個頭顯的projection matrix算出我們的紋理要拉伸的比例,也就是材質裡面的horizontal/vertical fraction
以vive為例子。他的投影矩陣是:
[0.756892 0 0 0]
[0 0.681268 0 0]
[-0.056316 0.003274 0 1]
[0 0 10 0]
複製**
所以我們要拉伸的數值是0.25/0.756892和 0.25/0.681268
2.左右眼
vr裡的後處理都是要對左右眼同時做處理,那麼如何區分左右眼呢:ue4可以利用screentextureuv
做區分:
把左右眼拉伸好的影象連線到if節點的兩個輸出即可。
附錄:各個頭盔的fov計算
/*ue4 reported values from projection matrices
dk2
[0.92991 0 0 0]
[0 0.75097 0 0]
[??? ??? 0 1]
[0 0 10 0]
複製**
cv1[1.190342 0 0 0]
[0 0.999788 0 0]
[-0.148592 0.110690 0 1]
[0 0 10 0]
複製**
vive
[0.756892 0 0 0]
[0 0.681268 0 0]
[-0.056316 0.003274 0 1]
[0 0 10 0]
複製**
投影矩陣公式
[s 0 0 0 ]
[0 s 0 0 ]
[0 0 -f/(f-n) -1]
[0 0 -fn/(f-n) 0 ]
複製** 其中
s=1/(tan((fov/2)*pi/180))
複製**
fov計算
fov = arctan(1/s)*360/pi
複製**
結果:hmd
hs hfov
vs vfov
複製**
dk20.92991 94.159880
0.75097 106.189099
複製**
vive
0.756892 105.756425
0.681268 111.469296
複製**
cv11.190342 80.066880
0.9997888 90.012102
複製**
本文**:
52vr
.com
虛幻4
關於UE4中VR專案優化小記
1 資訊日誌 提供場景內的各種資訊,window developer tools messagelog 2 輸出日誌 內容更詳細,window developer tools outputlog 3 視口選項 顯示fps 每秒鐘的幀數 顯示資料stat unit 判斷遊戲中影響效能的主要原因存在於g...
UE4 虛幻4的網路適合開發什麼遊戲
使用虛幻4開發網路遊戲的兩種方式 一 虛幻4只做客戶端,伺服器端獨立開發,適用於任何網路遊戲 二 使用虛幻4同時開發客戶端和伺服器 使用虛幻4內建的伺服器 適用於一部分網路遊戲。如果使用虛幻4作為遊戲客戶端,最好也是要虛幻4的內建伺服器 這樣可以解決很多問題,同時節省很多巨大的工作量 自己開發伺服器...
UE4在VR模式下去掉兩側黑邊
正常用vr模式開啟以後,就會成這樣 紅框部分就是我所說的黑邊 通過改變 可以實現如下效果 在steamvrrender.cpp裡的rendertexture renderthread函式修改 修改為 void fsteamvrhmd rendertexture renderthread frhico...