GoogleVR 실전 사례

GoogleVR UE4 프로젝트를 최대한 활용하는 법에 관련된 정보입니다.

Choose your operating system:

Windows

macOS

Linux

가상 현실(VR) 프로젝트용 콘텐츠를 개발할 때, 사용자에게 최적의 VR 체험을 선사하기 위해 밟아야 하는 단계가 몇 가지 있습니다. 여기서는 GoogleVR 을 사용하여 프로젝트를 확인할 때 사용자에게 최적의 체험을 제공하기 위해 알아야 하는 모든 것들을 다뤄보겠습니다.

GoogleVR 렌더링 옵션

언리얼 엔진과 GoogleVR 이 만나면 매우 몰입도 높은 VR 체험을 만들어내는 것이 가능하지만, GoogleVR 의 하드웨어 제약으로 인해 언리얼 엔진이 낼 수 없는 렌더링 피처가 몇 가지 있습니다. 그 제약 중 다수는 모바일 디바이스 의 제약과 비슷합니다. 하지만 GoogleVR 고유 렌더링 요구사항으로 인해, 추가로 고려해야 할 사항이 몇 가지 있습니다. 여기서는 그 요구사항은 무엇이며 GoogleVR 프로젝트에 어떤 영향을 주는지 다뤄보겠습니다.

모노스코픽 파 필드

Monoscopic Far Field 모노스코픽 파 필드 렌더링(, 보다 정확하게는 하이브리드 모노스코픽 렌더링)은 언리얼 엔진 4 (UE4)로 제작중인 VR 모바일 어플리케이션에 쓸 수 있는 고급 렌더링 피처입니다. 일반적으로, 모노스코픽 파 필드 렌더링은 원거리 콘텐츠 양이 상당한 레벨의 퍼포먼스를 향상시켜줍니다. 그 이유는 원거리 오브젝트를 양쪽 눈에 한 번만 렌더링하기 때문입니다. 에픽의 관찰에 따르면, 원거리 오브젝트를 이런 식으로 렌더링하니 VR 모바일 어플리케이션 퍼포먼스가 크게 향상되었습니다.

모바일 HDR

Mobile HDR 은 GoogleVR 에 작동하지 않으니, 끈 채로 놔둬야 합니다.

포스트 프로세싱

GoogleVR 의 높은 렌더링 요구사항으로 인해, 다수의 포스트 프로세싱 피처는 아쉽게도 작동하지 않습니다. GoogleVR 에 작동하는 포스트 프로세스 피처 전체 목록은 아래와 같습니다.

포스트 프로세싱 섹션

피처 이름

설명

Auto Exposure 자동 노출

Exposure Bias 노출 편향치

씬 밝기를 높이거나 낮추는 데 사용할 수 있습니다.

머티리얼

GoogleVR 프로젝트용 머티리얼을 만들고 상호작용하는 것은 다른 프로젝트용 머티리얼을 만들고 상호작용하는 것과 매우 비슷합니다. 여전히 머티리얼 에디터를 사용하여 머티리얼을 만들고, 여전히 머티리얼 에디터에서 찾을 수 있는 머티리얼 노드 다수를 사용할 수 있습니다. 하지만 하드웨어에서 정상 작동하도록 하기 위해 GoogleVR 용 머티리얼을 만들 때 지켜야 하는 제약/고려사항이 몇 가지 있습니다.

머티리얼 입력 이름

설명

Base Color

베이스 컬러 - 머티리얼의 전반적인 색을 정의합니다.

Roughness

러프니스 - 머티리얼이 나타내는 전반적인 거친 또는 부드러운 정도를 정의합니다.

Metallic

메탈릭 - 머티리얼의 금속성을 정의합니다.

Specular

스페큘러 - 리플렉션의 세기, 즉 머티리얼의 광택 정도를 정의합니다.

Normal

