Android SDK 패스
Unreal Engine4.24
C:/AndroidSDK/bin/SDK
C:\Users\beyond\AppData\Local\Android\sdk\ndk\android-ndk-r14b
C:/Program Files/Java/jdk1.8.0_331
latest
latest
Unreal Engine4.26
C:/AndroidSDK/bin/SDK
C:/Users/beyond/AppData/Local/Android/sdk/ndk/android-ndk-r21e
C:/Program Files/Java/jdk1.8.0_331
latest
latest
Unreal Engine5 ?
C:/AndroidSDK/bin/SDK
C:/Users/beyond/AppData/Local/Android/sdk/ndk/25.1.8937393
C:/Program Files/Java/jdk1.8.0_331
latest
latest
Unreal 5.3 빌드 세팅
문제: 5.2에서는 빌드가 됬는데 5.3에서 안됨
해결: Edit- Project Settings - Android SDK에서 path 설정 바꿔줌
JDK 부분이 문제가 있어서 JDK-17 버전을 깔아준 뒤, 깔려져 있는 path로 재설정해줌
5.3
C:/Program Files/Java/jdk-17
참고: ndk버전은 건드리지 말고 25버전으로 하는게 맞음(ue5에서는)
5.2
Mobile HDR 왼쪽 눈 렌더링 안됨 해결
문제: Edit - Project Settings - Rendering - VR - Mobile HDR 체크를 하면 빌드해서 볼 때 왼쪽 눈이 안보임
해결: Anti-Aliasing을 MSAA에서 None이나 FXAA, TAA로 바꾸면 해결(참고: Forward, Deferred 모두 가능)
그렇다면 왜 MSAA랑 Mobile HDR이 호환이 안될까?
우선 Anti-Aliasing에서 MSAA에 대해 알아보자
Anti-Aliasing이란?
Aliasing은 렌더링된 오브젝트의 경계부분에 도트로된 계단이 눈에 띄는 현상인데, 이 현상의 원인은 삼각형을 픽셀로 전환(rasterization) 할 때 경계 부분을 채울지 말지 두 경우만 있기 때문에 발생함
어떤 말이냐면, rasterization에서 픽셀로 바꿔줄 때 어떤 부분을 픽셀로 바꿔줄것인가를 계산하는 것은 픽셀의 가운데 지점의 점이 삼각형 안에 들어가느냐, 안들어가느냐 하는 두가지 경우로 따진다는 것. 들어가면 픽셀 그리고, 안들어가면 픽셀 안그리고.
이렇게 안그리냐, 그리냐 선택지가 두개밖에 없기 때문에 필연적으로 계단 현상이 나타남
이를 해결하기 위한 방법이 Anti-Aliasing
Anti-Aliasing은 계단 현상을 없애는 기법을 총칭함
예전의 기법으로는 SSAA(Supersampling Anti Aliasing)을 사용했다.
SSAA- 원래 해상도보다 더 큰 해상도로 렌더링- 렌더링 된 영상을 작게 다운 샘플링- 큰 해상도로 렌더링할 때 매우 비용이 커지는 문제 발생
그래서 나오게 된게
MSAA(Multisample Anti-Aliasing)
-OpenGL에서 기본으로 제공하는 anti-aliasing 기법
- 한 픽셀이 삼각형 안에 들어갈지 말지를 픽셀의 중심 위치 하나가 아닌, 여러 위치에 대해서 조사하자(multi-sample) - 삼각형 안에 포함된 샘플의 개수에 따라 알파값을 조절하자!
MSAA(Multisample Anti-Aliasing)와 Mobile HDR(High Dynamic Range)이 VR 환경에서 호환이 잘 되지 않는 이유는 주로 이 두 기술이 그래픽 처리에서 사용하는 자원과 렌더링 방식의 차이에서 비롯된다.
MSAA가 리소스를 소모하는 이유
위에서 설명했듯 MSAA는 픽셀 단위가 아닌 서브 픽셀 단위에서 여러 샘플을 취하여 앨리어싱을 줄이기 때문에, 이 과정에서 각 픽셀마다 여러 샘플링을 통해 데이터를 수집하고, 이를 평균 내어 최종 색상을 결정한다. 이로 인해 렌더링에 필요한 계산과 메모리 사용량이 증가하게 된다.
예를 들어, 4x MSAA를 사용하면 각 픽셀에 대해 4개의 샘플을 처리해야 한다. 이 경우, 단순히 1x 샘플링에 비해 4배의 메모리와 계산 리소스가 필요하게 되고, 만약 8x MSAA를 사용한다면, 8배의 리소스가 필요하다(샘플 수 증가)
또한 각 샘플이 추가로 메모리에 저장되기 때문에, MSAA의 샘플 수가 증가할수록 렌더 타겟에 필요한 메모리 용량이 급격히 증가한다(메모리 사용량 증가)
VR 환경에서의 추가적인 리소스 요구
VR 환경에서는 일반적인 화면 렌더링과 달리 두 개의 독립적인 렌더 타겟(좌안과 우안)을 관리해야 함.
- 이중 렌더 타겟: VR에서는 좌안과 우안을 별도로 렌더링해야 하기 때문에, 모든 렌더링 작업이 두 번씩 수행됨. 따라서, MSAA를 사용하면 두 개의 렌더 타겟에 대해 샘플 수에 따른 메모리와 GPU 부하가 두 배로 증가하게 됨.
- 픽셀 밀도: VR에서 높은 해상도와 빠른 프레임 속도를 유지해야 하기 때문에, 각 눈에 대해 고해상도의 렌더 타겟을 유지해야 함. 이로 인해 MSAA가 적용되면 더 많은 메모리와 GPU 리소스가 필요함.
픽셀(Pixel)이란?
- **픽셀(Pixel)**은 "Picture Element"의 줄임말로, 디지털 이미지의 가장 작은 단위입니다. 화면의 각 픽셀은 특정한 색상 정보를 가지고 있습니다.
- 화면 해상도는 픽셀의 집합으로 구성되며, 예를 들어, 1920x1080 해상도라면, 가로 1920개의 픽셀과 세로 1080개의 픽셀이 모여 화면을 구성합니다.
서브픽셀(Subpixel)이란?
- **서브픽셀(Subpixel)**은 각 픽셀이 여러 개의 서브픽셀로 나뉘어 있는 구조를 말합니다. 일반적으로, 하나의 픽셀은 빨강(Red), 초록(Green), 파랑(Blue) 색상의 서브픽셀로 구성됩니다.
- 서브픽셀은 픽셀 내의 색상 정보를 세밀하게 조정하여 다양한 색상을 표현할 수 있게 합니다. 각각의 서브픽셀은 독립적으로 밝기를 조절할 수 있습니다.
MSAA의 서브픽셀 단위 작업
MSAA는 앤티앨리어싱 방법 중 하나로, 이미지의 경계 부분에서 앨리어싱(계단 현상)을 줄이기 위해 픽셀이 아닌 서브픽셀 단위에서 작동합니다.
- 기본적인 앤티앨리어싱:
가장 간단한 앤티앨리어싱 기법은 모든 픽셀의 색상을 동일하게 처리하는 방법입니다. 이 경우, 각 픽셀의 중앙에서만 샘플링을 하기 때문에 경계선이 매끄럽지 않고 계단 현상이 발생할 수 있습니다. - MSAA의 서브픽셀 샘플링:
MSAA는 각 픽셀의 내부에서 여러 서브픽셀에 대해 샘플링을 수행합니다. 예를 들어, 4x MSAA의 경우 하나의 픽셀 내에서 4개의 샘플을 채취하여 이들 평균을 내어 최종 색상을 결정합니다. 이러한 방식으로 픽셀 경계에서 발생하는 계단 현상을 줄일 수 있습니다.- 픽셀 중심 샘플링: 하나의 픽셀의 중앙에서 샘플링을 하여 색상을 결정하는 방식은 경계선에서 앨리어싱 문제를 일으킬 수 있습니다.
- 서브픽셀 샘플링: 픽셀의 중심이 아닌 여러 위치에서 색상을 샘플링하고, 이를 평균화하여 경계 부분을 부드럽게 표현할 수 있습니다. 이 과정이 서브픽셀 단위에서 이루어지며, 이는 더 세밀한 앤티앨리어싱 효과를 제공합니다.
서브픽셀 샘플링의 장점
- 정확한 경계선 처리: 서브픽셀 샘플링은 화면상의 오브젝트 경계 부분을 보다 정확하게 처리합니다. 서브픽셀마다 샘플링을 하여 더 많은 데이터를 기반으로 색상을 계산하기 때문에, 픽셀 간의 부드러운 전환이 가능해집니다.
- 효과적인 앤티앨리어싱: MSAA는 필요할 때만 서브픽셀 샘플링을 수행하므로, 전체 이미지에 적용하지 않아도 되는 상황에서는 불필요한 계산을 줄여 성능을 개선할 수 있습니다.
정리
MSAA는 주로 픽셀 샘플링을 기반으로 하는 기술입니다. 반면, HDR 렌더링은 픽셀당 색상 정보를 보다 정밀하게 관리하는 작업이 필요합니다. 이 두 기술이 함께 사용될 때, 특히 VR 환경에서는 두 기술이 충돌하거나, GPU 리소스가 과도하게 사용되어 하나의 눈에서만 렌더링이 정상적으로 이루어지지 않을 수 있습니다.
최적화 방안
- 샘플 수 조정: 성능 문제를 최소화하기 위해 MSAA의 샘플 수를 낮추는 방법이 있습니다. 예를 들어, 8x MSAA 대신 4x 또는 2x MSAA를 사용하는 것이 방법이 될 수 있습니다.
- 해상도 조정: 렌더 타겟의 해상도를 낮추는 것도 방법입니다. 이는 GPU가 처리해야 하는 픽셀 수를 줄여주기 때문에 성능을 개선할 수 있습니다.
- 다른 앤티앨리어싱 방법 사용: MSAA 대신 성능 요구가 덜한 FXAA 또는 TAA를 사용하는 방법도 고려할 수 있습니다. 이들 방법은 메모리 사용량이 낮고, 성능에 미치는 영향이 적습니다.
결론
MSAA는 VR 환경에서 앨리어싱을 줄이기 위한 강력한 기술이지만, 샘플 수에 따라 메모리와 GPU 부하가 급격히 증가합니다. VR에서는 각 눈에 대해 별도의 렌더 타겟을 관리해야 하므로, 이러한 리소스 요구가 배가되며, 이는 성능 저하와 메모리 부족 문제를 일으킬 수 있습니다. 이를 해결하기 위해 샘플 수를 줄이거나, 다른 앤티앨리어싱 기법을 사용하는 최적화가 필요합니다.
Unreal Engine 5에서 지원하는 Anti-Aliasing 방법들
Unreal Engine 5에서는 다양한 Anti-Aliasing 방법을 제공하며, 각각의 방법은 성능과 품질 측면에서 다르게 작동합니다. 아래는 이미지에서 보이는 Anti-Aliasing 방법들에 대한 설명입니다:
- None:
- 설명: Anti-Aliasing을 사용하지 않습니다. 가장 가벼운 옵션이지만, 계단 현상이 두드러질 수 있습니다.
- 성능: 최고 성능, 최저 품질.
- Fast Approximate Anti-Aliasing (FXAA):
- 설명: 화면 후처리 방식으로 이미지 전체에 대해 빠르게 Anti-Aliasing을 적용합니다. 고속 처리가 가능하며, 대부분의 기기에서 높은 성능을 보장합니다.
- 장점: 비교적 저사양 기기에서도 사용할 수 있으며 성능에 크게 영향을 미치지 않습니다.
- 단점: 이미지가 약간 흐릿하게 보일 수 있으며, 매우 선명한 엣지를 요구하는 환경에서는 품질이 떨어질 수 있습니다.
- 성능: 높은 성능, 중간 품질.
- Temporal Anti-Aliasing (TAA):
- 설명: 여러 프레임을 결합하여 이미지를 부드럽게 만듭니다. 화면 움직임에 대해 잘 반응하지만, 빠르게 움직이는 물체에서는 고스트 현상이 발생할 수 있습니다.
- 장점: 고정된 씬에서는 매우 우수한 품질을 제공하며, 고급 렌더링 기법과 잘 결합됩니다.
- 단점: 움직임이 많을 때는 고스트 현상이나 흐림 현상이 발생할 수 있습니다.
- 성능: 중간 성능, 높은 품질.
- Multisample Anti-Aliasing (MSAA):
- 설명: 각 픽셀의 서브픽셀을 독립적으로 샘플링하여 Anti-Aliasing을 수행합니다. 주로 3D 그래픽에서 사용되며, 특정 표면에만 적용할 수 있는 장점이 있습니다.
- 장점: 높은 이미지 품질을 제공하며, 텍스처와 텍스처의 경계에서 매우 선명한 결과를 얻을 수 있습니다.
- 단점: 성능 소모가 크며, 특히 VR 환경에서 성능에 큰 영향을 미칠 수 있습니다.
- 성능: 낮은 성능, 최고 품질.
각 Anti-Aliasing 방법의 사용 시기
- None: 성능이 최우선이고 Anti-Aliasing이 필요 없는 경우에 사용.
- FXAA: 성능이 중요한 모바일 또는 저사양 기기에서 적절한 품질을 유지하고 싶을 때 사용.
- TAA: 고사양의 환경이나 VR처럼 고해상도와 정밀도가 중요한 곳에서 사용. 다만 빠르게 움직이는 씬에서는 품질 저하를 감수해야 함.
- MSAA: 성능에 여유가 있고, 이미지의 선명도를 최우선으로 할 때 사용.
프레임 테스트
- VR Sample Map + Mobile HDR을 켰을 때
- Display Refresh Rate (디스플레이 리프레시 레이트):
- 디스플레이(헤드셋)가 1초에 몇 번 화면을 갱신하는지 나타냅니다.
- 예를 들어, 디스플레이 리프레시 레이트가 72Hz라면, 헤드셋은 1초에 72번 화면을 새로 고치는 것입니다.
- 이는 하드웨어의 성능에 따라 고정된 값으로, 일반적으로 60Hz, 72Hz, 90Hz, 120Hz 등이 있을 수 있습니다. 메타퀘스트2 같은 경우, 사용자가 설정에 따라 이 값을 변경할 수 있습니다.
- Perf VRC 1: Frame Rate (퍼포먼스 VRC 1: 프레임 레이트):
- 앱(게임 또는 애플리케이션)이 1초에 몇 개의 프레임을 실제로 렌더링하는지 보여줍니다.
- 이 값은 앱이 디스플레이의 리프레시 레이트와 얼마나 잘 맞추고 있는지 확인하는 데 사용됩니다.
- 예를 들어, 리프레시 레이트가 90Hz일 때 앱이 90프레임을 처리하고 있으면 퍼포먼스가 좋다고 할 수 있습니다. 하지만 앱이 45fps로만 렌더링하고 있다면, 최적의 성능을 내고 있지 못하다는 것을 의미합니다.
차이점:
- Display Refresh Rate는 하드웨어가 화면을 갱신하는 빈도입니다.
- Perf VRC 1: Frame Rate는 앱이 실제로 몇 프레임을 렌더링하고 있는지를 보여줍니다.
무엇을 봐야 하나요?
이 두 값이 서로 가까운 값이면 좋습니다. 이상적으로는 앱의 프레임 레이트(Perf VRC 1)가 디스플레이 리프레시 레이트와 동일해야 합니다. 예를 들어, 리프레시 레이트가 90Hz라면 앱이 90fps를 유지하는 것이 이상적입니다. 앱이 이보다 낮은 프레임 레이트를 보여줄 경우, 시각적으로 끊김이 느껴질 수 있고 VR 환경에서는 특히 멀미를 유발할 수 있습니다.
따라서:
- 디스플레이 리프레시 레이트는 현재 설정된 디스플레이의 주사율을 확인하는데 사용하세요.
- Perf VRC 1: Frame Rate는 앱이 그 주사율을 따라갈 수 있는지를 확인하는 데 사용하세요.
참고
'회사 TIL' 카테고리의 다른 글
DPVR - 언리얼 연결, PC 빌드 (0) | 2024.10.08 |
---|---|
텍스트 Parsing 하기 (0) | 2024.09.25 |
Client -> Server로 통신하려면 무조건 Player Controller 통해 가야 함 (0) | 2024.07.31 |
[Unreal] Delay vs Retriggerable Delay (0) | 2024.06.21 |
[Unreal] Widget과 Widget Component (0) | 2024.06.20 |
댓글