
이전 포스팅에서는 Hole Filling-> Temporal에 대해서 다루었다.
하지만, 문제가 발생했던 것을 볼 수 있었을 것이다.
이번 포스팅에서는 문제가 발생한 원인과 적용 순서를 달리 했을 때 잘 동작하는 이유에 대해 알아보았다.
일단 Temporal 셰이더는 DepthTex를 총 8개를 활용하여 값을 받아온다.
반면, Hole Filling의 결과값은 하나이다.
즉, Temporal Filter가 여러 프레임의 데이터를 사용해 깊이 값을 안정화하는 반면, Hole Filling Filter는 단일 프레임만을 처리하기 때문에, 데이터 구조의 차이로 인해 전달 방식에 문제가 발생할 수 있다.
8개의
_DepthTex텍스처를 사용해 여러 프레임의 깊이 값을 결합하여 필터링을 수행한다.
이 방식은 값 전달 시 각 프레임의 깊이 값을 별도로 관리해야 한다.
따라서 필터가 8개의 텍스처를 사용하므로 깊이 정보의 업데이트와 접근 방식이 다소 복잡해진다.
_MainTex라는 단일 텍스처에 의존하여 한 프레임의 깊이 값을 참조하고
결손된 픽셀을 주변 값으로 채워 넣는다. 이 필터는 특정 시점의 단일 프레임만을 처리하므로
다수의 프레임을 고려할 필요가 없으며 Temporal Filter의 다중 텍스처 구조와는 큰 차이가 있다.
따라서, 필터마다 필요한 데이터 구조가 다르기 때문에 필터링 순서가 서로 다를 때 값 전달이 다르게 동작하게 된다.
Temporal Filter가 여러 텍스처로 프레임을 쌓아두면, 그 상태에서는 Hole Filling Filter가 단일 텍스처의 값을 참조하는 방식과 맞지 않게 되어 데이터 불일치가 발생할 수 있다는 것이다.
Temporal Filter가 먼저 데이터를 안정화하고, 잡음을 줄인 후
Hole Filling Filter가 결손 픽셀만 보완하는 방식으로 작동하기 때문이다.
그래서 결과는 다음과 같이 나온다.