노멀 - 표면에 디테일을 추가해 주며, 실제 모델링을 통해 표현했다면 비용이 매우 비쌀 것입니다. 노멀 맵이 있는 표면은 완전히 평평하거나 부드러워 보이지 않고 주름이나 굴곡진 것처럼 보이도록 만들 수 있습니다.

Emissive

이미시브 - 머티리얼의 일부분이 빛을 내는 것처럼 밝아 보이게 만드는 데 도움이 됩니다.

Opacity

오파시티 - 주어진 픽셀의 투명도를 정의하는 것으로, 0.0 - 1.0 값입니다.

Opacity Mask

오파시티 마스크 - 개별 픽셀의 완전 불투명 또는 완전 투명 상태를 설정할 수 있습니다.

유념할 점은, 반투명과 마스크드 머티리얼 양쪽 모두 렌더링 비용이, 스마트폰같은 하드웨어에서는 특히 비쌀 수 있습니다. 가급적 오파크 머티리얼 을 사용하는 것이 렌더링 비용이 훨씬 저렴하므로 좋습니다.

머티리얼 셰이딩 모델

하드웨어 제약으로 인해, GoogleVR 을 사용하는 프로젝트에서 사용할 수 있는 머티리얼 셰이딩 모델 은 다음과 같습니다.

셰이딩 모델 이름

설명

Default Lit

기본 라이팅 - 이름 그대로 기본 셰이딩 모델이며, 가장 자주 사용하게 될 모델입니다. 이 셰이딩 모델은 직사광과 간접광 뿐만 아니라 리플렉션에 스페큘러도 활용합니다.

Unlit

라이팅제외 - 컬러에 이미시브만 출력하여, 화염이나 발광 오브젝트같은 특수 효과에 좋습니다.

GoogleVR 프로젝트에서는 가급적 Unlit Shading Model 을 사용하는 것이 좋습니다. 비용이 가장 저렴하기 때문입니다.

머티리얼 블렌드 모드

Material Blend Mode 는 배경에 이미 그려진 것과 현재 머티리얼을 블렌딩하는 방식을 결정합니다. GoogleVR 용 콘텐츠를 만들 때 사용할 수 있는 머티리얼 블렌드 모드는 다음과 같습니다.

블렌드 모드

설명

Opaque

불투명 - 입체 오브젝트의 경우, 불투명 머티리얼이 가장 쌉니다. 하지만 이름에서 암시하듯, 투명도를 지원하지 않습니다. 절대 오버드로가 생기지 않으며, 머티리얼의 한 픽셀을 렌더링하는 데 노드 그래프 복잡도에 따라 항상 똑같은 시간이 걸린다는 뜻입니다.

Masked

마스크 - 머티리얼에 일부 픽셀을 그리지 않도록 할 필요가 있는 경우 사용합니다. 이 머티리얼은 마스크로 걸러내는 영역에 대해서만 오버드로가 발생합니다. 하지만 머티리얼이 그리는 각 픽셀은 100% 불투명이거나 100% 투명입니다. 마스크 적용 영역이 크면 클 수록 오버드로 발생량도 많아집니다.

Translucent

반투명 - 가장 비싼 블렌드 모드 입니다. 마스크 또는 불투명과 똑같아 보일 수 있지만, 실제 투명 여부와는 관계 없이 퍼포먼스에 추가적인 영향을 줍니다.

Additive

애디티브 - 반투명의 저렴한 버전입니다. 픽셀 소팅을 하지 않으며, 그냥 씬에 더하기만 합니다. 그때문에 애디티브 머티리얼은 커버된 픽셀을 밝게만 할 수 있습니다. 머티리얼의 검정 픽셀은 씬에 영향을 주지 않습니다.

Modulated

모듈레이트 - 반투명의 또다른 저렴한 버전으로, 씬의 기존 색에 세기를 곱합니다. 색이 0.0 - 1.0 범위로 매핑되므로, 모듈레이트 머티리얼은 씬을 어둡게만 할 수 있습니다. 이 머티리얼의 하양 픽셀은 씬에 영향을 주지 않습니다.

