저는 Unity 용 Google GVR SDK의 렌즈 보정 쉐이더 코드를보고 있었으며 뷰 공간 위치의 z 구성 요소 (UNITY_MATRIX_MV, UNITY_MATRIX_MVP의 원근감 변환없이)의 사용과 관련하여 저의 머리를 긁어 왔습니다. undistort() 함수 (간단한 변종의 하나) :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 구성 요소의 제곱으로 나누기를 원하는 이유는 무엇입니까? (단순히 z 또는 w로 나누는 것보다 어떻게 더 정확합니까?)