私は、Google GVR SDK for Unityのレンズ補正シェーダコードを見ていて、ビュースペース位置のzコンポーネント(UNITY_MATRIX_MV、UNITY_MATRIX_MVPのパースペクティブトランスフォームなし)の使用について私の頭を傷つけています。 undistort()関数(単純な変種のこの1):Google VRレンズ補正で奥行きを使用していますか?
我々は画面がを通して見ているレンズによって適用される歪みを打ち消すために、2Dスクリーン空間でレンダリングされた画像をワープしたいことを理解し、私の考えるfloat r2 = clamp(dot(pos.xy, pos.xy)/(pos.z*pos.z), 0, _MaxRadSq);
pos.xy *= 1 + (_Undistortion.x + _Undistortion.y*r2)*r2;
、何私たちの半径(?)を直線の深さ(pos.z)の二乗で除算していますか?私はこれを視点でwで割る代わりに考えることができますが、なぜz成分の2乗で除算したいのですか(単純にzまたはwで除算するよりも正しい方法はどうでしょうか?