스터디/Unreal Engine

언리얼엔진 PCG 연구_02 스플라인을 이용한 배치

석류! 2024. 8. 3. 02:44

 

 

 

Get Spline Data

 

Get Spline Data를 검색하여 꺼내준다.

 

이것도 이전의 Input 에서
Landscape 하이트값을 불러오는것처럼 

이번엔 씬에 배치된 Spline 데이터를 가져와서 이를토대로 배치해줄때 사용된다

 

 

 

여기서 우측 세팅에 들어가 Actor Filter ( 자손포함 ) 을 바꿔준다.

우리는 씬에 배치된 모든 액터들을 인식하고  불필요한것들을

Tag를 달아 분류해 줄 것이기 떄문에  모든 액터를 인식하도록 바꿔주고

태그이름을 좀있다가 사용할 이름으로 작성해주자.

 

 

 

 

스플라인 데이터를 뽑아오도록 했으니

사용할 스플라인 데이터를 만들어주도록 하자

 

우클릭 - 블루프린트 - 액터  를 생성한 후

뷰포트 - 추가 - spline component 을 만들어주자

 

 

 

아까 스플라인의 태그를 이용해 스플라인을 분류한다고 했었다.

스플라인을 인식해주기위해  스플라인 부모 선택  -  tag검색  태그추가  를 통해 태그를 넣어주고

아까 사용하기로 했던 태그 이름을 넣어주자

 

 

이걸 컨텐츠브라우저에서 뷰포트로 끌고오면 아까 만들었던 스플라인을 가져올 수 있다.

alt 좌클릭으로 더많은 포인트를 넣어줄 수 있고

Spline 디테일에 들어가 루프를 닫아줄 수도 있다.

 

 

 

Spline Sampler

 

데이터를 뽑아냈으니 이를 토대로 포인트를 배치할 때가 되었다.

Spline Sampler를 검색해서 꺼내주고 디버그D를 눌러 뷰포트에서 확인해보자

( 오른쪽처럼 끊기는 이유는 생성만 하고 아무것도 건들지 않았기때문 )

 

 

뷰포트까지 끌어오는데에 성공했으니

샘플러의 세팅에 대해서 알아보자

 

맨 처음 Dimension은

이 스플라인을 이용해 어떤 영역에 설치할 것인지를 정한다

 

Spline Sampler 설명

Dimension

Spline - 스플라인의 형태에 따라

 

 

 

Horizontal 과 vertical  -  수평 , 수직 에 따라

( 바깥부분만 선택가능 )

 

 

 

Volume - 스플라인의 부피에 따라

 

 

 

Interior - 영역 내부에 따라

 

 

 

 

Mode

Subdivision - 경계 세분화에 따라

 

 

 

Distance - 길이에 따라 

 

 

 

Spline Interior 영역 계산 & 노드

 

이번엔 Interior  내부영역을 통해 포인트를 배치해보려고 한다.

 

 

 

 

sampler에서 조금 내리다보면 그래프가 있는데

이를 통해 스플라인과 범위를 이용해 배치를 해줄 수 있다.

 

ctrl shift 우클릭   으로 그래프범위를 조절 가능하고

Shift 좌클릭으로 포인트를 넣어줄 수 있다.

 

 

 

다음과 같이 그래프를 넣었더니 스플라인쪽은 1 , 가장 안쪽이 0을 나타내는 것을 볼 수 있다.

 

이때 이 Density 값을 조절할 수 있는 기능들이 있는데

 

 

 

 

Density Remap

 

이전에 0~1까지 뽑은 데이터를 원하는 범위 내로 다시부여한다

 

0일때 0  1일떄 1 이였다면

 

0일때 1 , 1일때 0 으로 바꿀수도 있고

0일때 0.4 , 1일떄 0.7 로 되도록 바꿀수도 있다

 

 

Spline Interior 영역 거리 계산

 

 

 

위의 노드로 원하는 스플라인에서 멀어지는곳까지 데이터를 계산해 얻을 수 있었지만

그 범위가 어마무시하게 넓든 , 너무나도 작든

실제 크기를 계산하지 않고 현실성없이 0~1로 계산해준다는 점이 있다.

 

우린 이를 해결할 방법을 찾을것이다.

 

 

이번엔 아까만든 Sampler 노드를 복사해서

Interior 를 on Spline 으로 바꿔준다.

 

이를 통해 원하는 경계부분을 따낼 수 있다.

 

 

 

 

Distance 노드를 꺼내서

 

어디를 기준으로 거리를 계산할지  하는 타겟은 아래쪽으로

거리를 계산한걸 어떤 소스(범위)에 표현할지 하는 소스는 위쪽으로 연결해준다.

 

이제 계산한걸 Density 에 넣기위해  Set Density 또한 체크해준다.

 

 

이제 우측 Maximum Distance를 조절해 거리를 계산해주자

 

 

 

 

우린 이제 이걸 토대로

만약 저곳이 하나의 작은 식생들 지역이라면

 

가장 경계되는 부분에 가늘고 얇은 풀들을 랜덤하게 배치해 줄 수 있고

중심부가 되는곳에 사람의 손이 닿지않은 굵은 식생을 배치해 줄 수도 있다.

 

 

 

 

Spline Path 영역 교차

 

 

이번엔 길을 만들어주고 그 길 영역만큼

위의 영역에서 길 만큼을 빼줄것이다.

 

아까 만들었던 스플라인 ( 블루프린트 ) 를 똑같이 만들어서 (복사)  태그를 다른걸로 바꿔주자  ( Path_01)

 

 

 

똑같이 PCG에 넣어주고

Sampler에 Spline으로 연결해  라인을 추출해준다.

 

 

이제 Bounds Modifier 를 통해  길의 폭을 정해준다.

 

 

 

Difference 노드를 만들어

Source엔 영역 범위를 , Difference 에는 빼줄 경계를 넣어준다

 

그럼 위에 처럼 원래의 경계에서 길을 빼줄 수 있다.

이를통해 길목에만 식생을 줄인다던가

길목쪽 가운데에 마차 흔적 같은걸 남길 수 있을것이다.

 

 

 

테스트 용도로 제작한 PCG