공부/Unreal Engine

[Unreal5] 언리얼에서 PCG를 활용한 아파트 단지 만들기 -1

굴러다니다니 2023. 11. 30. 17:28
728x90

https://www.youtube.com/watch?v=Rknnu16mrOw

1시간 21분짜리 유튜브,,, 두 번 다시는 풀로 안들을거 같아서 정리하는 용도

 

위에 강의를 끝까지 따라해서 아래와 같은 결과를 얻었다 / 한국식으로 수정

언리얼에서 기본 제공되는 400 * 300짜리 벽 두개를 꺼내주고 모델링 모드의 XForm > Merge로 합쳐주자

합쳐진 애를 Mesh > Union으로 한 번 더 합쳐준다. 

콘텐츠 브라우저에 Contents > _GENERATED > 유저이름 > 저장되어 있는 Combined 어쩌구를 이름을 보기쉽게 바꿔주고 폴더정리도 하자~

 

블루프린트 클래스 > 액터로 하나 생성 이름은 BP_Buildings

이 친구는 어마무시한 기능을 하게 될 것이다...

추가로 PCG Graph도 PCG_Buildings로 만들어주자

 

BP_Buildings 블루프린트 창에 들어가서 PCG Volume 생성, Graph도 연결

블루프린트를 에디터창에 배치도 해주셈

 

현재 블루프린트를 배치한 곳의 한 점을 받기위해 Get Actor Data를 만들어 세팅은 Mode를 Get Single Point로 바꿔준다.

이 점을 중심으로 네가지 귀퉁이를 만들거기 때문에 Transform Points로 각각 (4000, 0) (4000, 4000) (0, 4000) 에 해당되게 Max offset과 Min offset을 바꿔주자. (임시로 이렇게 잡음)

이 네 점들을 하나로 합쳐주기 위해 Merge 노드 연결

 

 

Merge에서 Create Spline으로 연결해 닫힌 루프랑 선형을 모두 켜준다.

Debug 노드를 만들어서 가끔 디버그 찍는거 보다 눈으로 확인할거다.

선형 체크 안하면 2번째 사진

체크하면 3번째 사진처럼 각지게 된다

 

Spline Sampler랑 이어주고 설정으로 Mode를 Distance로, 거리 간격은 벽 크기만큼인 400으로, Unbounded는 true 설정해서 Debug 찍어주고 Static Mesh Sampler랑 연결해서 Wall_Window_400*300을 스폰하면 (모든 Static Mesh Spawner는 collision을 NoCollision으로 설정할거다)

짜잔 창문이 가득한 벽 생성

 

아까 합친 점들에서 Static Mesh Spawner를 연결해 새로 만든 코너 벽들을 넣어주면 오른쪽처럼 코너가 삐꾸로 만들어진다. rotation 값 설정을 안해줬기 때문이라

앞부분에서 4가지 점 만들었던거를 3번째 사진처럼 4개로 따로 만들어주고

각각 Rotation Min과 Max의 z값을 위에부터 90, 180. 270, 0으로 세팅한다

 

멀쩡해 보이지만 코너 부분은 창문있는 벽이랑 코너 벽이 중첩돼서 생성되어있어 이를 제거해줘야한다.

 

코너부분 point의 범위를 넓히고 겹치는 부분은 Difference로 제거하려 한다.

Bounds Modifier의 세팅을 Mode: Set, BoundsMin: (-50, -101, -50), BoundsMax:(50, -1, 50)으로 바꾸고 Difference의 Density Function을 Binary로 바꾸면 포인트가 겹치는 부분은 Spawn이 안된다.

Bounds Modifier의 범위는 사실 저대로 안해도 되고 적당히 point가 겹치게끔만 수정하면 된다.

한 층 생성 완료

 

이제 이 한층을 블루프린트 액터로부터 설정한 높이까지 반복하게 만들거다.

