TECHARTNOMAD | MAZELINE.TECH

TECH.ART.FLOW.IO

[번역] 5.7 ShortRangeAO

jplee 2026. 7. 16. 13:49

역자의 변: 프로토타입을 만들면서 제 전공분야와는 좀 거리가 있는 애니메이션 시스템 구현을 해야하는 관계로 따로 공부하느라 별도 연구하고 그럴 짬이 나지 않네요. 이번에도 역시 번역글로 왔습니다. ㅜㅜ


저자: 鸿蒙

요즘 틈틈이 5.7의 short range AO를 살펴봤는데, 5.7 AO에서 몇 가지 최적화된 부분을 발견했습니다. 5.5의 short range AO와 비교하면 5.7 버전의 short range AO는 효과가 좀 더 세밀하고 정확해졌습니다.

아래는 5.5와 5.7 버전의 short range AO 효과 비교입니다.

5.7의 AO 효과가 더 정확해졌고 전체적인 분포도 비교적 균일해진 것을 볼 수 있습니다. 구조 변화가 큰 일부 캐릭터에서 5.5 버전에 있었던 완전히 검게(dead black) 되는 문제도 해결되었고, 노이즈 문제도 눈에 띄게 개선되었습니다.

아래는 영상 비교입니다:

5.5의 short range AO는 변화가 격렬하고 노이즈가 뚜렷합니다.

이전에 캐릭터 담당 동료들이 캐릭터가 밝아졌다 어두워졌다 한다는 피드백을 자주 줬었는데, 루멘(Lumen)의 트레이스 문제 외에 이 AO도 사실 적지 않은 영향을 미쳤습니다.

5.7의 short range AO는 효과가 눈에 띄게 안정적이고, 디테일도 훨씬 섬세해져서 노이즈가 거의 보이지 않습니다.

5.5의 short range AO 원리에 대해서는 이전에도 분석한 적이 있으니 이전 글을 참고하시면 됩니다.

여기서는 이어서 5.7의 short range AO와 그 구현 원리를 좀 더 자세히 분석해보겠습니다:

전체적인 효과는 다음과 같습니다:

short range ao short range ao+material ao lightting

short range ao short range ao+material ao lightting

5.5(bent normal을 직접 출력)의 short range AO와 비교하면, 5.7의 short range AO는 AO 버퍼가 하나 더 추가되었고 다운샘플링된 노멀 및 뎁스 버퍼를 사용해 계산합니다.

구체적인 구현:

화면 공간(Screen Space) UV를 가져오고, 동시에 SceneDepth와 WorldNormal에 대해 다운샘플링을 수행합니다.

여기서 핵심은 HBAO와 비슷한 구현 프레임워크지만, HBAO의 구현 방식과는 다소 차이가 있고, 동시에 GTAO의 적분 계산 부분을 결합한 하이브리드 Lumen AO 알고리즘입니다.

주요 변수 파라미터로는 화면 공간 UV / NDC 공간 좌표(-1~1) / 근거리 오브젝트 제외 거리 / 뎁스 샘플링 두께 / View 공간 좌표 위치 / 카메라 벡터 / View 공간 노멀이 있습니다.

블루 노이즈를 생성하고, 이후 랜덤 슬라이스 샘플링 포인트에 랜덤 오프셋을 적용합니다.

여기가 HBAO의 핵심 부분으로, 자세한 내용은 Algorithm 1 논문을 참고하면 됩니다. 여러 개의 슬라이스로 나눠서 반구 샘플링을 수행합니다.

UE에서는 기본적으로 슬라이스 샘플링 수를 3개로 설정합니다:

r.Lumen.ScreenProbeGather.ShortRangeAO.HorizonSearch.SliceCount 2

주요 3단계로 나뉩니다:

  1. 슬라이스 방향을 계산하고, 블루 노이즈를 기반으로 랜덤 샘플링을 수행합니다.
  2. 투영 노멀을 계산합니다. 주로 노멀을 시선 방향에 수직인 평면에 투영하는 과정입니다.
  3. 노멀 각도를 계산합니다.

내부의 방사형(radial) 샘플링 거리는 가까운 곳일수록 샘플링 밀도가 높고, 먼 곳일수록 샘플링 밀도가 낮습니다.

동시에 화면의 양(+)/음(-) 방향 모두에 대해 샘플링을 수행합니다.

UE에서는 기본적으로 방사형 샘플링 수를 3으로 설정합니다:

r.Lumen.ScreenProbeGather.ShortRangeAO.HorizonSearch.StepsPerSlice 3

따라서 여기서 기본 슬라이스 샘플링 수는 (2+1) × (3+1) = 12회입니다 (인덱스는 0부터 시작).

오클루전(가림) 계산:

여기에는 두 가지 오클루전 계산 방식이 있습니다:

  1. HORIZON_SEARCH_VISIBILITY_BITMASK — 비트마스크 방식

  1. 지평선 추적(Horizon Tracing) 방식 (기본적으로 이 방식을 사용)

코사인 가중 적분으로 계산하며, 여기서는 노멀과 지평선 사이의 가시성(visibility)을 계산하는 데 사용됩니다.

Bent Normal 계산:

여기서는 Algorithm 논문을 참고했습니다.

전체 과정을 정리하면 다음과 같습니다:

  1. 슬라이스별로 반구 샘플링 수행

  1. 각 슬라이스마다 방사형 샘플링을 수행해 정확도를 높임

  1. 지평선 각도를 누적

  1. 가시성을 해석적으로 적분

  1. 모든 슬라이스 결과의 평균을 계산

헤어(hair) 복셀 트레이스를 지원하며 가시성을 계산합니다

short range GI 계산을 통합했으며, 동시에 Z 방향으로 너무 가까운 샘플링을 제외해 아티팩트 발생을 방지합니다.

lumen diffuse and ao pass:

최종 라이팅 계산 부분:

diffuse 부분에서는 AO Multi-bounce를 사용해 AO로 인한 완전한 암전(dead black) 문제를 줄였습니다.

소요 시간:

SliceCount가 2, Step이 3인 경우 소요 시간은 비교적 낮은 약 0.022ms로, 전체적인 비용은 꽤 합리적인 수준입니다.

대역폭 소모:

이 short range AO의 대역폭은 약 1.45MB입니다. 이 AO 버퍼가 R32 포맷이라는 점을 확인했는데, 사실 R8로 최적화할 수 있을 것으로 보입니다.

이 정도의 높은 정밀도는 필요하지 않을 것 같아서(테스트 필요) 이렇게 하면 대역폭을 4배 줄여 약 0.33MB로 만들 수 있습니다.

정리:

  1. Lumen short range AO = HBAO 프레임워크 + GTAO 정밀도

HBAO의 효율적인 슬라이스 샘플링을 유지

GTAO의 적분 해석 계산을 통합

  1. 더 높은 유연성:

AO, Bent Normal, GI 라이팅(직접광)을 각각 별도로 출력해 확장성이 더 뛰어나고 AO 효과가 더 정확함

더 이상 기존의 length(bentnormal) 방식의 단순한 계산이 아님

  1. 샘플링 최적화 및 헤어 지원

헤어를 통합하고 Z 방향 샘플링 컬링을 수행해 아티팩트 문제를 방지

  1. 성능 최적화 자유도:

샘플링 밀도를 자유롭게 설정 가능

오클루전 모드 선택 가능.


원문
(76 封私信 / 77 条消息) 5.7 ShortRangeAO - 知乎