본문 바로가기

개발일지

언리얼 엔진, 블루프린트 공부_1

- 언리얼 엔진, 블루프린트 공부 시작

 나는 유니티밖에 안 써봤다. 유니티 HDRP로 프로젝트 하나를 끝마쳤고 3D 배경공부를 하면서 프랍 배치부터 라이팅, 최적화까지 다 해봤다. 그 과정에서 문제가 정말 많았기때문에 문제를 고치면서 엔진에 대해서 더 많이 알 수 있었다. 그래서 솔직히 엔진을 모르지는 않다고 말할 수 있다. 구체적으로 들어가면 모르는게 많지만, 대강 어떤 원리로 동작하고 필요한 기능을 찾으려면 어디로 가야하고, 어떤 구조를 가지고 있는지 정도는 이해하고 있다. 이 자신감으로 언리얼도 한번 공부해보려고 한다.  

 

 언리얼은 그래픽 퀄리티로 유명하다. 유니티도 HDRP를 사용하면 고해상도 그래픽 제작이 가능하지만 언리얼을 많이들 쓰는 이유가 있을 것이다. 그래픽 관련된 기능도 언리얼이 조금 더 많은 것 같다. 검색해보니 몇가지 기능들은 유니티에서는 따로 스크립트를 만들거나 어셋을 불러와야 하지만 언리얼에서는 기본 제공하는 기능인 것 같다.

 

 블루프린트도 써보고 싶다. 유니티에도 비주얼 스크립팅 기능이 생기긴 했지만 아무도 안 쓰는 분위기라 정보가 적다. 반면 블루프린트는 유튜브 영상과 블로그에 올라온 글 등, 비교적 정보가 많기 때문에 쉽게 접근할 수 있다. 비주얼 스크립팅이라는 방식 자체도 서브스턴스 디자이너를 사용해 그래프를 만드는데 익숙한 나에게 더할나위 없이 좋다. 프로그래밍 언어는 아무리 봐도 익숙해지지 않는다. 

 

* 유니티 비주얼 스크립팅:  https://unity.com/kr/features/unity-visual-scripting 

 

Unity 비주얼 스크립팅 | Unity

코드를 작성하지 않고도 상호 작용을 추가할 수 있습니다. Unity 비주얼 스크립팅을 사용하면 신속한 프로토타이핑과 테스트가 가능하므로 게임 개발자는 시간을 절약할 수 있습니다.

unity.com

 

- 프로젝트 생성, 기본 설정

 나는 노트북으로 작업한다. 공간을 많이 차지하는 컴퓨터에 비해 크기가 작은 노트북이 뭔가 끌린다. 화면이 작아 불편하다는 사람도 많지만 화면이 작아 한눈에 정보가 다 들어와 좋다. 하지만 발열문제는 어쩔 수 없다. 고사양 작업을 돌리면 컴퓨터가 죽으려 하는 소리가 들린다. 언리얼을 열자마자 컴퓨터가 오랜만에 끙끙 앓는다. 급하게 사양 설정을 찾는다. 

"바로 찾을 수 있는 퀄리티 설정"

 언리얼과 유니티의 가장 큰 차이 중 하나가 유니티는 시작하면 아무것도 없어서 일일히 다 만들고 설정을 켜줘야 하는 반면, 언리얼은 모든게 다 켜져 있어서 지우고, 설정을 꺼줘야 한다고 들은 기억이 있다. 언리얼을 열자마자 미친듯이 돌아가는 노트북을 보자마자 알 수 있었다. 다행히 쉽게 찾을 수 있었다.


Setting(우측 상단 톱니바퀴) -> Engine Scalability Setting -> 원하는 해상도 설정. 


성능 관련된 설정이 대강 모여 있다보니 관리가 편할 것 같다. 유니티 쓸 때는 필요한 설정 하나하나 다 찾느라 죽는 줄 알았다

"아이콘 및 글씨 크기 조절"

 노트북을 쓰면 잘리는 글자가 있다. 보통 컴퓨터용 모니터를 기준으로 글자 크기와 아이콘 크기를 설정 해 놓다보니 노트북으로 작업하면 잘리는 경우가 많다. 크기를 바꿀 수 있다면 다행이지만 기능을 지원하지 않는 불친절한 툴도 많다 (ㄱㅅㄲ...) 언리얼은 친절하다. 퀄리티 세팅을 바꿀 때부터 느꼈다. 제법 친절하다. 사용자 친화적이다. 불친절한 툴이랑 일해와서 그런지 요새 조금만 친절한 툴을 만나도 너무 고맙고 사랑스럽다. 블랜더가 그랬다. 


Tools -> Debug -> Widget Reflector -> 크기 조절


 시작하자마자 불편한 두가지를 찾아서 바꿔봤는데 이 과정에서 뭔가 걸리는게 하나도 없었다. 보통 다른 툴이라면 찾아 헤매다가 버전이 달라 또 다른 곳을 뒤지고 뭔가 잘못 눌러서 왜 안되냐며 화내야 하는 타이밍인데 너무 부드럽게 지나갔다. 이상하다. 이러면 나 블랜더랑 언리얼로 갈아탈지도 몰라. 게다가 이 둘은 무료잖아...?

 

- 액터의 개념

낯선 단어가 나온다. 액터?? 정의를 찾아본다. 

