Z파이팅
Z-fighting스티칭 또는 평면 디프레이팅이라고도 불리는 Z-fighting은 두 개 이상의 원형이 카메라와 매우 유사한 거리를 가질 때 발생하는 3D 렌더링의 현상입니다.이로 인해 z 버퍼에서 깊이를 추적하는 값이 거의 비슷하거나 동일합니다.즉, 특정 픽셀이 렌더링될 때 z 버퍼는 어떤 픽셀이 다른 [1]픽셀과 멀리 떨어져 있는지 정확하게 구분할 수 없기 때문에 두 개의 원시 픽셀 중 어느 하나가 해당 픽셀에 그려지는지 모호합니다.한 픽셀이 모호하지 않게 가까울수록 덜 가까운 픽셀은 폐기될 수 있습니다.이것은 특히 두 개의 면이 본질적으로 같은 공간을 차지하지만, 어느 쪽도 앞에 있지 않은 코플러너 폴리곤에 널리 퍼져 있습니다.영향을 받는 화소는 z버퍼의 정밀도에 의해 결정되는 방법으로 한쪽 폴리곤 또는 다른 한쪽 폴리곤의 단편으로 임의로 렌더링된다.씬(scene) 또는 카메라가 변경됨에 따라 달라질 수 있으므로 한 폴리곤이 z 테스트에서 "우승"하고 다른 폴리곤이 "우승"하는 등의 현상이 발생할 수 있습니다.전체적인 효과는 화면 픽셀을 색칠하기 위해 "격투"하는 두 폴리곤의 깜박임과 노이즈 래스터라이제이션입니다.이 문제는 보통 제한된 서브픽셀 정밀도, 부동소수점 및 고정소수점 반올림 오류로 인해 발생합니다.
z 버퍼 정밀도가 높을수록 z-fighting이 발생할 가능성은 낮아진다.그러나 동일 평면 폴리곤의 경우 수정 조치가 취해지지 않는 한 이 문제는 피할 수 없습니다.
근접 클립 평면과 원 클립 평면 사이의 거리가 증가하고 특히 눈 근처에서 근접 평면이 선택될수록 원시 요소 간에 z 싸움이 발생할 가능성이 높아집니다.대규모 가상 환경에서는 필연적으로 원거리에서의 가시성을 해결해야 하는 요구와 전경에서의 가시성 사이에 충돌이 생깁니다. 따라서 예를 들어 우주 비행 시뮬레이터에서 멀리 있는 은하가 스케일로 그려지면 뷰어는 전경의 조종석 기하학에서 가시성을 해결할 정밀도가 떨어집니다(단,z-controlered 렌더링 전에 문제가 발생할 수 있습니다.)이러한 문제를 완화하기 위해 z-buffer 정밀도는 근접 클립 평면으로 가중되지만, 모든 가시성 체계에서는 그렇지 않으며 모든 z-fighting 문제를 제거하기에는 충분하지 않습니다.
경감
Z-fighting은 고해상도 깊이 버퍼를 사용하거나 일부 시나리오에서 z-buffering을 사용하거나 폴리곤을 [2]더 멀리 이동함으로써 줄일 수 있습니다.이와 같이 완전히 제거할 수 없는 Z-fighting은 종종 스텐실 버퍼를 사용하거나 화면상의 투영 형상에는 영향을 주지 않지만 픽셀 보간 및 비교 시 오버랩을 제거하기 위해 z-buffer 값에 영향을 미치는 변환 후 화면 공간 z-buffer 오프셋을 적용함으로써 해결된다.z-fighting이 동일한 지오메트리에 대한 하드웨어의 다른 변환 경로(예: 멀티패스 렌더링 방식)에 의해 발생하는 경우 하드웨어가 불변 정점 변환을 사용하도록 요청하여 해결할 수 있습니다.
깊이 버퍼의 정밀도가 부족하기 때문에 발생하는 Z-fighting은 세계 가시거리를 줄이는 것만으로 해결할 수 있습니다.이를 통해 근접 평면과 원거리 평면 사이의 거리가 줄어들고 정밀도 문제가 해결됩니다.그러나 공간 시뮬레이터 또는 비행 시뮬레이터와 같은 특정 가상 환경에서는 이 작업이 불가능합니다.이러한 경우 대체 기법이 존재합니다.이러한 기술 중 하나는 실제로 위치를 바꾸지 않고 사용자로부터 멀리 떨어져 있는 물체의 거리를 "시뮬레이션"하는 것입니다.예를 들어 최대 안전 뷰 거리(z-fighting이 발생하는 범위를 초과)가 10,000 단위이고 렌더링할 개체가 15,000 단위 떨어져 있는 경우 해당 개체는 10,000 단위로 렌더링할 수 있지만 이동한 거리에 비례하여 축소할 수 있습니다.따라서 절반으로 축소된 물체는 실제보다 두 배 더 멀리 있는 것처럼 보일 것입니다.이미 최대 뷰 거리에 근접한 객체 또는 최대 뷰 거리에 근접한 객체에 대해서만 이 작업을 수행하고 사용자에게 근접한 객체가 정상적으로 렌더링되는 경우 이 기술은 눈에 띄지 않습니다.Z-fighting을 줄이거나 완전히 제거하기 위해 사용되는 또 다른 기술은 로그 Z-buffer로 전환하여 Z를 반전시키는 것입니다.이 기술은 게임 Grand Theft Auto V에서 볼 수 있습니다.부호화 방식 때문에 부동소수점 번호는 0에 가까울수록 정밀도가 높아집니다.여기서 Z를 반전시키면 매우 먼 물체의 깊이를 저장할 때 정밀도가 높아지기 때문에 Z싸움을 [3]크게 줄일 수 있다.
레퍼런스
- ^ "LearnOpenGL - Depth testing". learnopengl.com. Retrieved 2021-07-01.
- ^ "Depth Buffer Precision - OpenGL Wiki". www.khronos.org. Retrieved 2021-06-30.
- ^ Courrèges, Adrian (2 November 2015). "GTA V - Graphics Study". AdrianCourreges.com. Retrieved 20 June 2018.