*언리얼엔진5를 배우는 과정을 기록하는 포스팅입니다.
아직 미숙하고 처음 글을 작성하는 만큼 미흡한 부분이 많은데 댓글로 피드백 부탁드립니다! 감사합니다.
https://www.youtube.com/watch?v=nq7aqU2F6mQ&list=PLA03OHAaHgYpo0enf8p-2oEpja3grLOKZ&index=6
여태까지는 PCG Graph/PCG Volume 들을 활용해 만들었다면,
이번엔 액터에 직접적으로 PCG Component를 추가해 작업한다.


PCG컴퍼넌트는 경계선에 대한 정보를 필요로 하기에 추가적인 요소들이 필요한데
Static Mesh / Box Collision 등 경계면이 있으면 되는 것 같다.
또한 한개가 아니라 여러개가 있어도 적용된다. (회전도 적용됨)


또한 Static Mesh에 대해서도 적용이 된다.
다음으로 액터의 변수 값을 파라미터로 PCG에서 활용하는 방법이다.

먼저 액터에 변수를 만들어주고


Get Actor Property 라는 노드가 있는데,
Property Name에 액터의 변수 (여기서는 만들었던 Scale이라는 정보) 를 받아올 수 있다.
Transform Points에 크기 값에 대한 입력이 가능하므로, 받아온 값을 넘겨주면



다음과 같이 값만 바꿨음에도 실시간으로 PCG의 정보가 바뀌는걸 확인할 수 있다.
(후에 게임의 기술로서 이런식으로 수치를 조절만 해도 맵이 바뀌도록 하는 툴을 만들어보려 했었는데 이걸 많이 사용할 것 같다.)
다음으로 Static Mesh에서 Point 를 만드는 과정이다.
https://www.youtube.com/watch?v=qKlWZjfkuRY&list=PLA03OHAaHgYpo0enf8p-2oEpja3grLOKZ&index=7
강의를 따라가면서, 5.2버전에선 다른 점이 꽤 있어 해당 영상의 댓글과 구글링을 통해 조사하였다.
먼저 static mesh의 vertex 의 위치 그대로 Point를 만드는 과정이다.

영상에서는 Mesh To Points를 사용했는데, 5.2버전부터는 Mesh Sampler라는 노드가 제공되었다.
(또한 Mesh To Points는 검색을 통해 찾을 수 없었다, Execute Blueprint를 통해 실행)
그리고 Mesh Sampler에 Static Mesh를 연결해주고 디버깅을 해보면,

다음과 같이 월드 위치에 있는게 아니라 Local 위치(0, 0, 0)에 있어 찾을 수 없었는데,
이에 대한 해결법으로는


Create Points 를 통해 Point를 하나 생성해주고



해당 위치로 Copy Points 를 활용해 위치를 복사해주는 것이다.
또한 Projection을 통해 생성된 Create Points를 Landscape에 잘 붙여준다.
그 후에 Static Mesh와 PCG의 위치를 같게 해주면,

이렇게 Static Mesh 로 부터 Point를 만들어진 것을 확인할 수 있다.
다음으로 Point가 너무 많아서 조절하려고 할 때, Mesh Sampler에서도 Voxelize 라는 옵션이 있었는데,
복셀화 의 경우에는 원하는 결과가 나오지 않아

Density 필터링을 통해 일부만 골라내 Remap으로 1.0의 값을 갖도록 조정했다.
이후 노말값과의 차이를 Density로 나타내주는 기능도 있는데,
Normal To Density 노드를 활용하면


이렇게 모두 하얀색이었던 Point들이
(디버깅을 위해 크기를 키운 상태)


큐브의 위치에 따라 Density값이 달라지는 걸 볼 수 있다.
Normal To Density 노드에는 Normal 입력값이 있어서, 해당 Normal과 차이나는 만큼 Density가 조정되는 것 같다.
당장에 드는 생각은 햇빛 위치와의 벡터를 계산하여 해당 Normal 정보에 알려주고, 햇빛의 반대되는 부분에 이끼라던가, 무언가 햇빛을 싫어하는 물체를 두도록 설정하면 좋지 않을까 싶어졌다.


최종적으로는 Filter 부분도 어느정도 바뀐 상태로 이러한 형태로 진행되었다.
Static Mesh Spawner의 결과로


이렇게 돌 위쪽 부분에만 풀이 생기게 할 수 있는것이다.
최종적으로 이것이 하나의 돌에서만이 아니라 여러 랜덤하게 놓여진 돌에서 적용 되어야 하므로
PCG의 노드는 이렇게 수정되었다.


(이미지에선 돌들의 위치에 대한 Point도 디버그 하여 저런 모습을 보이지만, 정상적으로 노드가 작성된 상태이다.)
Mesh Sampler를 통해 해당 메쉬를 기반으로 Point를 만들고, 그 Point들을 돌들이 생성될 위치에 모두 Copy Points를 한다.
(위쪽에서 이 과정을 공부할 때에는 한개의 Point를 생성해서 해당 위치로 Copy 했을 뿐이다.)
그러면 각 돌들의 위치에 해당 Point 들이 들어갔을 것이므로, 기존 진행했던 Density Filter 등을 통해 걸러내 Static Mesh Spawner를 통해 생성하면 모든 돌들에 대해 정상 작용 될것이다.

수치를 약간 더 조정하고, 더 현실적인 느낌으로 변경하면 이러한 느낌으로 생성할 수 있다.
'Unreal5 > 절차적 콘텐츠 생성(PCG)' 카테고리의 다른 글
| PCG(5) - 정글 바이옴 PCG 만들기 (0) | 2023.09.03 |
|---|---|
| PCG(5) - Custom Node (0) | 2023.08.31 |
| PCG(2) - Spline(숲 / 길) (0) | 2023.08.30 |
| PCG(1) - 시작 (0) | 2023.08.29 |
| UE5 PCG(Procedual Content Generation)란? (0) | 2023.08.25 |