VR컨텐츠 2

m._.jooong·2023년 4월 20일
0

VR

목록 보기
1/1

안녕하세요. 이번주제는 저번글과 이어서 개발기술에대한 팁을 이어서 소개해보겠습니다.
이번에는 최적화에대해 써볼까하는데 사실 VR컨텐츠라고해서 따로 최적화기술이 있는것은 아닙니다.
그러나 VR개발초보자거나 학생분들을위해 몇가지 소개해보겠습니다.

게임의 최적화기술을 한장의글로 서술하기엔 말도안되지만 범용적이고 적용하기쉬운 또 VR에서 효과적인 부분들을 추려서 소개해보겠습니다. 이미 최적화에대한 기본기와 게임개발의 노하우가 있으신분들은 너무쉬운 내용일수 있기때문에 굳이 보지않으셔도 됩니다.

마찬가지로 이번글역시 단순한 팁 그이상그이하도 아니므로 본인의 컨텐츠에 필요한 부분만 습득하시길 바랍니다.

=======================================================================================

개발기술편-2

  1. 90프레임의 중요성

VR게임은 PC의 하드웨어성능을 공유하더라도 일반적인 게임렌더링보다 당연하게도 더높은 자원을 소비합니다. 왜냐하면
헤드트래킹을 이용한 양안에 렌더링을 해야하기때문에 두배또는 그이상의 자원이 요구되기 때문입니다.
따라서 일반 PC나 콘솔처럼 개발한다면 VR플레이를 눌렀을때 프레임이 곤두박질치는 낭패를 볼수있습니다.
또한 VR개발시 가장힘든부분이 90프레임을 유지하는것입니다.
90프레임이란 수치는 일반적인 VR기기에서 낼수있는 가장높은 프레임입니다. 만약 이수치보다 프레임이 저하된다면 플레이어의 멀미와 눈의피로도가 현저하게 올라가서 컨텐츠가 망하기 가장쉬운 길입니다.
그렇기때문에 90프레임을 유지하는것이 VR컨텐츠의 가장기본이고 멀미를 줄이는 최고의방법입니다.
VR에선 아무리 컨텐츠를 멋지고 화려하게 만들어봤자 프레임이 안나오는 순간 그것은 멀미유발제일 뿐입니다.

  1. 게임도중 로딩은 최악의수. 프리(pre)로딩의 중요성

앞서말했듯이 프레임간의 간격과 딜레이 괴리감이 멀미와 몰입도에 엄청난 영향을 줍니다. 일반적인 게임은 '디스플레이'라는 공간안에서 벌어지는 가상세계라는것을 플레이어가 인지하고 게임을 진행합니다.
그러나 VR은 인지조화가 현실세계처럼 일어나는 공간이라 인간의 지각이 가상세계임을 인지하기 어렵습니다. 따라서 내가인지하고있는 시각의 간극이 현실세계와다르게 끊기거나 딜레이가 발생한다면 그순간 멀미가 발생하고 몰입도가 깨져버립니다. 따라서 맵을 이동하거나 대량의 오브젝트가 스폰됬을때 등등 발생하는 로딩의 순간들이 일반적인 컨텐츠에서는 당연할수있지만 VR컨텐츠에서는 매우 금기시되는 일입니다.

따라서 레벨스트리밍이나 오픈레벨같은 함수들을 사용하는것은 굉장히 위험한 일입니다. 일반적인 게임의 대표적 최적화 기술인 레벨스트리밍 조차 잠깐의 화면끊김시간을 유발할수 있습니다. 특히 오픈레벨은 정말 긴시간의 로딩을 유발할수도있습니다. 그렇다면 이런것들을 어떻게 극복할수 있을까?

1) 오픈레벨을 최소화, 비밀의방을 만들자.

비밀의방이란 단어는 약간의 은어인데 제가 회사에서 개발하던시절 쓰던 용어입니다.
일반적인 게임의 진행은 [메뉴창,설정,난이도......등등 UI셋팅레벨] - [게임진행레벨] 이런식으로 구성됩니다.
이때 두개의 레벨로 나뉘어져있기때문에 레벨간 이동을할때 로딩시간이 발생합니다.

VR에선 로딩시간이 발생되면 안되기때문에 이러한것들을 하나의 레벨안에 전부 구성합니다. 그러면 한레벨안에 많은 로딩이 발생하기 때문에 시작이 오래 걸릴수는 있지만 도중에 끊기는 현상은 막을수있습니다.

쉽게말하면 처음시작할때 대부분의 로딩을 시키고 플레이도중에는 로딩을최소화 하는것입니다. 그렇기에 처음게임을 시작할때 등장하는 셋팅화면,메뉴화면등을 같은레벨안의 다른 '비밀의방'을 만들어둔뒤 진행합니다.
그렇게되면 이미 로딩된 게임공간으로 이동시간을 최소화 시킬 수 있습니다.

이런식으로 게임의 처음 시작뿐만이아니라 인게임도중 장소나 환경을 바꿀일이 있다면 다음과 같은 방법을 사용하는것이 효휼적일 수 있습니다.

2) 화면전환시 자연스러운 트랜지션효과는 필수.

