공부/Unreal Engine

[Unreal5] 언리얼의 PCG로 정신없는 책상 의자 만들기 (술판)

굴러다니다니 2023. 11. 24. 14:35
728x90

지난번에 만들어두었던 마을의 귀퉁이에 주점같은 곳을 만들거다.

여유가 된다면 앞부분 내용 나중에 추가하겠다.... 으아

 

spline을 이용해 대충 구역을 지정해 둔 뒤, 디테일 창에서 닫힌 루프 true처리 해주자.

+ 태그 달아두기

 

그다음 pcg graph로 이어온다.

 

get spline data에서 태그로 spline을 찾고 Spline Sampler에서 이를 받아와 적당한 배열과 크기로 지정해주자.

뒤쪽에서 겹치는 부분은 제거할거라 bound를 크게 잡았다.

 

머머리

근데 나무랑 뭐시기들 때문에 하나도 안보이니

이전에 만들어둔 Tree spawner와 Grass Spawner에서 Difference의 Differences로 연결해 없애주자

 

전 -> 후

그냥 static mesh spawner로 이어주면 왼쪽처럼 너무 오와열을 맞췄으니 Transform Points로 우측처럼 적당히 variation 넣어줬다.

이렇게 책상은 완성

한 책상당 0개 ~ 2개의 의자를 가지게 하고 싶으니 의자를 만들어주자

 

전 -> 후

transform positions로 좌표만 책상에서 살짝 떨어지게 만들면 모두가 가지고 있으니깐 (좌측 이미지)

noise를 추가해 density값 랜덤으로 주고 filter로 걸러내서 의자를 스폰하게 만든다 (우측 이미지)

 

복붙하면 의자 두개까지 가능

근데 너무 건전하게 논거 같으니깐 가끔 넘어져있는 의자가 있으면 좋겠다

 

그래서 두번째 생성된 의자들 말고 안겹치는 범위의 의자들을 density filter로 골라내어 걔를 transform point로 눕혀버리고 생성한다.  넘어져있는 의자들이 생성됐다.

 

이제 책상에 오브젝트들을 좀 올려볼까

 

생성한 책상들에서 위쪽 면만 얻고 싶으니, Mesh Sampler를 추가해 책상 Mesh를 넣어두고 Copy Points로 연결한다.

Source에 Mesh Sampler랑 이으면 왼쪽같이 점을 얻는다.

 

Normal to Density 로 면의 위치마다 density를 할당해주고, Density Filter로 하얀 Density 점들만 남겨둔다. (사진은 Normal To Density에서 디버그 찍었다)

 

Bounds Modifier로 범위 크게 키워서 겹치는건 Self Pruning으로 날려주고 남은 점들에게 Noise를 할당해준다. 포인트들에 오브젝트들을 올려둘 예정이다.

 

density filter로 적당히 잡아서 오브젝트들을 생성시켜주자. 사실 저렇게 안하고 density filter 0 ~ 0.6으로 잡고 그 애들을 Spawner로 연결해 Spawner mesh를 4개 추가하면 된다. 근데 나는 그냥 저렇게했다.

 

여기서 문제점이 나타난다.

대충보면 괜찮아 보이지만

 

  책상이 아예 평평하지 않고 홈이 있다보니 그 부분에 point가 잡혀 설치되면 국그릇이 삐딱해진다. ;;

 

두가지 해결책이 있다.

 

Normal To Density를 더 촘촘하게 잡아 색을 둘이 분리시켜 Density filter로 쟤네를 내보내면 된다. (기존 노드의 설정값만 더 촘촘하게 변동)

 

혹은 Point Filter를 열어서 Rotation.X나 Rotation.Y랑 비교해 float타입으로 적정선을 끊어주면 된다.

a키 눌러서 찍히는 점들 개수를 꼼꼼히 살펴봐야 한다.

 

아래 방식으로 했지만 글쓰다가 위에로 수정했다.

위에가 훨씬 간편! ^_^

 

그렇게 완성된 잔치판 유후!

 

+ 겹치는 의자 제거하는 노드 추가

 

너무 바닥이 심심해서 책상이랑 작은 풀 추가

조금 더 심심해서 의자에 뭐를 해야겠다

의자 윗부분만 받아오고 싶어서 point filter 사용했고 (디버그 찍어도 뭐가 바뀌는게 없다면 꼭 A 눌러서 결과 확인하면서 하자) 그냥 잡지 하나 놔뒀다.

 

진짜 완성!

728x90