최근 내 SSAO 구현을 위해 노력 중이며, 앞으로 엔진과 지연 렌더러에 대한 지원을 추가하고 싶습니다. 따라서 깊이 전용 접근 방식을 사용하고 심도 맵에서 일반을 재구성합니다. 코드는 다음과 같습니다. 가장자리에 인공물이없는 깊이에서 법선을 재구성하는 방법은 무엇입니까?
//Restore view space position with non-linear depth
vec3 viewPos = getPosition(uv, depth, invProjMat);
//Restore view space normal
vec3 normal = normalize(cross(dFdx(viewPos), dFdy(viewPos)));
가 그럼 난 내 SSAO 구현에이 정상을 적용, 그것은 가장자리를 제외하고, 대부분 아주 좋은 결과를 얻을 :
을 내가 그 가장자리에 있기 때문에 불연속 정상 확실 해요 , 그러나 나는 그것을 고치는 방법을 모른다. 깊이에서 정상을 재구성 할 때 가장자리에 인공물을 피하는 방법이 있습니까? 고마워.
올바른 방법은 법선을 gbuffer로 렌더링하는 것입니다. 깊이 만 있으면 절대로 가장자리에서 잘 할 수 없습니다. 어떤 추론을 할 수는 있지만 항상 옳은 것은 아닙니다. 객체 uid를 렌더링하더라도 1 픽셀 너비의 선이 끊어집니다. 정말로 이것을하고 싶다면, dFd * 대신에 깊이에 기초한 필터를 만드십시오. dFdx (pos) 대신 값 (pos-1) - 값 (pos + 1)을 사용할 수 있습니다. 그리고 두 값이 너무 멀리 떨어져 있으면 다른 일을하는 필터를 만듭니다. 그러나 다시 예를 들어 하나의 픽셀을 음영 처리하면이 작업이 실패합니다. – starmole
@starmole : 왜 대답이되지 않습니까? –