모듈레이트 블렌드 모드를 사용할 때는 머티리얼에 Separate Translucency (독립 반투명) 옵션을 끄지 않으면 머티리얼이 제대로 컴파일되지 않을 것입니다.

T_Separate_Trans.png

모바일 전용 머티리얼 세팅

메인 머티리얼 노드 디테일 패널에서 Mobile (모바일) 이라는 섹션을 찾을 수 있습니다. 여기 있는 세팅은 모바일 디바이스에서의 머티리얼 렌더링 비용을 절감하는 데 도움이 됩니다.

프로퍼티

설명

Fully Rough

최대 러프니스 - 켜면, 셰이더 ALU 인스트럭션 몇 개와 샘플러 하나를 절약합니다. 전반적인 반사 에너지를 유지하면서 실제적으로 스페큘러를 끄는 효과를 냅니다.

Use Lightmap Directionality

라이트맵 방향성 사용 - 끄면, 라이트 맵에서의 라이팅이 밋밋해지지만 비용이 저렴해집니다.

커스터마이즈드 UV

Customized UVs 는 특정 연산을 픽셀 셰이더가 아닌 버텍스 셰이더에서 하도록 하여 종속 텍스처 페치를 피하는 데 도움이 됩니다. 텍스터 타일링을 현재보다 많아 보이도록 하기 위한 UV 조작같은 단순 작업을 할 때 많이 필요한 퍼포먼스를 되찾는 데 아주 좋습니다. 가급적 모든 UV 조작 작업은 Customized UVs 를 활용하는 것이 좋으며, GoogleVR 용 콘텐츠를 개발할 때는 특히나 그렇습니다.

Customized UVs 는 현재 스태틱 메시, 스켈레탈 메시, BSP, 랜드스케이프, 메시 파티클과 같은 특정 컴포넌트 유형에 대해서만 구현되어 있습니다.

리플렉션

GoogleVR 은 스크린 스페이스 리플렉션(SSR)을 지원하지 않습니다. 즉 레벨에 배치된 리플렉션 캡처 액터 를 통해서만 리플렉션을 생성할 수 있다는 뜻입니다. 또한, 리플렉션 액터로부터 생성된 리플렉션은 하드웨어 제약으로 인해 충실도가 그리 높지 않다는 점 유념해 주시기 바랍니다.

GoogleVR & 콘텐츠 구성

GoogleVR 프로젝트용 아트 콘텐츠를 제작할 때, 프로젝트가 최대한 부드럽게 실행되도록 하기 위해 유념해야할 것들이 몇 가지 있습니다. 여기서는 GoogleVR 용 아트 콘텐츠를 제작할 때 고려해야할 것들을 살펴보겠습니다.

콘텐츠 하드웨어 제약

모바일 디바이스의 특정 하드웨어 제약으로 인해, 콘텐츠를 제작할 때 지켜야 하는 사항은 다음과 같습니다. 이 사항을 지키지 않으면 프로젝트가 정상 작동하지 않을 것입니다.

  • 모든 메시 유형의 최대 버텍스 수는 65,000 으로, 모바일 하드웨어에서 32 비트 인덱스가 지원되지 않기 때문입니다.

  • 스켈레탈 메시의 최대 본 수는 75 개입니다.

메시 고려사항

GoogleVR 프로젝트에 사용할 메시를 제작할 때는 다음과 같은 사항을 유념해야 GoogleVR 에서 정상 작동할 것입니다.

  • 3D 메시에는 머티리얼 ID 를 가급적 적게 사용해야 드로 콜을 줄일 수 있습니다.

  • 가급적 스태틱 메시 LOD 를 사용하도록 하세요.

  • 3D 메시 폴리콘 수를 주의깊에 보면서 가급적 로우 폴리 를 유지하도록 하세요.

  • 모든 스태틱 모델에 이차 UV 세트를 준비하여 라이트 매핑 을 활용하도록 하세요.

  • 가급적 렌더링 비용이 훨씬 싼 임포스터 스프라이트 를 활용하여 멀리 있는 스태틱 메시를 대체하도록 하세요.