get actor data로 받은 점을 Transfrom Points로 z값을 임의로 3000까지 설정했다. (offset max, min 둘 다) 그리고 둘을 Merge로 합치면 제일 바닥, 제일 꼭대기 까지 두개의 점이 생성된다. (Debug로 찍으면 저리 보임)

 

얘한테 다시 Create Spline으로 선을 만들고 Spline Sampler로 Point를 찍어준다.

Create Spline은 Linear만 체크하고, Spline Sampler는 Distance로 높이가 300마다 찍어주게 하자. Unbounded도 체크.

 

만든 Spline Sampler에 Copy Points를 Target 부분에 넣어주고 Source 부분엔 Difference에서 나온 결과물을 넣어준다. (자동으로 To Point 노드 생김)

이 얘기는 위에처럼 높이마다 하나씩 만든 포인트마다 벽을 생성하는 포인트를 만든다는 얘기이다.

또 이어서 Spline Sampler를 타겟으로 Copy Points를 하나 더 만들어 Source를 위에 꼭짓점을 만든 Static Mesh Spawner와 연결되어 있던 Merge 노드의 output을 이어준다.

 

만들어진 Static Mesh Sampler와의 연결을 Copy Points로 이어주면 Spline Sampler에서의 Rotation들 값이 다 제각각 이기 때문에 이상하게 나오니 Transfrom Points와 잇고 Transform Points의 Absolute Rotation을 켜준다.

뚜껑없는 아파트 생성 완

근데 얘가 actor 중심이랑 이상하다. 이를 맞춰준다.

 

 

Get Actor Point랑 이어져있던 네 점을 끊고 Create Points로 새로 점을 만들거다.

Point Creation Method를 From Single Point로 설정을 바꾸고, Cull Points Outside Volume을 꺼준다. (Volume 영역 밖이면 만들지 않기로 체크한걸 꺼줘서 밖이어도 생성되게) 그다음에 Transform Points랑 이어주면

오른쪽처럼 딱 맞게 만들어진다.

바닥들도 만들어주자

 

벽 세울때 쓴 Create Spline을 새로 Spline Sampler랑 이어주고 Dimension을 On Interior로 만들고, Unbounded 체크, Interior Sample Spacing을 400으로 체크한다. (바닥 기본이 400*400이라) Treat Spline as Polyline true로 체크한다. 

Copy Points의 Source 부분으로 이어주고 Static Mesh Spawner와 연결, Floor 400*400으로 스폰.

Target은 아까 세로로 총총 나눈 Transform Points랑 연결

아파트긴 한데 틈이 생겼다... 해결 기기

 

Create Points Grid를 만들고 오른쪽과 같이 설정해서 Copy Points의 Source에 얘로 연결해주면 된다.

(Cell size는 얘가 400*400 바닥이라, Grid Extents는 설정한 4000의 절반인 2000으로 Grid Center Position은 대충 때려맞춤. Cull Points Outside Volume 꺼주자 (아래에 Spline Sampler 삭제해도됨)

뚜껑없는 아파트가 생성됐다..

 

옛날옛적 Get Actor Data에서 3000 더했던 Transform Points를 한 번 더 Transform Points로 z축 300으로 더 높여주고

Copy Points로 위에처럼 이어주면 뚜껑 생김!

(안보이면 확대해서 보기)

근데 뚜껑이 벽이랑 겹쳐서 지지직 거림

 

그래서 Transform Points로 z축 5쯤 올려주면 되는데, Copy Points뒤에 추가하셈. 이 유튜버분은 변화를 원해서 5~25 사이의 값으로 정해지게 한다고 함.

그리고 대충 오른쪽처럼 C로 코멘트 만들어서 나눠줌

위에부터 Floor Grid, Floor, Four Corners, Ceiling, Walls, Stories, Coners 라고 하심. 나는 한국어로 알아서 바꿨삼

 

여기까지 했다면 지붕이 울퉁불퉁한 아파트 한 채를 얻었을거다. 여기까지 정리!

참고로 난 벽 생성하는 Spawner에서 창문 없는 벽도 넣어서 더 다양해 보이게 만들었다. (오른쪽)

728x90