【发布时间】:2016-11-13 18:33:23
【问题描述】:
我一直在查看来自 Google GVR SDK for Unity 的镜头校正着色器代码,并且一直在摸索在视图空间位置的 z 分量(UNITY_MATRIX_MV,没有 UNITY_MATRIX_MVP 的透视变换) undistort() 函数(这是更简单的变体之一):
float r2 = clamp(dot(pos.xy, pos.xy) / (pos.z*pos.z), 0, _MaxRadSq);
pos.xy *= 1 + (_Undistortion.x + _Undistortion.y*r2)*r2;
根据我的理解,我们希望在 2D 屏幕空间中扭曲渲染图像以抵消镜头将应用的失真,通过该屏幕观看屏幕,我们到底在做什么将我们的半径(?)除以线性深度(pos .z) 平方?我可以设想这是代替除以 w 来获得透视,但是为什么我们要除以 z 分量的平方(这怎么会比简单地除以 z 或 w 更正确)?
【问题讨论】:
标签: unity3d virtual-reality google-vr