앰비언트 오클루전
앰비언트 오클루전 효과는 서로 인접한 주름, 구멍, 교차점, 표면을 실시간으로 어둡게 만듭니다. 현실에서 이러한 영역은 주변광을 가리거나 차단하기 때문에 실제로 더 어두워 보입니다.
URP는 스크린 공간 앰비언트 오클루전(SSAO) 효과를 렌더러 기능으로 구현합니다. 유니버설 렌더 파이프라인(URP)이 제공하는 모든 셰이더와 사용자가 생성한 모든 커스텀 불투명 셰이더 그래프에서 작동합니다.
참고: SSAO 효과는 렌더러 기능이며, URP에서 포스트 프로세싱 효과와 별개로 동작합니다. 이 효과는 볼륨에 의존하거나 볼륨과 상호작용하지 않습니다.
다음 이미지는 앰비언트 오클루전 효과가 비활성화 또는 활성화된 씬과 앰비언트 오클루전 텍스처만 있는 씬을 보여줍니다.
앰비언트 오클루전 효과가 꺼져 있는 씬.
앰비언트 오클루전 효과가 켜져 있는 씬.
앰비언트 오클루전 텍스처만 있는 씬.
렌더러에 SSAO 렌더러 기능 추가
URP는 앰비언트 오클루전 효과를 렌더러 기능으로 구현합니다.
프로젝트에서 SSAO 효과를 사용하려면 렌더러에 렌더러 기능을 추가하는 방법에 나와 있는 지침에 따라 스크린 공간 앰비언트 오클루전 렌더러 기능을 추가하십시오.
이렇게 하면 SSAO 렌더러 기능이 있는 렌더러를 사용하는 모든 카메라에 SSAO 효과가 적용됩니다.
프로퍼티
이 섹션에서는 SSAO 렌더러 기능의 프로퍼티에 대해 설명합니다.
메서드
이 프로퍼티는 SSAO 효과가 사용하는 노이즈의 타입을 정의합니다.
이용 가능한 옵션:
- Interleaved Gradient Noise: 인터리브드 그레디언트 노이즈를 사용하여 정적 SSAO를 생성합니다.
- Blue Noise: 특정 블루 노이즈 텍스처를 사용하여 동적 SSAO를 생성합니다. 그러면 프레임마다 텍스처가 변경되면서 애니메이션 효과를 생성하므로, 카메라가 움직일 때 SSAO 효과가 더욱 미묘해집니다.
성능 영향: 작음.
Intensity
이 프로퍼티는 어둡게 만드는 효과의 강도를 정의합니다.
성능 영향: 작음.
Radius
Unity가 앰비언트 오클루전 값을 계산할 때 SSAO는 현재 픽셀에서 이 반지름 내에 있는 노멀 텍스처 샘플을 사용합니다.
성능 영향: 높음.
Radius 값을 낮추면 성능이 개선되는데, 이는 SSAO 렌더러 기능이 소스 픽셀에 가까이 있는 픽셀을 샘플링하기 때문입니다. 따라서 캐싱 효율성이 향상됩니다.
카메라에 가까이 있는 오브젝트에 대한 앰비언트 오클루전 패스를 계산하는 것은 카메라에서 멀리 떨어져 있는 오브젝트에 대한 계산보다 시간이 더 오래 걸립니다. 이는 Radius 프로퍼티가 오브젝트와 함께 확대/축소되기 때문입니다.
감쇠 거리
SSAO는 카메라에서 이 거리 이상으로 떨어진 오브젝트에는 적용되지 않습니다.
값이 낮을수록 멀리 있는 오브젝트가 많이 포함된 씬에서 성능이 향상됩니다. 오브젝트 수가 적은 소규모 씬에서는 성능 개선 효과가 더 작습니다.
성능 영향: 애플리케이션에 따라 다름.
Direct Lighting Strength
이 프로퍼티는 직접 조명에 노출된 영역에서 효과가 보이는 정도를 정의합니다.
이 이미지는 SSAO 효과가 그림자에 있는지 여부에 따라 Direct Lighting Strength 값이 어떻게 달라지는지 보여줍니다.
Direct Lighting Strength: 0.2.
Direct Lighting Strength: 0.9.
A. 조명이 있는 영역에서 Direct Lighting Strength가 SSAO 효과에 미치는 영향을 보여줍니다.
B. 하나 이상의 그림자가 있는 영역에서 Direct Lighting Strength가 SSAO 효과에 미치는 영향을 보여줍니다.
성능 영향: 작음.
품질
Source
노멀 벡터 값의 소스를 선택합니다. SSAO 렌더러 기능은 노멀 벡터를 사용하여 표면의 각 점이 주변광에 노출되는 정도를 계산합니다.
이용 가능한 옵션:
- Depth Normals: SSAO가
DepthNormals
패스에서 생성된 노멀 텍스처를 사용합니다. 이 옵션을 사용하면 Unity가 더 정확한 노멀 텍스처를 사용할 수 있습니다. - Depth: SSAO가
DepthNormals
패스를 사용하여 노멀 텍스처를 생성하지 않습니다. 대신에 뎁스 텍스처를 사용하여 노멀 벡터를 재구성합니다. 커스텀 셰이더에서DepthNormals
패스 블록을 사용하지 않으려는 경우에만 이 옵션을 사용하십시오. 이 옵션을 선택하면 Normal Quality 프로퍼티가 활성화됩니다.
성능 영향: 애플리케이션에 따라 다름.
Depth Normals 및 Depth 옵션 간에 전환할 때 타겟 플랫폼과 애플리케이션에 따라 성능에 차이가 있을 수 있습니다. 광범위한 애플리케이션에서 그러한 성능 차이는 작습니다. 대개의 경우 Depth Normals이 시각적으로 더 나은 결과를 제공합니다.
Source 프로퍼티에 대한 자세한 내용은 구현 세부 정보 섹션을 참조하십시오.
Normal Quality
이 프로퍼티는 Source 프로퍼티에서 Depth 옵션을 선택하면 활성화됩니다.
노멀 벡터의 품질이 높을수록 SSAO 효과가 더 부드러워집니다.
이용 가능한 옵션:
- Low
- Medium
- High
성능 영향: 중간.
일부 시나리오에서 Depth 옵션은 Depth Normals 옵션에 상응하는 결과를 보여줍니다. 하지만 특정 경우에는 Depth Normals 옵션을 사용하면 품질이 크게 향상됩니다. 다음 이미지는 그러한 사례를 보여줍니다.
Source: Depth. Normal Quality: Low.
Source: Depth. Normal Quality: Medium.
Source: Depth. Normal Quality: High.
Source: Depth Normals.
자세한 내용은 구현 세부 정보 섹션을 참조하십시오.
Downsample
이 체크박스를 선택하면 앰비언트 오클루전 효과를 계산하는 패스의 해상도가 1/2 감소합니다.
앰비언트 오클루전 패스의 해상도를 1/2 줄이면 처리해야 할 픽셀 수가 1/4 감소합니다. 이렇게 하면 GPU에 대한 부하가 크게 줄지만 효과의 디테일이 감소합니다.
성능 영향: 매우 높음.
After Opaque
After Opaque를 활성화하면 Unity가 불투명 렌더 패스 이후에 SSAO 효과를 계산하여 적용합니다. 노멀 벡터 값의 Source로 Depth를 사용할 경우 성능이 향상될 수 있는데, 이는 Unity가 SSAO 계산을 위해 뎁스 프리패스를 건너뛰지 않고 기존 뎁스값을 사용하기 때문입니다.
After Opaque는 타일 기반 렌더링을 사용하는 모바일 디바이스에서 성능을 개선할 수도 있습니다.
성능 영향: 중간.
Blur Quality
이 프로퍼티는 Unity가 SSAO 효과에 적용하는 블러의 품질을 정의합니다. 블러 품질이 높을수록 효과의 부드러움과 정확도가 향상되지만, 더 많은 처리 능력이 필요합니다.
이용 가능한 옵션:
- High (대칭): 대칭 블러: 처리하는 데 세 개의 패스가 필요합니다.
- Medium (가우스): 가우스 블러: 처리하는 데 두 개의 패스가 필요합니다.
- Low (카와세): 카와세 블러: 처리하는 데 한 개의 패스가 필요합니다.
성능 영향: 매우 높음.
Samples
각 픽셀에 대해 SSAO 렌더러 기능은 지정된 반지름 내에서 특정 샘플 수를 사용하여 앰비언트 오클루전 값을 계산합니다. 값이 높을수록 효과의 부드러움과 디테일이 향상되지만, 성능은 저하됩니다.
이용 가능한 옵션:
- High: 12개 샘플
- Medium: 8개 샘플
- Low: 4개 샘플
성능 영향: 높음.
Sample Count 값을 4에서 8로 높이면 GPU에 대한 계산 부하가 두 배 증가합니다.
구현 세부 정보
SSAO 렌더러 기능은 노멀 벡터를 사용하여 표면의 각 점이 주변광에 노출되는 정도를 계산합니다.
URP 10.0는 현재 프레임에 대한 _CameraNormalsTexture
노멀 텍스처를 생성하는 DepthNormals
패스 블록을 구현합니다. 기본적으로 SSAO 렌더러 기능은 이 텍스처를 사용하여 앰비언트 오클루전 값을 계산합니다.
커스텀 SRP를 구현하거나 셰이더에 DepthNormals
패스 블록을 구현하고 싶지 않은 경우 SSAO 렌더러 기능을 사용하고 해당 Source 프로퍼티를 Depth로 변경할 수 있습니다. 이 경우 Unity는 DepthNormals
패스를 사용하여 노멀 벡터를 생성하지 않고, 대신에 뎁스 텍스처를 사용하여 노멀 벡터를 재구성합니다.
Source 프로퍼티에서 Depth 옵션을 선택하면 Normal Quality 프로퍼티가 활성화됩니다. 이 프로퍼티의 옵션(Low, Medium, High)은 뎁스 텍스처에서 노멀 벡터를 재구성할 때 Unity가 사용하는 뎁스 텍스처의 샘플 수를 결정합니다. 품질 수준당 샘플 수는 다음과 같습니다. Low: 1, Medium: 5, High: 9.