아무리 프리로딩을 해서 진행한다해도 순식간에 주변환경이바뀌는 것은 멀미를 유발할수 있습니다.
따라서 화면을 전환할때는 적절한 효과가 필수입니다. 진행상황에 따라 일반적으로 쓰이는 블랙아웃이나 화이트아웃 또는 디졸브 같은 효과로 최대한 자연스럽게 화면을 전환해야 멀미를 최소화 할 수 있습니다.

  1. 쉐이더는최대한 간단하게.

VR에선 화질이 그렇게 좋지않습니다. 모니터와는 다르게 받아들이는 시각정보가 뚜렷하게 보이지않기때문에
셰이더에 너무 집착할필요가없습니다. 셰이더는 최대한 간단하게 해야하며 화려한 PBR메터리얼을 만드는것은 자칫하면 낭비일수도 있습니다. 간단한 텍스쳐 몇장으로 좋은 퀄리티를 뽑아야합니다.
특히나 복잡한 수식으로 구현한 셰이더는 쓸데없는 낭비일뿐입니다. 왠만하면 최종 텍스쳐를 베이크해서 수식을줄이고 최적화하는것이 좋습니다. 절대로 언리얼예제에있는 파티클이펙트 예제나 다른 예제의 엄청난 셰이더를 VR에 적용하려고하지마세요. 용도가 분명히 다릅니다!
또한 구매한 에셋들을 이주시키는 경우가 많이 있는데 대부분 VR에 최적화된 에셋들이아닌경우가 다반사입니다. 반드시 프로젝트에 맞춰서 한번더 최적화를 하고 이주해야합니다.

4.동적라이트는 심사숙고 해야한다.

프로젝트가 정말정말 가볍지않은이상 동적라이트는 매우 위험할수있습니다. 사실 최적화부분에서 초보자가 가장 하기 쉽고 효과적인것이 스태틱라이트로 전환하는것입니다. 물론 다이나믹섀도우는 기대하기어렵지만 페이크섀도우를 최대한 활용하여 섀도우를 동적으로 그려주는것이 좋습니다. 물론 최적화에 굉장한 자신이 있다면 다이나믹라이트도 도전해볼만하지만 그렇지않고 시간적,인적 자원이 부족하다면 스태틱라이트는 최선의 선택일것입니다.

5.BP or C++?

다들아시겠지만 성능이야 cpp 를 BP가 이길수가 없습니다. 그러나 VR게임의 특성을 생각해보면 때론 BP로 만드는것이 더 효휼적일수 있습니다. 대부분 VR게임이 MMO처럼 대규모 멀티플레잉을 요구하거나 큰데이터를 처리하는 컨텐츠는 많이없습니다. 간단한 체험물이거나 싱글게임처럼 복잡한 알고리즘을 사용할 일이 거의없는 컨텐츠들도 많습니다. 물론 시간이 충분하고 인적자원도 충분하다면 CPP로 짜는게 백번천번 좋지만 그렇지않고 1회성컨텐츠거나 사후관리가 거의필요없거나 패치등도 할일이 거의없다면 BP를 많이 활용하는것이 좋을수도있습니다.
BP의 가장큰 장점은 제작속도입니다. 사실 규모가 작은 프로젝트는 BP로 짜던 CPP로짜던 성능차이가 매우 적을수있습니다. 그렇기에 BP로 빠르게 시스템설계를하고 그래픽쪽 최적화에 투자하는것이 훨씬 효휼적인경우가 많이있습니다. 이것은 설계부분에서 결정해야할 문제기때문에 프로그래머는 프로젝트의 규모와 시스템을 시작단계에서 잘계획하여 제작한다면 시간을 굉장히 아낄수 있습니다.
때론 작은프로젝트에선 알고리즘이나 코드로 최적화하기보단 폴리곤수 한개라도 더 줄이는게 효과적일수 있기 때문입니다.

6.90프레임의 틈을 노려보자

가장 처음에 강조했지만 VR게임에서 90프레임이 얼마나 중요한지에대해 말씀드렸습니다.
그러나 90프레임을 무조건 유지하지않아도 되는경우가 있는데 아무것도 움직이지 않을때입니다.
특히 UI만 보고있을때나 영상같은것을 보고있을때는 움직임이 없기때문에 90프레임 이하로 떨어져도 크게상관이 없습니다. 90프레임이 정안된다면 이러한 부분들은 포기하고 넘어가도 크게상관없습니다.

  1. 렌더타겟은 정말 무겁다.

거울을 만들거나 CCTV등 어떤 특정장면을 보여줘야할때 쓰이는 렌더타겟은 정말정말 무겁습니다. 따라서 어떤 장면을 보여줘야할 상황이온다면 그냥 영상으로 녹화한다음 미디어컨텐츠로 영상으로 보여주는것이 훨씬더 가볍습니다.

  1. 대표적으로 무거워서 쓰기어려운것들.

위에 언급한것 이외에 테셀레이션,데칼,모든종류의 블러(PP의 뎁스오브필드 포함)
파티클안에 라이트(진짜 무겁다), 많은수의 파티클 이펙트(파티클은 최소화해야한다) -> 특히 파티클은 에셋구매할경우가많은데 에셋들은 멋있게 보이게 하기위해 라이트모듈을 넣은경우가많다. 반드시 체크해보자!
[출처][효율적인 VR컨텐츠 개발하기] [개발기술편-2] (언리얼 엔진 공식 카페 (Unreal Engine)) | 작성자 포인팅

0개의 댓글