언리얼 엔진 및 블렌더를 통해 만든 선풍기(약,중,강,회전 쉭쉭)
이번 시간에는 블렌더(version 4.3)와 언리얼 엔진(version 5.0)을 이용하여 선풍기를 만들어 본다. 블렌더를 통해 만든 모델을 언리얼 엔진에서 불러온 뒤 선풍기 머리의 회전 및 선풍기 날개의 움직임을 보여주고자 한다.
우선 원기둥 한 개를 생성한다. 그다음 에디트 모드로 들어가 Loop Cut을 이용해 수십 조각으로 나눈다. 기둥의 밑 부분을 선택한 뒤 S키로 사이즈를 늘린다. 이때 중앙 상단 패널에 있는 proportional Editing을 눌러주면 선택한 영역 이외의 영역도 같이 영향을 받아 사이즈가 달라진다. 이 점을 이용하여 약간 둥그렇게 만들 수 있다. 기둥의 아래 부분이 완성되면 기둥 윗부분을 선택해 위로 잡아당긴다.
선풍기의 버튼을 만들고자 기둥을 새로 생성한다. 크기를 조정해 타원형 모양으로 만들었다. 총 4개를 만들었고 각각의 역할은 선풍기 머리의 회전, 바람의 약, 중, 강 이렇게 구분했다. 그런데 최종 제작한 모습에서는 이 버튼들의 역할을 부여하지 않았다. 원래는 역할을 넣으려고 했는데 까먹었다...
몸통은 이렇게 해서 완성이고 선풍기의 머리를 만들 차례이다. 우선 원기둥 두 개를 생성하고 하나는 원기둥을 납작하게 만들어 준다. 그다음 다른 원기둥 표면에 갖다 댄다.
납작해진 원기둥을 Add modifier - Generate - array로 들어가 개수를 증가시켜 준다. 원기둥(납작 원기둥 말고)을 선택한 상태에서 Add modifier - Generate - Boolean를 누른 뒤 Diffrence를 클릭한다. 이 기능은 오브젝트가 겹쳐진 부분을 삭제해 준다. 그래서 납작 원기둥과 그냥 원기둥과 겹쳐진 상태에서 이 기능을 써주면 겹쳐진 부분이 사라지고 그러면 사진처럼 납작 원기둥 형태의 줄무기가 생성된다. 그다음 Diffrence 버튼 위의 화살표 - Apply까지 눌러 적용을 확실히 시킨다.
이렇게 한 이유는 선풍기를 보면 뒷면에는 바람이 통하는 줄무기가 보여서 한번 그려본 것이다.
너무 평평하면 모양이 안 나오니까 에디트 모드에서 Bevel를 클릭해 모서리를 깎아준다. 머리의 사이즈랑 크기도 몸통에 연결할 수 있게 재조정하였다. 머리 앞쪽에 새로운 면을 하나 만든다. 에디트 모드에서 Insert Face를 클릭한 뒤 S키를 눌러서 만든다. 그 뒤 E키를 눌러 해당 면을 앞으로 쭉 당긴다.
선풍기의 날개를 고정할 중앙을 만들기 위해 원기둥 하나를 생성한 뒤 사이즈랑 각도 조정을 한다.
선풍기 머리의 중앙에 날개를 놓기 위해 3D 커서의 위치를 옮긴다. 우선 선풍기 머리 가운데 커서를 옮겨놓는다. 방법은 머리를 클릭한 상태에서 마우스 오른쪽 버튼을 누르고 Snap - Coursor to Selected를 누르면 커서는 내가 선택한 오브젝트로 이동하게 된다. Shift + a 누르고 Empty - Plain Axes를 누른다.
생성된 Axes를 선택한 뒤 Snap - Coursor to Selected를 눌러 Axes 안에 3D cursor가 오게 한다. 그다음 아까 생성한 원기둥을 선택한 상태로 Snap - Selection to Cursor를 누르면 내가 선택한 오브젝트가 커서 쪽으로 휙 날아간다.
선풍기 날개 제작을 위해 상자형 오브젝트 한 개를 새롭게 생성해 주고 크기를 원기둥에 맞게 변경하고 Bevel을 이용해 모서리를 깎아준 뒤 S키를 눌러서 사이즈를 키워준다. 그러면 해당 면의 사이즈만 커져서 마치 부채꼴 모양이 된다. 그다음 Add modifier - Deform - Simple Deform을 누른 뒤 Twist --> 31도로 맞춘다. 축은 Y축으로 지정하였는데 축에 따라 휘어지는 모습이 제각각이라 하나씩 눌러보고 판단하면 좋을 것이다.
날개를 선택한 상태에서 Add modifier - Generate - array를 누른 뒤 Object Offset을 누르고 아까 생성한 Empty Axes를 선택해 준다. Array의 개수는 3개로 지정하였고 Relative Offset를 0에서부터 아주 조금씩 변경하여 날개 3개의 위치를 조정하였다. 또한 Axes도 조정을 하였는데 Axes를 회전시킴으로써 날개 3개의 위치가 틀어지게 하였다. 다시 말하자면 Axes의 회전 및 Relative Offset의 값에 대한 미세한 조정을 통해 날개 3개의 위치를 정할 수 있다. 참고로 Axes의 회전은 x, y, z 축 모두 한 번씩 건드려 보길 바란다. 축마다 바뀌는 모습이 달라서 본인이 직접 확인해 보면 좋다.
이렇게 생성한 날개는 중점이 날개들의 중앙에 있지 않는다. 그래서 중앙에 오게끔 해준다. 나중에 언리얼 엔진에서 이 날개가 회전하게 되는데 그 기준을 맞추기 위함이다.
오브젝트의 중점을 바꾸는 방법은 해당 오브젝트를 클릭하고 상단 패널에서 Object - Set Origin - Origin to Cursor를 눌러준다. 그러면 1번 위치에 있던 날개의 중점이 2번 위치로 옮겨지게 된다. Corsor는 아까 중앙에 이미 옮겨놓은 터라 가능하다.
현실의 선풍기를 보면 선풍기 날개만 있는 게 아니라 날개를 둘러싸고 있는 커버도 있다. 이 커버를 제작하려고 한다. 우선 원기둥이 아니라 원 오브젝트 한 개를 생성한다. 생성할 때 원에 생성할 점들의 개수를 정할 수 있는데 68개로 정하였다. 이 개수가 늘어나면 늘어날수록 원은 울퉁불퉁한 원이 아니라 반듯한 원 형태가 나온다. 그다음 이 원을 선택한 상태에서 마우스 오른쪽 버튼 - Convert to - Curve를 눌러준다. 그리고 사진의 하얀 화살표를 누른 뒤 Geometry - Round에서 Depth: 0.01m, Resolution은 20으로 정하였다. 이 기능은 Curve로 만든 원에 둘레를 입히는 것이다. 그러면 0.01m의 두께를 가진 원 형태의 고리가 완성된다. 여기에 Resolution을 높이면 더욱 매끈한 모양의 원 고리가 된다. 이러한 원 고리 오브젝트를 사진에서 처럼 3개를 만들어 준다.
아래 사진에서 처럼 마우스 오른쪽 버튼 - Curve에서 Bezier 한 개를 생성한다. 이것은 선풍기 날개 커버의 쇠창살 역할을 한다. 이 오브젝트를 선택한 상태에서 에디트 모드로 들어간 뒤 끝에 있는 점 한 개를 선택한 후 E키를 누르면 길이를 연장할 수 있다. 그 뒤 아까 생성한 axes을 앞으로 조금 끌어오고 여기에 3d커서가 오게끔 한다. 그리고 Bezier로 이 위치에 오게끔 한다. 이 오브젝트를 선택 한 뒤 convert to - mesh를 선택한다. 그리고 에디트 모드로 들어가 좌측 패널에서 Spin이라는 것을 찾는다.
이 기능도 Add modifier - array 랑 비슷하다. 선택한 오브젝트를 복사해 동일한 모양을 여러 개 만들어 준다. 에디트 모드 상태로 A키를 눌러 전체 오브젝트를 선택한 뒤 spin을 눌러 360도 각도 및 50 Steps으로 지정한다.
그다음에는 아까 만든 axes의 복사본 한 개를 만든다. 그리고 쇠창살을 클릭해 Add modifier - Generate -Mirror를 클릭한 뒤 방금 생성한 axes를 기준으로 잡고 대칭시켜 똑같은 모양을 만든다. axes의 위치를 날개 중앙쯤에 오게 해 준다.
쇠창살 정면의 중앙에는 텅 비어있다 그래서 원기둥 오브젝트를 한 개 생성한 뒤 Bevel로 모서리를 깎는다.
중앙이 왠지 심심해 보여서 로고 하나 넣으려고 한다. 우선 shift + a - Text를 누른다. 그 뒤 에디트 모드로 들어가고 기존의 문자는 지워버리고 'Siwon HADA'라는 문구를 입력한다. 그다음은 해당 텍스트를 누른 상태에서 마우스 오른쪽 버튼 누르고 Convert to - mesh를 누른다. 그러고 나서 E키를 눌러 앞쪽으로 쭈욱 뽑아낸다. 이 매쉬 텍스트를 커버 중앙에 위치시켜 놓고 해당 텍스트를 누른 상태에서 Add modifier - Generate - Boolean를 누른 뒤 Diffrence를 클릭한다. 그러면 아까 선풍기 머리 뒤쪽에 납작 원기둥 모양을 통해 만든 것과 동일한 방식으로 제작한 셈이 된다. 겉표면을 해당 매쉬 형태로 파낸 것이다.
선풍키 커버와 고리 3개를 누른 상태에서 마우스 오른쪽 버튼 - join을 누르면 하나의 오브젝트로 합쳐지게 된다.
이 작업이 끝나면 해당 오브젝트 전원을 선택한 상태에서 마우스 오른쪽 버튼 - Shade auto smooth를 누르게 되면 둥글둥글한 표면들이 매끈하게 바뀌게 된다. 그러고 나서 저장을 한 뒤 export - fbx 형태로 바탕화면에 저장한다.
언리얼 엔진에서 프로젝트(Blank)를 한 개 생성하고 나서 아까 생성한 fbx파일을 import 시켜준다. 폴더 안에 여러 오브젝트들이 생성될 텐데 이것들을 뷰포트 공간으로 끄집어낸다. 그 뒤 뷰포트 상단 패널에 보면 Select Mode - Modeling으로 들어가고 나서 왼쪽 패널에서 Pivot을 누른다. 블렌더에서도 오브젝트의 중점을 옮길 수 있듯이 언리얼에서도 가능하다. 해당 오브젝트의 몸통을 제외한 나머지 부분을 클릭한 상태에서 Center를 눌러주면 원점이 선풍기 머리 중앙에 오는 것을 볼 수 있다. 이렇게 함으로써 선풍기 머리가 회전하는 기준을 마련할 수 있게 된다.
선풍기의 재질은 주로 파란색으로 칠하였고 날개 부분은 반투명으로 제작하여 입혔다.
언리얼 엔진 안에서 가장 상단의 패널을 보면 Edit가 있고 여기서 Project Settings - Input으로 들어가 보면 키 입력을 내 마음대로 정할 수 있다. 여기서 키보드 왼쪽 위의 숫자 1~8까지를 입력으로 사용할 것이다.
아까 만든 뷰포트 공간에 있는 선풍기는 지워버린다. 그다음 블루프린트 액터 한 개를 생성한 뒤 그 안에서 선풍기 fbx데이터들을 집어넣는다.
전체적인 코드는 이렇다. 우선 event begin play, tick 등 기본적인 건 사용을 안 하고 아까 입력키 지정한 것들을 불러온다. 블루프린트 안에서 오른쪽 마우스 버튼 - keypad_Left_1 ~ 8번까지 검색해서 해당 노드들을 가져온다. 참고로 이름들은 아까 입력키 설정애서 설정한 이름들이다. 이 노드들 다음에는 노드에 해당하는 text render라는 노드를 소환해 해당 키를 입력할 때마다 뷰포트 공간에서 문구가 보이게 한다. 그리고 Timeline이라는 노드를 검색하고 가져온 뒤 루프 버튼을 누른 상태에서 floot vector를 누른다. 값 설정은 0부터 360으로 정한다. 전체 시간은 1.5초이다. 1.5초 주기로 선풍키 날개의 X축 값에 지속적으로 값이 들어가게 됨으로써 날개가 Spin 하는 것처럼 보이게 된다. 360도가 한 바퀴라는 점에서 360이라는 값으로 설정한 것이고 여기에 곱셈 연산을 넣으면 주어진 시간 안에 더 빠르게 회전하는 것처럼 보이게 할 수 있다. 이렇게 Left_1,3,5는 이렇게 돌아가고 2,4,6은 이 Timeline을 중단시킴으로써 회전을 멈추는 역할을 한다.
7번도 비슷한데 선풍기 머리를 좌우로 움직이게 한다. 움직이는 회전각은 사인 코싸인 할 때 싸인을 기준으로 2 x pi를 한 주기로 한다. 싸인 파를 떠올려 볼 때 싸인 0은 0이고 pi는 0, 2pi도 0인데 pi부터 2pi까지의 싸인의 값은 음수로 된다. 그리고 0부터 pi는 양수다. 음수와 양수값을 지속적으로 선풍기 머리의 Z 축 값에 넣음으로써 마치 선풍기가 좌우로 회전하는 모습을 보일 수 있게 된다.
8번은 7번의 Timeline을 중단시켜 선풍기 머리의 회전을 중단시켜 준다.
이렇게 해서 최종적인 모습이 아래의 영상이 되겠다. 키보드의 숫자 1,3,5는 slow, medium, fast이고 2,4,6은 그 동작을 멈추게 한다. 7번을 누르면 선풍기가 회전하게 되고 8번을 누르게 되면 회전을 멈추게 된다. 아 그리고 블루프린트에서 선들의 연결을 유심히 보아야 할 것이다. 1번을 누르면 4,6번의 동작은 자동으로 멈추게끔 설정해 놓았다.
소파나 투명 책상, 마룻바닥은 직접 만든 건 아니고 트윈모션 에셋에서 불러온 것이다.
가상세계를 만든 다는 것은 참 어려운 일인 것 같다. 복잡하다. 너무.. 현실에서는 그냥 무심코 넘어가는 부분들도 가상 세계에서는 그냥 짠~~ 하고 구현을 할 수가 없다. 전부 일일이 설정해줘야 하는 것이 많이 번거롭다. 하지만 한 번만 작업을 해보면 거기서 조금씩 수정해감으로써 나만의 공간을 만들 수 있다는 점이 좋은 것 같다.
가상세계를 만든다는 것은 머릿속으로 뿌연 이미지로만 있던 것들을 눈으로 생생하게 표현할 수 있다는 점이 매력적인 점인 것 같다.