https://docs.unrealengine.com/4.27/ko/ProgrammingAndScripting/ProgrammingWithCPP/UnrealArchitecture/Actors/

 카메라, 라이트, 메쉬 등 씬에 배치될 수 있는 모든 오브젝트를 액터라고 부르는 것 같다. 액터라는 이름때문에 헷갈릴 수 있지만 이런 개념을 처음 접하는 사람의 입장에서는 '액터'라는 단어가 훨씬 부르기 편할 것 같다. 액터(배우)라는 단어가 가진 의미가 많은 부분을 설명해주기 때문이다. 카메라, 라이트, 메쉬 모두 결국 화면 속에서 연기를 하는 체라는 재밌는 비유다. '액터'라는 단어가 가진 미묘한 뉘앙스가 이해를 돕는다.


"액터 = 게임 세계에서 다양한 역할을 수행하며 위치와 동작을 가지는 모든 개체"


 유니티나 맥스 같은 다른 기본 툴이 두껍고 재미 없는 전공서적이라면 언리얼과 블랜더는 해당분야의 대중화를 위한 대중서적을 보는 것 같다. 같은 우주의 내용을 담고 있지만 유니티와 기타 툴은 천문학 전공서적을 보는 것 같다면 언리얼은 칼세이건의 코스모스를 보는 것 같다. 명확한 이해를 바탕으로 정확한 비유를 사용해 보는 이의 이해를 돕는다. 

"GPT의 설명"

GPT한테도 물어봤다. 액터의 개념과 함께 종류에 대해 설명해주고 컴포넌트 구성까지도 말해준다. 괜찮은 설명이다. 다음으로 넘어가자.

 

-클래스의 개념

다음 개념으로 클래스가 나온다. 클래스는 뭘까? 코딩할 때 들어본 말인 것 같은데 뭔지는 모르겠다. 

https://ko.wikipedia.org/wiki/%ED%81%B4%EB%9E%98%EC%8A%A4_(%EC%BB%B4%ED%93%A8%ED%84%B0_%ED%94%84%EB%A1%9C%EA%B7%B8%EB%9E%98%EB%B0%8D)

 

 

클래스 (컴퓨터 프로그래밍) - 위키백과, 우리 모두의 백과사전

위키백과, 우리 모두의 백과사전. 클래스(class, 어원: classification)는 객체 지향 프로그래밍(OOP)에서 특정 객체를 생성하기 위해 변수와 메소드를 정의하는 일종의 틀(template)이다. 객체를 정의하기

ko.wikipedia.org


"클래스(class, 어원: classification)는 객체 지향 프로그래밍(OOP)에서 특정 객체를 생성하기 위해 변수 메소드를 정의하는 일종의 틀(template)이다. 객체를 정의하기 위한 메소드와 변수로 구성된다."

 

클래스의 개념이다. 틀이라고 하는데 확 와닿는 설명은 아니다. GPT에게 물어본다. 

"GPT의 클래스에 대한 정의"

객체를 생성하기 위한 청사진이라고 하는데 이 설명도 뭔가 아쉽다. 이번엔 GPT에게 비유를 사용해 설명해달라고 한다.

"클래스의 자동차 비유"

클래스를 자동차 청사진에 비유했다. 자동차를 만들기 위한 청사진에는 색상, 제조사, 주행, 정지 등과 같은 자동차의 기본적인 속성이 포함되어 있다고 한다. '객체'는 '클래스'라는 청사진을 바탕으로 만든 실제 자동차라고 한다. 드디어 마음에 드는 설명이 나왔다. 자동차라고 하니까 이해가 바로 된다. 장하다 GPT야ㅠㅠ


" 클래스 = '자동차'라는 객체(Object)를 만들기 위한 '청사진' "


"블루프린트 생성을 누르면 나오는 창"

블루프린트 생성을 누르면 위와 같은 창이 뜬다. 이게 뭔가 했었는데 '클래스'를 자동차로 비유하고 나니까 알겠다. 액터와 폰, 캐릭터는 청사진의 종류다. 자동차 청사진이 있는 것처럼 비행기, 배터리 청사진도 있다. "블루프린트"라는 이름이 이제서야 머릿속에 들어온다. 블루프린트도 액터처럼 알맞은 비유다. 너무 친절한 툴이다. 사랑스럽다. 

 

-블루프린트 그래프 생성과 실습

"Hello World!"

 블루프린트를 사용하는 방식은 서브스턴스 디자이너와 거의 똑같다. 순서대로 노드를 연결하는 방식이다. 하얀색 연결고리에 줄을 연결하면 동작이 실행된다. 나머지 색이 있는 구멍에는 변수를 입력할 수 있다. 변수에 대해서는 다음 글에서 자세히 다루겠다. 

"Delay 노드 사용"

왼쪽에서부터 시작해 오른쪽으로 진행된다. 지금은 플레이 시작 시 노드가 활성화되게 만들었다. 플레이 하는 즉시 모든 일이 순식간에 진행되기 때문에 순서를 느낄 수 없다. Delay 노드를 사용하면 확실히 알 수 있다. 2초 후 변화가 일어난다.

"줄 쪼개기"

정리는 중요하다. 노드가 5개로 끝난다면 모를까, 노드가 많아지면 노드 구조를 알아보기 어렵게 된다. 구조를 파악해 수정하기도 어려워지고 원하는 노드 위치를 찾지 못해 노드를 재사용하는 일도 어려워진다. 시작부터 정리하는 습관을 들여서 정리하면서 작업해야 한다. 몇가지 단축키다.


우클릭 = 노드 검색

줄 위에 더블 클릭 = 줄 쪼개기

줄 위에 Alt + 클릭 = 연결 끊기

드래그 + C = 코멘트 박스 생성


컴포넌트에 메쉬를 집어 넣을 수도 있다. 

그러면 바로 이렇게 그래프에 가져와서 쓸 수 있다. 

 

다음 글에 계속.