환영합니다. 지난 강의에서 풀을 성공적으로 fade in(페이드 인)하였고 이를 위해 PerInstanceFadeAmount와
DitherTemporalAA를 사용했습니다. 그리고 동일한 방법을 사용하여 LOD간 전환에 도움을 주었습니다
지금 scene(씬) 즉, Landscape(Landscape(랜드스케이프))의 상태이며 Play(재생)을 선택하면 캐릭터를 조정할 수 있습니다
scene(씬)에서 뛰어 다닐 수 있으며 최종 결과가 상당히 만족스럽습니다
다음으로 추가하고 싶은 것은 나무입니다
먼저 나무에 대해 논의해보겠습니다
여기 BlackAlder 폴더로 이동합니다
Megascans(메가스캔) 나무들이고 static mesh(Static Mesh(스태틱 메시))를 필터합니다
나무를 열고 KiteDemo 폴더로 이동하여 Environments 폴더에 들어갑니다
그리고 Trees로 들어가고 Static Mesh(스태틱 메시)를 필터합니다
이 나무를 열어보겠습니다
여기서 비교를 해보겠습니다
이 나무의 LOD 0이고 triangle(트라이앵글) 숫자입니다
거의 60,000입니다
이것은 메가스캔 나무이고LOD 1에서 트라이앵글 숫자입니다
메가스캔 나무가 아주 멋진 것이 사실이지만 render(렌더링)하기 아주 비쌉니다
트라이앵글 숫자로 알 수 있습니다
따라서 성능이 우선이라면 이런 나무를 사용하는 것이 좋습니다
트라이앵글 숫자가 더 적고 load(로드)가 적습니다
LOD 3으로 가면 트라이앵글 숫자가 32밖에 없습니다
그러나 BlackAlder의 경우 즉, 메가스캔 나무는 LOD 종류가 이만큼 있습니다
LOD 3에서도 트라이앵글 숫자가 이 나무의 LOD 0 숫자만큼 있습니다
따라서 성능이 여러분의 첫 번째 우려라면
이런 나무를 사용하시는 것이 좋습니다
물론 나은 성능을 위해 메가스캔 나무의 로드를 제한할 수 있으나
의미가 무색해집니다
여기에서 저는 멋진 렌더링이 목적이므로 메가스캔 나무를 사용할 것입니다
나중에 scene(씬)에 추가할 때 성능에 큰 타격이 있을 것입니다
따라서 나무 수와 cull distance(컬 디스턴스)를 관리하는 것이 매우 중요합니다
LOD를 0으로 바꾸면 트라이앵글 숫자가 이렇게 변합니다. 아주 멋진
나무입니다
그러나 이렇게 트라이앵글 숫자가 높으면 성능이 많이 하락할 수 있습니다
원래 언리얼 엔진 5의 nanite(나나이트)가 이 문제를 해결해야 합니다. 나나이트 메시를 사용하면
scene(씬)에 수십억개의 트라이앵글이 있어도 작동 가능해야 합니다
그러나 현재 시점에서
지금 사용하는 엔진 버전은 5.0.3인데
나나이트가 아직 Foliage(폴리지)를 지원하지 않습니다
그리고 아직까지 언리얼 엔진 5가 Foliage(폴리지) 특히 나무에
잘 작동하지 않습니다
따라서 나중에 메가스캔 나무를 추가할 때 이상한 그림자 문제가 보일 것입니다
이런 문제가 발생하는 이유는 바람 효과를 얻기 위해
World Position Offset(월드 포지션 오프셋) 소켓에 데이터를 연결해야 하기 때문입니다
그러나 언리얼 엔진 5의 global illumination(글로벌 일루미네이션) 방법인 lumen(루멘)은 포지션 오프셋을
고려하지 않습니다
따라서 이런 이유로
이상한 그림자 문제가 발생하는 것입니다
기억하시겠지만 이 asset pack(에셋 팩)을 임포트했을 때
언리얼 엔진 5를 지원하지 않는다고 나와있었습니다. 다행히 나나이트 나무가 개발 중이고
5.1 버전에서 사용할 수 있을 확률이 아주 높습니다
나나이트 나무가 정식으로 발매되면 이 수업에 업데이트된 영상을 올리겠습니다
일단 scene(씬)에 나무를 추가하겠습니
방법은 동일합니다
나무 즉, Landscape(랜드스케이프) 풀 타입을 추가하기 위해 Material 폴더로 이동하고
메인 머티리얼 그래프로 이동합니다
Landscape(랜드스케이프) 풀 출력 노드가 위치한 곳으로 이동합니다
이 노드를 클릭합니다
여기 요소 추가 버튼이 있습니다
이 버튼을 클릭하면 Landscape(랜드스케이프) 풀 타입 출력에 인덱스가 추가됩니다
이 드롭 다운에 유형의 이름을 지정할 수 있고 여기에서 에셋을 선택할 수 있습니다
따라서 나무를 추가하기 위해 새로운 Landscape(랜드스케이프) 풀 타입 에셋을 만들면 됩니다
여기부터 풀와 동일하기 때문에 여러분이 알아서 하실 수 있을 것입니다
섹션 마지막 과제는 나무 생성을 위한 Landscape(랜드스케이프) 풀 타입 에셋을 만드는 것입니다
메가스캔 나무를 사용하고 싶으시면 밀도에 상당히 주의하셔야 합니다
밀도를 0.1로 설정하여 시작하시는 것이 좋습니다
필요에 따라 조금씩 올리시면 됩니다
그렇지 않으면 성능이 또는 컴퓨터가 바로 죽어버릴 수 있습니다
그러나 다른 에셋 팩의 나무를 사용하신다면 밀도를 조금 더 과감하게 사용하실 수 있습니다
다음으로 나무를 생성하기 위한 올바른 마스크를 만드는 것이며 나무를 위한 마스크를 따로
만들거나 풀을 생성할 떄 사용한 마스크를 사용하실 수 있습니다
마지막으로 자동 나무를 껐다 켤 수 있도록 스위치 파라미터를 만드셔야 합니다
풀 생성도 동일하게
껐다 켤수 있는 스위치 파라미터를 만들어 보시기 바랍니다. 이제 영상을 멈추시고 시도해 보시기 바랍니다
도움이 필요하면 돌아오시면 됩니다
다시 오신 것을 환영합니다
어떠셨나요? 이제 Landscape(랜드스케이프)에 나무가 생겼나요?
이제 제가 어떻게 하는지 보겠습니다
먼저 새로운 Landscape(랜드스케이프) 풀 타입 에셋을 만듭니다
새로운 폴더를 만들어주고
이름을 Trees라고 합니다
이 안에 새로운 Landscape(랜드스케이프) 풀 타입을 만들어줍니다
Foliage(폴리지)로 가서 새로 만들어줍니다
이름은 LGT_Trees로 하고 더블 클릭하여 열어줍니다
먼저 요소를 추가합니다
밀도를 0.1로 설정하고 메가스캔 나무 하나를 선택합니다
BlackAlder 폴더로 들어가 Static Mesh(스태틱 메시)를 필터합니다
저는 이것을 선택할 것이며 추가를 위해 이 화살표 버튼을 클릭하고 무작위성을 부여할 것입니다
0.7와 1.2 정도로 합니다. 컬 디스턴스를 줄입니다
저는 3000으로 시작하고 끝은 5000으로 설정합니다
최소 LOD는
1로 설정합니다
즉, 이런 유형의 에셋의 최소 LOD는 LOD 1입니다
좋습니다
지금까지 LGT_Trees 설정이었습니다
Material 폴더로 이동하여 나무를 생성하기 위해 동일한 마스크를
사용할 것입니다
이를 위해 이 결과를 cache(캐시)할 것입니다
이 노드들을 끌고 오고 Name Reroute 노드를 사용합니다. 이름은
CachedFoliageMask로 하고 이 캐시된 노드를 사용합니다
그리고 이 노드들을 끌고 나와 코멘트를 달아줍니다
좋습니다
그리고 이 노드들을 끌고 나와 두 번째 소켓의 이름을 Tree로 변경합니다
그리고 LGT_Trees 에셋을 선택합니다
스위치 파리미터를 또 생성하고 이름을 UsedAutoTrees로 하고
하고
Sort Priority(정렬 우선순위)를 5로 설정합니다
조건이 True인 경우 이 Foliage(폴리지) 마스크가 True 소켓을 통과합니다
조건이 False인 경우 False 소켓에 0이 통과합니다. 그런 다음 이 부분을 소켓에 연결합니다
이름은 Trees로 변경합니다
이제 Apply를 누르면 scene(씬)에 나무가 보일 것입니다
한 가지 더 있습니다
머티리얼 인스턴스의 파리미터를 선택해야 합니다
그래서 머티리얼 인스턴스로 돌아가서 UseAutoTrees를 체크합니다
이제 scene(씬)에 나무가 보이며 그러나 Frame Rate(프레임 레이트)를 보시면 상태가
매우 안 좋습니다
현재 20개 프레임 정도로 작동하고 있습니다
따라서 플레이 가능한 구역이라면 즉, 게임이라면 용납할 수 없는 수준입니다
성능에 큰 향상을 원한다면 Shadow Map(섀도 맵) 방법을 Virtual Shadow Map(버추얼 섀도 맵)에서
Shadow Maps(섀도 맵)으로 바꿀 수 있습니다
아니면 console command(콘솔 명령)을 사용할 수 있습니다. r.Shadow.Virtual.NonNanite을 검색하고
IncludeCoarsePages를 선택하고 0를 입력합니다
Enter키를 누르면 Frame Rate(프레임 레이트)가 약간 향상한 것이 보입니다
에디터를 다시 시작할 때 이 명령을 다시 입력하셔야 합니다
이를 하고 싶지 않다면 이 라인을 Config 폴더에 추가해야 합니다
따라서 프로젝트 파일 위치로 이동하여 Config 폴더를 열어서
DefaultEngine.ini를 열어줍니다
그리고 여기에 그 라인을 붙입니다
여기 '=0'을 추가합니다
이제 에디터를 시작할 때마다 이 콘솔 명령이 자동으로 작동할 것입니다
빠르게 실행해 보겠습니다
키포드에 물결(~) 키를 누르고 'r.Shadow.Virtual.Non'을 검색합니다
그리고 이 라인을 복사하고 여기에 붙입니다
이것이 작동하기 위해 에디터를 재실행해야 합니다. 이후에 이 콘솔 명령이 자동으로 작동할
것입니다
나무를 비활성화하면 Frame Rate(프레임 레이트)가 훨씬 개선될 것이며 저는 고급
PC를 사용하는 것이 아니고 좋은 그래픽 카드를 사용하는 것이 아니지만 여러분의 컴퓨터에는
훨씬 좋은 Frame Rate(프레임 레이트)가 나올 것입니다
이제 성능을 최적화하기 위한 방법들을 알고 나무를
추가하는 방법을 배우셨습니다
이제 나무를 다시 추가합니다. 이 메시지를 비활성화하고 재생 버튼을
누릅니다
꽤 만족스러운 것 같습니다
Frame Rate(프레임 레이트)에 큰 개선을 원한다면 버추얼 섀도 맵을 비활성화하거나
Lighting(라이팅) 방법을 backlighting(백Lighting(라이팅))으로 변경할 수 있습니다
일반적으로 큰 도움이 될 것입니다
이제 나무를 언리얼 엔진 4에 사용할 때 퍼포먼스 성능이 훨씬 좋을 것입니다
이번 강의에서 나무를 생성하기 위한 마스크를 사용했습니다. 아직 나나이트가 Foliage(폴리지)를
지원하지 않으므로
퍼포먼스 성능이 좋은 Foliage(폴리지)를 얻기 어렵습니다만
조만간 나나이트 나무가 발매되어
해결되기를 바랍니다. 그전까지 퍼포먼스를 개선하기 위해
트라이앵글 숫자가 적은 나무를 사용하거나 Landscape(랜드스케이프)에 나무를 아예 사용하지 않으면 됩니다
가장 중요한 점은 이제 다양한 Foliage(폴리지)를 Landscape(랜드스케이프)에 추가할 수 있게된 것입니다
고생하셨습니다
다음 강의에서 뵙겠습니다