새소식

인기 검색어

귀령단/개발노트

22년 11월 4일 개발노트

  • -

도입부 배경 열심히 제작 중.

동시에 어느정도의 최적화도 진행 중이다.

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부터 지원을 한다고 하니. 일단 대기한다.

 

휴.. 값진 시간이였습니다.

'귀령단 > 개발노트' 카테고리의 다른 글

22년 11월 8일 개발노트  (0) 2022.11.08
22년 11월 7일 개발노트  (0) 2022.11.07
22년 11월 3일 개발노트  (0) 2022.11.03
22년 11월 2일 개발노트  (0) 2022.11.02
22년 11월 1일 개발노트  (0) 2022.11.01
Contents

포스팅 주소를 복사했습니다

이 글이 도움이 되었다면 공감 부탁드립니다.