석류 작업노트

언리얼엔진 PCG에 대한 연구_01 기초 에셋 배치와 랜덤위치값 본문

스터디/Unreal Engine

언리얼엔진 PCG에 대한 연구_01 기초 에셋 배치와 랜덤위치값

석류! 2024. 4. 13. 19:55

우선적으로 PCG에 대한 플러그인을 켜줘야한다

플러그인 창에 들어가서 PCG를 검색하고 뜨는 모든것들을 체크 후 재시작해주자

 

 

그럼 이제 콘텐츠 브라우저에서 우클릭을 하면
PCG / PCG그래프  라는 항목이 생성된 것을 알 수 있다. 

 

 

처음 생성한 PCG의 화면이다.

블루프린트와도 상당히 닮아있다.

 

여기서 보통 머테리얼이나 블루프린트에 익숙하다면
Input의 In 과 Output의 Out 과 연결해 주려고 할것이다.

 

다만 우리가 하려는것은 랜드스케이프에 따라 자동배치를 해주려 하는 것이기에

In과 연결하는 것이 아닌 Landscape와 연결해준다

 

 

여기서 연결해줄때 머테리얼이나 블루프린트를 할 때와 마찬가지로

Alt로 끊고 Shift로 옮겨줄 수 있다

다만 여기서 특이사항은 Shift

 

 

여기서 Landscape 와 Landscape Height 의 차이점은

 

Landscape에 연결하면 랜드스케이프와 바라보는 방향까지 맞추어 배치가 되고

Landscape Height에 연결하면 랜드스케이프의 바라보는 방향값과 상관없이 하이트만 참조한다.

 

바닥에 딱 달라붙어 배치되는 돌 , 나뭇가지 같은 프랍들은 Landscape 에 적합하고

하늘을 바라보는 식생들 같은 경우엔 Landscape Height에 사용하기 적합하다.

 

 

 

이제 차이점을 알았으니 한번 포인트들을 배치해보자

위에 Height를 설명하면서 넣어뒀던 Surfae Sampler를 소환해 연결해보고
PCG를 끌어다가 맵에 배치해보자

앞으로 작업을 하면서 Sampler라는 친구를 정말 많이 사용하게 될 것이다.

그러나 배치까지 해줬는데 뷰포트에서 확인해보면 그 어떤것도 보이지가 않는다.  왜일까?

 

이제 PCG에서 외워야 할 것들이 있다.

바로 디버그( D ) / 검사( A ) / 활성화( E )  이다.

 

우린 여기서 Sampler를 통해 포인트를 임의로 배치를 해줬다.

그러나 PCG를 쓸 때 오브젝트를 배치시키는 것이 아닌

Sampler를 통해 포인트를 배치하고 그 위치값에 맞추어 에셋을 설치하는 방식을 따른다.

 

후디니를 해봤다면 익숙할텐데 

CopyToPoint 방식에서 우리는 뿌려질 포인트만 배치하고 에셋을 설치를 안한거니 안보이는게 당연하다

다만 이를 포인트값 , 회전값 , 스케일값에 비례해 확인해 볼 수 있는 기능이 있는데

이게 디버그 ( D ) 키다

 

 

디버그 키를 사용하면 위 이미지처럼 파란 포인트가 노드위에 표시되고 

임의의 값으로 배치되어 있는것을 확인할 수 있다

 

 

https://dev.epicgames.com/documentation/ko-kr/unreal-engine/procedural-content-generation-framework-node-reference-in-unreal-engine

여기서 Surface Sampler에서 파라미터를 통해 포인트를 어떻게 배치할 지에 대해 수정할 수 있는데

 

 

Points Per Square Meter - 제곱미터당 포인트 로써 유지되는 셀의 비율을 계산합니다. 밀도를 조절해줍니다.

Point Extents - 포인트 크기 로 배치되는 포인트의 스케일을 정할 수 있습니다

