두 개의 겹치는 동일 평면 표면을 렌더링 할 때 일반적인 문제는 "z- 파이팅"인데, 렌더러는 두 표면 중 어느 표면이 카메라에 더 가까운지를 결정할 수 없으므로 겹치는 영역에 시각적 아티팩트가 있습니다.
이에 대한 표준 솔루션은 모델을 설계 할 때 표면을 약간 오프셋하는 것입니다. 다른 해결책이 있습니까?
두 개의 겹치는 동일 평면 표면을 렌더링 할 때 일반적인 문제는 "z- 파이팅"인데, 렌더러는 두 표면 중 어느 표면이 카메라에 더 가까운지를 결정할 수 없으므로 겹치는 영역에 시각적 아티팩트가 있습니다.
이에 대한 표준 솔루션은 모델을 설계 할 때 표면을 약간 오프셋하는 것입니다. 다른 해결책이 있습니까?
답변:
표면이 정확히 동일 평면 상에 있다면, 운명은 FPU 신에게 달려있다. 당신은 Z- 파이팅을 가지고있을 것입니다. 삼각형 인 경우 와 동일 하고 할 정확한 각각 같은 수학을, 당신은 것 모두에 대해 동일한 Z-값으로 끝낸다. 그러나 다시 말하지만, 수학 연산이 둘 다 동일 할 경우에만 발생합니다. (일반적으로 FPU 작업은 정식이 아닙니다)
가능한 해결책 중 하나는 Z- 버퍼를 전혀 사용하지 않는 것입니다. 오히려 Painter 's Algorithm을 사용할 수 있습니다 . 물론 이것은 화가 알고리즘의 모든 문제와 함께 제공됩니다. 그러나 Z- 파이팅을 해결할 것입니다.
SSD (Screen Space Decals)의 경우, 일반적인 해결책은 간단한 얇은 큐브 인 오프셋을 사용하는 것입니다. SSD에 대한 Warhammer 40k 프레젠테이션 을 참조하십시오. 또는 Bart Wronski의 게시물 은 데칼과 관련된 다른 문제를 해결하고 SSD에 대한 다른 프레젠테이션으로 연결됩니다.
렌더러에 따라 노이즈 유사 알고리즘을 사용하여 멀티 샘플링 깊이에서 최소 오프셋을 적용하여 표면을 "퍼지"로 만들 수 있습니다. 이렇게하면 깊이가 근접한 표면에 일종의 혼합 효과가 나타납니다. 내가 아는 것을 위해 조각 쉐이더에서 샘플 당 깊이를 설정하는 것은 OpenGL에서 매우 최근에 확장 된 것입니다.
OpenGL은 PolygonOffset을 가지고 있지만, 어떤 것을 동일 평면에 렌더링 할 것인지 미리 알고 있어야합니다. 단일 모델 내의 표면에는 적합하지 않지만, 예를 들어 토지에 겹쳐서 도로를 렌더링 할 때 유용하게 작동 할 수 있습니다.