PCG(5) - 정글 바이옴 PCG 만들기
*언리얼엔진5를 배우는 과정을 기록하는 포스팅입니다.
아직 미숙하고 처음 글을 작성하는 만큼 미흡한 부분이 많은데 댓글로 피드백 부탁드립니다! 감사합니다.
https://www.youtube.com/watch?v=SCDZ8kobv1M&list=PLA03OHAaHgYpo0enf8p-2oEpja3grLOKZ&index=9
정글의 나무 바이옴, 강물 등을 표현한 PCG 이다.
강의 영상의 ~10:10 까지 해당 PCG의 역할을 보여준다.
Enable Tree/Rocks/Path 를 통해 나무 / 바위 / 길 을 나타낼 지 말지 고르고,
그 아래로 정글 바이옴의 주변 테두리 부근에 작은 식물, 큰 나무 주변의 작은 식물, 강가 주변의 식물, 바위 위의 식물 등을 나타낼 지 말지 선택하는 옵션을 설명해준다.
각 옵션을 키면서 전체적으로 메쉬들이 그려지는 모습을 보여준다.
*영상이 노드를 작성하며 같이 만들어나가는 강의 영상이 아닌,
만들어진 결과물을 토대로 설명을 하는 영상이기에
어느정도 참고는 하되, 영상에서 보여주는 결과물을 보고 목표로 만들어보았습니다.
더 효율적인 배치라던가 등이 있겠지만, 결과물은 유사하게 나올 수 있도록 목표하였습니다.
또한 적절한 에셋 부족 과 공부 목적 등의 이유로 세부적으로 설정하는 부분은 생략하였습니다.
실행영상:
https://www.youtube.com/watch?v=JREGlQrAR-0
단계 별 정리)
먼저 정글 바이옴이다.
PCG_Jungle 으로 생성이 되며,
해당 영역을 관리하는 액터는 BP_JungleBiome 이라는 Spline(Closed Loop) 을 컴퍼넌트로 갖는 클래스이다.
먼저 PCG_Jungle에 대한 부분인데,
PCG_Water와 PCG_Path로부터 각자 강과 산길의 Spline 크기에 맞게 Point를 반환하고 PCG_ForestData에 넣어줘서 해당 영역을 제외하는 역할을 한다.
각자 PCG_Water과 PCG_Path를 디버깅 한 결과이다.
PCG_Water에선 단순하게 자신의 영역을 출력하기만 하지만,
필요에 따라 주변 외각에 갈대나 조약돌 등을 스폰하면 좋을 것 같다.
다음으로 PCG_Path인데, 여기서는 PCG_Water과 다르게 반환하는것과 더불어 길가에 작은돌이나 그루터기 등을 만든다.
JunglePath라는 태그를 가진 Spline을 찾아서, 해당 Spline에 포인트를 만들고서,
Small Rocks / Large Tree Stump / Small Tree Stump 등을 생성하는 과정이고,
다음과 같이 포인트를 할당해서 만드는 과정은 여태까지 배웠던 것과 유사하다.
여기서 가장 핵심인 점이 Get Actor Property를 통해서 Density Of DetailPlants 라는 변수의 값을 가져와 Density Filter를 통해 포인트를 필터링 하는 부분인데,
Jungle Path를 보면 Enable Path Rocks // Enable Path Detail Plants 라는 bool 변수가 있다.
다음과 같이 Enable Path Rocks를 활성화시 돌이 그려지지만,
비활성화 시 돌과 그루터기가 사라지는 걸 볼 수 있다. (사실 분할해야 맞지만 공부단계라서 같은 변수를 활용했다.)
Get Actor Property를 보면 JunglePath 태그를 가진 액터의 Density Of Detail Plants 라는 변수의 값을 가져오는데,
BP_JunglePath의 Construction Script에서, Enable Path Rocks / Enable Path Detail Plants의 값을 조정하여 해당 변수 값을 바꾸고, 그에 맞게 Density Filter에 들어가도록 설정한 것이다.
다음으로 PCG_ForestData이다.
다음과 같이 BP_JungleBiome의 영역 내에서 강과 길 등의 영역을 제외한 부분의 Points를 만들어내는 과정이다.
(Difference를 사용하려 빼는 방법도 있지만 Distance를 활용하여 Density를 조정하고 Density Filter를 통해 조절하였다.)
이후 나온 부분에서 정글의 바위를 생성하거나,
그 외에서는
다음과 같이 외곽과의 거리를 계산하여 Density를 다르게 조정하고,
BPE_DistanceToHeight (Density To Height가 올바른 표현이긴 하다.) 라는 커스텀 노드를 통해 Density의 값을 기반으로 높이를 변경하고,
해당 포인트와 PCG_JungleRock으로 정글 바위가 만들어진 Point를 제외한 부분을 PCG_Trees에 넣어줘서 해당 부분에 나무들을 만든다.
그러고선 해당 위치를 기반으로 주변의 외각지로 갈수록 Density 값이 0.0에 가까운것을 활용해 주변 작은 식물들을 표현하였다.
전체적인 진행은 이렇게였으며,
사실상 여태까지 배운것들을 조합하여 활용하는 것이 끝이었다.
그렇기에 강의가 하나하나 설명해 주는 것이 아닌 만들어진 것을 설명하는 강의였어도 따라해볼만 했으며,
완성된 결과물만 보고서 따라 만들어보기 쉬울정도로 PCG는 아주 좋은 기술로 생각된다!