텍스처 고려사항

GoogleVR 프로젝트에 사용할 텍스처를 만들 때 프로젝트의 전반적인 퍼포먼스를 갉아먹지 않도록 하려면 다음과 같은 정보를 염두에 두어야 합니다.

  • 텍스처 크기는 X 든 Y 든 2048 픽셀을 넘을 수 없습니다.

  • 텍스처 크기는 어느 한 축이든 2 제곱 크기여야 합니다. 예를 들어 이미지 폭이 128 픽셀이든 256 픽셀이든 괜찮지만, 129 는 안됩니다.

  • GoogleVR 에서 메모리에 로드할 수 있는 텍스처 최대 량은 512 MB 지만, 언제든 메모리에 로드된 텍스처 크기는 128 MB 를 넘지 않도록 하는 것이 좋습니다.

  • 가급적 정사각 (1024x1024 픽셀처럼 폭과 높이가 같은) 텍스처를 사용하세요. 메모리 사용 효율이 좋습니다.

  • 텍스처의 메모리 필요량을 줄이기 위해 가급적 텍스처 아틀라싱 을 활용하도록 하세요.

  • RGB 텍스처 마스킹 / 패킹 은 메모리의 고유 텍스처 수를 줄이는 데 뛰어난 방법입니다.

  • TC_Default TC_NormalMap 압축 세팅만 사용해야 합니다. 모바일 플랫폼에서 작동되는 것은 이 둘 뿐입니다.

레벨 고려사항

GoogleVR 에서 레벨의 퍼포먼스를 최대한 뽑아내는 것은 미묘한 밸런싱 작업이라 제대로 하는 데는 시간을 들여야 합니다. 퍼포먼스 이슈가 생길 수 있는 레벨 영역을 빠르게 알아내는 데 도움이 될 수 있는 제안사항은 다음과 같습니다:

  • 레벨의 라이팅 빌드 상황을 유지하여 최적의 퍼포먼스를 내도록 하세요. 에디터에서 빨강 "Lighting needs to be rebuilt" 오류 메시지를 통해 라이팅 빌드를 해야 할 시점을 알려줍니다.

  • 레벨의 모든 라이트가 스태틱 으로 설정되어 있는지 확인합니다. 다른 라이팅 옵션은 렌더링 비용이 비쌀 수 있습니다.

  • 레벨에서 프리컴퓨티드 비저빌리티 를 활용하는지, 아니면 레벨에 하나 추가하고 라이팅을 리빌드하여 레벨의 월드 세팅에서 활성화시킵니다.

  • 전체 씬의 드로 콜은 어떤 뷰에서는 100 을 넘어서는 안됩니다. 디바이스에서 stat openglrhi 명령으로, PC 의 ES2 프리뷰어에서 stat d3d11rhi 명령으로 확인할 수 있습니다.

  • 레벨의 총 트라이앵글 수는 어떤 뷰에서는 100,000 을 넘어서는 안됩니다. 디바이스에서 stat openglrhi , PC 의 ES2 프리뷰어에서 stat d3d11rhi 명령으로 확인할 수 있습니다.

  • 레벨에 반투명 및 오파시티 마스크 머티리얼을 사용할 때는 비용이 비쌀 수 있으니 조심하세요.

  • 레벨의 퍼포먼스 프로파일 을 자주 돌려 퍼포먼스 이슈를 제때 잡아낼 수 있도록 하세요.

언리얼 엔진 문서의 미래를 함께 만들어주세요! 더 나은 서비스를 제공할 수 있도록 문서 사용에 대한 피드백을 주세요.
설문조사에 참여해 주세요
취소