도입부 배경 열심히 제작 중.
동시에 어느정도의 최적화도 진행 중이다.
Youtube에는 정말 주옥같은 정보들이 많다.
물론, 그 정보들을 잘 활용할 줄 아는 것은, 필요한 것만 가져다 쓰는 것은 분명 쓰는 사람의 능력이다.
이번에는 정보글 위주로 남겨야할 내용들이 많은데
우선은 환경구성에 관한 글부터 남겨보고자 한다.
1. Sky Atmosphere 과 Volumetric Cloud는 필요시 안쓸 수 있다.
- 언리얼 5 언저리로 넘어오면서 추가된 기능이 Sky Atmosphere과 Volumetric Cloud.
- 실로 어마어마한 기능이다. Sun light와 연동시켜주면 Sun light의 위치에 따라 대기가 알맞게 변화하고
- 이는 실제로 Skylight로 캡쳐가 가능해서 Skylight로 활용할 수 있다.
- Volumetric Cloud는 이전 언리얼에서 제공하는 Fake방식이 아닌, Volumetric 방식으로서,
태양과 대기의 빛에 알맞게 반응을 한다.
- 사실 안쓸래야 안쓸 수 없는 기능인 것이다.
- 하지만 밤이라는 그 얘기는 달라진다.
- 우선 밤은, 언리얼에서 PBR을 적용한 상태로 적용하는 것이 쉽지 않다.
- 아니, 적용할 수는 없지만 매우매우 밋밋하다.
- 적당한 그림자가 표현되어야 비쥬얼적으로 훨씬 나아지기 때문이 아닐까? 결국 Directional Light는 조절을 해야한다.
- 하지만 이렇게 만지다보면 결국 Sky Atmosphere과 Volumetric Cloud에게도 영향을 준다. 그리고 이 두 시스템은
- 저절로 알맞는 lighting을 계산하고 Casting하게 되는데, 이는 전체적인 이미지를 Flat하게 만든다.
- 이것저것 테스트해봤는데, 이 두가지 시스템을 쓰면서 내가 원하는 느낌을 갖는 것은 어렵다고 판단
노출체크용 4가지 ball들을 잘 쓰고있습니다. 앗 여기선 플랫하게 보이는 군..
- 내가 원하는 느낌 : 그림자가 어느정도 명확하게 구별되고, Volumetric light가 달빛으로 인해 비춰지며, 파란Fog가 어울리는 밤.
- 결국 구식방법인 BP_Skysphere을 활용해서 밤환경을 설치했다.
- Skylight로 어느정도 Indirect light는 넣어줘야 검은 부분이 좀 살아난다. 나같은경우는 Default cube map을 살짝 넣었다.
2. Foliage의 최적화에 관하여.
어제 조심스럽게 나무 몇개를 설치해봤는데 프레임이 눈에 띄게 줄어들었다. 몇 그루 심지도 않았는데;
퍼포먼스 저하의 이유는 분명 이 Foliage 이놈들이 분명했다.
야외 Scene이다보니 나무들을 정말 많이 배치해야하는데 벌써부터 삐걱거리면 안되지.
우선 간략하게나마 이 친구들을 최적화할 수 있는 방법들을 알아봤다.
우선 지난번 언리얼 5.1로 Nanite 테스트를 해봤는데, 어쩌면 이번 연구는 거기의 연장선일지도 모르겠다.
1. 그림자
- 그림자가 문제다 그림자!!
- 그림자가 왜 문제일까?
- 일단 5.0 Lumen을 활용하기 위해서 사용되는 Shadow Method는
이 Virtual Shadow Maps이다. 결국 Lumen+Nanite를 잘 활용하기 위해서는 이 시스템을 적용해야하는데..
베타버전이다. 그만큼 문제가 많다는 거겠지.
- Foliage의 그림자가 유별나게 문제가 있는 것은 바로 Foliage만의 지랄맞은 특성때문이다.
1.)특성1. Masked Material - 그렇다. 나무는 계산하기 까다로운 알파맵을 사용한다.
2.)특성2. World Position Offset - 나무는 가만히 있지 않는다. 쉐이더의 명령을통해 움직인다.
- 움직인다는 것은, 그 움직이는 그림자(그것도 Masked material을 쓰는 풀잎들)를 일일히 계산을 해줘서 반영을 해줘야한다는 것이다. 생각만 해도 무겁다.
- 이러한 특성은 Visualize가 가능하다. (Visualize - virtual shadow map - cached page)
이렇게 그림자가 복잡하게 구현되는 부분은 빨갛게 나온다.
이 부분을 최소화 해주면, 프레임이 많이 올라간다.
2. 그렇다면 어떻게 그림자를 최적화 합니까?
- 방법이 여러 가지가 있다.
- 우선 Virtual Shadow map을 안쓰고 이전 shadowmask 방식을 써도 된다.
- 하지만 나는 Lumen과 Nanite를 계속 쓸 것이기 때문에 VSM을 써야함.
- LOD를 활용할 수 있다. 특정 LOD 단계에서 Shadow를 Cast하지 않게 설정을 해주는 방법이 있다.
저걸 해제해주세요.
- 나는 바닥의 풀은 그림자가 그닥 필요하지 않다고 판단이되어, LOD2부터는 그림자를 꺼주었다.
- 하지만 제일 문제되는 것은 결국 나무들인데.
- 이에 관해 좀더 찾아보던중, 개발자들도 고민을 다들 하는 모양인지 상당히 흥미로운 접근법을 알아냈다.
- 두가지 버전의 Foliage를 조합하는 방식인데, 한번 테스트해볼 수 있을 것 같다.
- 한 가지 버전은 Shadow Cast하지 않는다. 하지만 움직인다.
- 두 번째 버전은 같은 나무인데, 움직이지 않는다. 하지만 Shadow는 Cast 한다. (저렴한 버전의 Shadow)
- 이 두가지 버전을 합쳐준다. 두번째 버전은 그림자만 Cast하고 메시자체는 보여주지 않는다.
- 어려운 이론은 아니다. 다만, 5.1부터 지원을하고 사실 Nanite를 사용하면 더 효과가 좋을 것 같아서
- 일단은 오피셜 언리얼 5.1 버전이 릴리즈 될 때 까지 기다릴 예정.
- 이외에, 최적화에 도움이 될 만한 관련 Command를 활용해봤다. 프레임이 한 20정도 향상됬다. voila!
- 프레임이 향상된 반면에, 비쥬얼적 결과는 큰 타격이 없었다.
- Level blueprint를 통해 저렇게 커맨드를 연결해놓은 이유는, 플레이할때 저 커맨드가 실행되어야하기 때문이다.
(엔진 껏다키면 초기화됌)
- 이 외에는 단순한 최적화 기법으로도 알고있는 fog를 활용하여 멀리있는 친구들을 Culling 시켜버리거나. 뭐 그런 방법들이다.
- 100프레임을 목표로 계속 최적화 해볼 예정.
3. Landscape 최적화에 관하여.
- Landscape또한 5.1부터 Nanite를 지원하고, 특히 HLOD를 활용하면 그 퍼포먼스를 향상시킬 수 있을 듯하다.
- 하지만 이 또한 5.1부터 지원을 한다고 하니. 일단 대기한다.
휴.. 값진 시간이였습니다.