Looseness - 변형가능한 셀 크기 로써 포인트 간의 거리조절 을 할때 사용합니다. ( 실제 셀 크기는 포인트규모 *( 1+Looseness값 ) 으로 계산됩니다.

 

 

이제 여기에 설치된 포인트들을 확인했는데

이 포인트에 대한 수치값 하나하나를 후디니처럼 확인을 해 줄 수 있는 기능이 있다

여기서 우리는 검사 ( A ) 라는것을 사용할 텐데

먼저 확인하고싶은 노드의 검사 를 켜주고 상단에서 현재의 PCG를 선택해 주면 확인이 가능하다.

 

 

후디니에서 보았던 지오메트리 스프레드시트 랑 유사하다는 것을 확인할 수 있다.

우린 후디니에서 보통 Attribute Wrangle을 통해 변수를 넣어주곤 했는데

PCG에선 이를 Density값을 주로 수정하여 사용해준다.

 

 

 

 

 

마지막으로 활성화 ( E ) 인데

배치한 것들을 잠시 몇개만 확인을 한다던가 끄고킬때 빠르게 사용할 수 있다.

 

여기서 우리가 주로 디버그D 와 활성화E를 많이 사용하게 될 것이다.

 

 

 

 

이제 우리는 위에 대충 뿌려둔 포인트 위에 에셋들을 배치해 볼 것이다.

Sampler 옆에 Static Mesh Spawner 를 만들어주자

위에서 말했던 copy to point 를 언리얼스럽게 꾸며둔 느낌이라 생각하면 편하다

 

 

만들어주고 에셋을 만들고 싶다면 메시항목을 추가해주자

이제 메쉬를 넣을 수 있는 항목이 생겼다.

저 위치에 메쉬를 넣어주어 사용할 수 있고 그 아래로 내리면 우리가 

메쉬를 편집하고 설정해 줄 때 사용했던 것들이 있어 그대로 사용하면된다!

이게 후디니로 배치할 때 보다 이 기능이 언리얼 자체에 있으니 좀더 편리하게 사용할 수 있어 더 좋을것같다

 

 

여기서 추가적으로 메쉬를 배치하고싶다면 항목 수를 더 늘려주면 되는데

여기서 우리는 각 에셋마다 배치되는 비율을 설정 할 수 있다

 

우측처럼 2개의 메쉬를 만들어 가중치가 똑같이 1 로 되어 배치를 한다고 치자

그럼 둘이 합해서 총 가중치가 2가되고 각각 비율로 따지면 1/2 , 1/2 로 50%가 되어 균등하게 배치될것이다.

 

 

 

그럼 만약 다음처럼 가중치를 1 / 19 으로 에셋을 배치했다고 치면

총 가중치를 합치면 20 , 각각 비율로 따져보면   1/20 , 19/20 으로  각각 5% / 95% 만큼 배치되는 것을 알 수 있다

여기에 총 배치된 포인트(메쉬) 의 수는 143개니까 비중에 맞춰 배치된 것을 알 수 있다.

 

 

그럼 여기에 배치된 것들을 그냥 이상태로 쓰진 않을것이다

여기서 각 포인트마다 크기가 다르고 조금씩 옆으로 틀어지거나 각도가 다르고 스케일값에 변화를 주기도 할 것이다

 

이제 스태틱 메쉬 스포너 앞에 Transform Points 를 생성해주자

그럼 포인트마다 랜덤으로 값을 수정해 줄 수 있다

언리얼에서 이펙트를 만들때와 비슷하게 Offset / Rotation / Scale 을 수정해 줄 수 있다. 

차례로 X , Y , Z 고  Min~Max 값 사이로 랜덤값을 부여해 줄 수 있다

그렇게 원하는대로 값을 수정해주면

 

 

다음처럼 원하는 대로 랜덤값을 넣어 줄 수도 있다

 

앞으로 PCG를 다루게 되면서 에셋을 배치할 때는 위 기능들을 가장 많이 사용하게 될 것이다.