실감 공통편 레벨 디자인 1
안녕하세요
언리얼 그래픽스 강의를 담당하게 된 탁광욱입니다
이번 언리얼 그래픽스 과목은
실시간으로 막강한 그래픽을 표현하는 언리얼 엔진의
효과적인 사용방법을 학습하는 과정입니다
공간을 꾸미는 레벨 디자인과
공간을 아름다운 영상으로 담기 위한 시퀀스 기술까지
언리얼 엔진의 수준 높은 그래픽을 실시간으로 시각화하고
영상화하는 방법에 대해서 학습해 볼 텐데요
먼저 시각화 툴로서의 언리얼 엔진을 이해하고
레벨 즉 공간을 만들기 위한 기초작업인
화이트박싱 작업을 학습해 보도록 하겠습니다
언리얼 엔진과 그래픽
컴퓨터 프로그래밍에서 엔진이란
자동차의 핵심 부품인 엔진처럼
다른 프로그램을 위해서
또는 특정 프로그램 내부에서 그 프로그램을 위해서
핵심적이고 본질적인 기능을 수행해주는 프로그램
이런 것들을 지칭하는 용어로서
프로그램을 만드는 프로그램 정도로 이해하면 쉽습니다
작게는 우리가 매일같이 무언가를 검색할 때
검색 엔진을 사용하게 되죠
요즘 많이 사용하고 있는 인공지능에도 추론 엔진이 있어서
머신러닝 개발에도 활용이 되고 있습니다
그리고 그래픽에서도 엔진이라는 용어를 사용합니다
3D 공간 혹은 2D 이미지들을
한 장의 그림으로 그려내는 렌더링 작업
이것도 렌더링 전용 엔진으로 작업하기도 하죠
특히 언리얼 엔진은 게임업계에서도
오래전부터 게임 엔진으로 게임 개발을 해왔고
특히 언리얼 엔진은 에픽게임즈에서
언리얼 토너먼트라는 게임을 만들기 위해서 만들어진
3D 물리 엔진이에요
현재는 포트나이트라는 게임으로
메타버스를 선도하고 있고요
이 엔진 안에는 그래픽이라든지 물리 충돌
사운드, 네트워크 같은 많은 기술들이
실시간으로 계산되어서 움직이고 있는
그런 상황으로 보시면 됩니다
그럼 시각화 측면으로 엔진에 대해서
자세히 알아보도록 하죠
먼저 컴퓨터 그래픽 파이프라인에 대해서 알아보겠습니다
우리가 사용하고 있는 엔진은
3D를 기반으로 한 프로세스를 갖고 있고
지금의 2D 게임들도 대부분 3D 엔진에서
3D 제작 방식을 이용해서 사용하고 있기 때문에
3D 제작 방식을 기준으로 설명을 좀 해볼게요
3D 오브젝트가 화면에 출력이 돼서
우리 눈에 들어오기까지의 과정이 어떻게 되는지
그 과정을 그림을 보면서 이야기해 보도록 하겠습니다
일단 비어있는 3D 공간이 있을 거예요
그 안에는 캐릭터가 있을 거고요 배경도 있을 겁니다
캐릭터, 배경 모두 다 3D 오브젝트로 이루어져 있죠
그리고 같은 공간에 반짝반짝인다거나 폭발 같은 효과들
이펙트로 불리는 이런 효과들도 여기에 존재하게 되죠
그리고 캐릭터 오브젝트는 움직일 겁니다
걷거나 뛰거나 날거나 하는 여러 가지 동작들을 하게 되는데
이것들을 애니메이션이라고 부르고요
이런 오브젝트들의 정보나
그리고 오브젝트들을 움직이게 하기 위해서는
어떤 표지판 같은
유저가 버튼을 누르거나 혹은 오브젝트의 정보
이런 것들을 인지할 수 있도록 표시해주는
UI라고 하는 존재도 필요하게 됩니다
이렇게 공간에 모아둔 이 모든 형태들을
우리는 레벨 디자인이라고 이야기를 합니다
여기서 이야기하는 레벨이란
지형의 높고 낮음, 고저차를 이야기하고요
공간 디자인이라고 생각하시면 좋아요
이렇게 레벨 디자인이 완료가 됐으면
이제는 이 모든 것들을 찍을 수 있는 카메라가 필요하죠
카메라는 이 레벨에서 보이는 모든 것들을 찍어서
화면에 그려주는 역할을 하게 되는데
이때 화면에 그려주는 것을 렌더링이라고 부릅니다
그리고 렌더링 된 한 장의 이미지를
연속적으로 보여줌으로써 우리는
움직이는 영상을 보게 되는 거죠
보통 1초에 30장 혹은 60장의 카메라가 찍은 렌더링 샷을
우리는 보게 되는 겁니다
일반적으로 날것의 렌더링 샷을 그대로 보지는 않아요
우리는 항상 보정의 단계를 거치죠
이것을 보통 Postproduction, Postprocess
후보정이라고 부릅니다
일반적으로 여러분들이 영화를 보기 전에
영화 홍보할 때 배우 인터뷰를 보면
영상은 이미 찍었고 지금 후반 작업 중이다
혹은 후보정 작업 중이다라고
이야기하는 것을 들었을 거예요
그때는 찍어둔 필름에 포토샵이라든지 애프터 이펙트
프리미어에서 어떤 효과들을 첨가해서
색감도 조정하게 되고
필터 같은 것을 써서 다양한 효과들을 만들게 되겠죠
뽀샤시 하거나 어둡게 되거나 하는
그래서 영화의 집중도를 좀 더 높일 수 있는
완성도를 높일 수 있는 단계로 진행하게 될 거예요
그 단계가 바로 후보정 단계
Postproduction 단계라고 생각하시면 됩니다
이런 단계까지 거쳐서 최종적으로 모니터에 출력이 됨으로써
우리는 완성된 이미지를 보게 되는 겁니다
게임을 하면 모니터를 보게 될 거고요
영화라면 영화관에서 프로젝션으로 영화를 보게 될 겁니다
대부분의 컴퓨터 그래픽스는
이러한 단계를 거쳐요
레벨 디자인과 레벨 디자인을 찍는 카메라
그리고 그 카메라가 찍은 렌더링 샷
그 렌더링 샷의 이미지를 후보정한 결과물을
우리가 본다고 생각하시면 좋아요
3D 그래픽은 카메라로 찍어서
화면에 렌더링 하는 그 단계에서 콘텐츠의 성격에 따라
실시간 렌더링이냐 비실시간 렌더링이냐로 나뉘게 돼요
실시간 렌더링은 말 그대로 카메라가 그린 이미지를
바로바로 모니터에 그려주는 그런 역할을 의미하고요
비실시간 렌더링은 반대예요
카메라가 찍은 이미지를 바로 보여주는 것이 아니라
시간에 상관없이 미리 그려놓고 나중에 보여주는
그런 형태를 비실시간 렌더링이라고 이야기를 합니다
비실시간 렌더링에 대해서 조금 더 자세히 이야기를 해보죠
비실시간 콘텐츠는 대표적인 콘텐츠가 바로
영화나 드라마, 광고 이런 것들이라고 보시면 돼요
우리가 영화를 보거나 혹은 광고 영상 같은 거 볼 때
그냥 만들어진 결과물을 처음부터 끝까지 쭉 보죠
좀 더 자세히 얘기하면
1초에 30장 혹은 60장의 미리 그려놓은 이미지들을
연달아서 쭉 보게 되는 겁니다
영화라면 2시간 정도, 드라마라면 1시간 정도
쭉 보게 되는 거겠죠
그래서 렌더링을 할 때에도
시간의 제약 없이 캐릭터가 움직이고
이펙트가 터지고 조명이 바뀌고
이런 것들을 미리미리 계산해두고
아주 오랜 시간을 들여서 한 장면 한 장면을 그리게 되죠
그 한 장면 한 장면을 그리는데 짧게 걸릴 필요도 없죠
몇 분 걸려도 되고요 1시간을 그려도 상관없어요
또는 시간 절약을 위해서 여러 개의 작업
이런 렌더링 PC를 동원해서 한 장의 이미지를
한꺼번에 아주 많은 컴퓨터를 이용해서
이미지들을 계산하기도 하고요
그래서 이렇게 꼼꼼하게
영상 파일, 이미지 파일들을 만들어내게 되는 거예요
그럼 만들어진 이미지를 우리는 나중에
프리미어라든지 애프터 이펙트에서 재가공을 거쳐서
우리는 그냥 영상만 보면 되는 겁니다
이렇게 오랜 시간 여러 대의 PC를 이용해서
영상이라든지 이미지를 렌더링 하는 이유는 간단하죠
고품질의 데이터를 얻기 위해서예요
영화나 영상 혹은 건축 렌더링 같은 거
주인공의 땀구멍 하나하나의 표현들
혹은 연기나 파편 같은 작은 입자들의 표현들
그리고 재질의 정확한 빛 반사 같은 표현들이
굉장히 중요하다 보니까
오랜 시간에 걸쳐서 그 모든 것들을
콘텐츠가 퀄리티 높게 결과물을
만들어내야 하는 콘텐츠이기 때문에
비실시간 렌더링 방식을 사용하게 됩니다
이게 비실시간 렌더링의 특징이고요
실시간 렌더링은 일반적으로
실시간 콘텐츠에서 사용하는
렌더링 방식이라고 생각하시면 좋아요
실시간 콘텐츠라고 이야기하는 것은
인터랙션이라고 하는
유저와 컴퓨터 간에 상호작용하는 서비스를 제공하는
콘텐츠라고 생각하면 좋은데요
일반적으로 게임이 대표적이죠
우리가 게임에서 캐릭터를 왼쪽으로 움직이고 싶거나
혹은 오른쪽으로 움직이게 하고 싶을 때
우리는 키 입력만 하면
캐릭터가 왼쪽으로 움직이거나 오른쪽으로 움직이는 것을
우리가 명령을 할 수 있죠
이렇게 사용자 입력에 따라서 캐릭터의 움직임이 달라지면
레벨의 환경도 달라지고
카메라가 찍어야 하는 장면이 달라지는 상황이
게임하는 내내 매 순간순간 반복적으로 일어나게 되죠
심지어 여기에는 물리 충돌에 관련된 것들
벽에 부딪힌다거나 폭발물이 터져서 날아간다거나 하는
이런 물리 충돌들이 계속 일어나게 되고요
여러 가지 이펙트들도 나타나게 되고
거기에 따른 조명의 값도 계속 달라지게 되겠네요
그냥 단순하게 오브젝트만 그리는 것이 아니라
수시로 변동돼서 발생하는
여러 가지 예측할 수 없는 정보들을
실시간으로 한 번에 계속
연속적으로 그려줘야 된다는 특징을 가진 콘텐츠가
실시간 콘텐츠의 특징이라고 보시면 좋아요
심지어 우리는 게임을 한 대의 컴퓨터로 돌리죠
그러다 보니까 컴퓨터 한 대 혹은 핸드폰 한 대
혹은 플레이스테이션이나 Xbox 같은 콘솔 게임기 한 대로
이 순간적인 모든 콘텐츠를 계산해야 합니다
이렇게 예측할 수 없는 콘텐츠를
매 순간 순간 화면에 그리는 것이
바로 실시간 렌더링입니다
이렇게 실시간 콘텐츠는
한 번에 계산해야 될 것들이 굉장히 많았죠
오브젝트 모델링 데이터와 그리고 조명, 이펙트, UI
또 물리 충돌이나 사운드나 인공지능 같은 것들도
모두 한 번에 계산을 해서
매 순간 순간 1초에 30장의 이미지를
반복적으로 그려야 되니까
보통 0.001초 이 정도 되는 시간에
하나씩 이미지를 그려야 될 거예요
그러다 보니까 계산해야 될 것도 많고
시간은 굉장히 짧다 보니까
과거에는 그래픽 퀄리티가 그렇게 썩 좋지 못했어요
실제로 툼레이더라는 게임을 한번 보도록 할게요
툼레이더는 1990년대부터 만들어지기 시작해서
시리즈가 계속 발전돼서
지금까지도 만들어지는 콘텐츠라고 보시면 됩니다
영화화도 됐죠
이미지에서 보시는 것처럼 맨 왼쪽에 보이는 것이
초창기 툼레이더 여주인공 캐릭터의 모습이에요
계산할 것들이 많고 컴퓨터의 성능이 아주 낮다 보니까
각지고 도형 같은 느낌의
굉장히 이질적인 느낌의 캐릭터가 표현이 됐어요
하지만 그래픽 기술이 좀 발달이 되고
컴퓨터 하드웨어가 점점 발전이 되면서
맨 오른쪽에 있는 이미지로 표현이 되고 있습니다
맨 오른쪽에 있는 이미지도 벌써 2017년 작품이네요
거의 10년이 다 돼가는 그런 작품인데도
거의 사람과 흡사하게 표현되고 있다는 것을 볼 수가 있죠
지금은 더 발전이 됐다고 보시면 좋아요
그래서 게임 엔진의 이런 시각적인 표현들이
하드웨어의 수준도 높아지고
그다음에 프로그래밍 실력도 높아지면서
점점 시각적인 표현들이 날로 날로 발전이 되면서
게임의 그래픽 수준은 실사 영화와 비슷한 수준이 되었습니다
특히 언리얼 엔진은 실사 같은 표현에 주력하면서
다른 엔진 중에서도 가장 실사에 가까운 그래픽을
구현하는 능력으로 인정을 받고 있어요
이쯤 되니까 실시간으로 이런 퀄리티 있는 모습을
언리얼 엔진에서 표현을 하다 보니까
이제는 다른 산업에서도 눈을 뜨게 되죠
영상, 산업 제품, 건축 이런 분야에서도
과거에는 시간의 구애 없이 렌더링을 해왔었다면
지금은 실시간으로 영상 처리를 하는
실시간 렌더링을 도입해서
그때그때 수정하는 방향으로
전체적인 제작 방식이 바뀌어 가고 있는 상태입니다
그래서 시간 절약과 리소스
그다음에 금전적인 절약까지도 이루어지는 상태죠
그리고 최근에는 VR 혹은 AR 기기가
개발이 되고 발전이 되면서
가상공간이라든지 혹은 혼합현실
MR이라고 하는 혼합현실 같은
이런 콘텐츠들이 많이 생산되면서
실시간 렌더링 방식을 많이
사용하고 있는 상황이라고 보시면 좋겠습니다
화이트 박싱 제작하기
그럼 3차원 공간에 입체를 제작해서 공간을 꾸미는
레벨 디자인을 진행해 보도록 할게요
보통 레벨 디자인은 화이트 박싱이라고 불리는
워크플로로 시작하게 됩니다
프로젝트의 개발 파이프라인을 보면
개발 초반 프로토타이핑을 통해서
콘텐츠를 검증하게 되고
간단한 레벨 혹은 지형이 필요할 때가 있어요
이때 빠른 검증과 수정을 해야 하기 때문에
임시로 만든 데이터를 사용하고
모든 검증이 끝나면 정식 애셋으로 교체를 하게 되죠
이때 임시로 만든 데이터를
일반적으로 하얀색 기본 박스로 만들어서
보통 화이트 박스라고 하고요
이런 화이트 박스를 만드는 과정을
화이트 박싱이라고 합니다
꼭 하얀색 박스로 만들 필요는 없어서
언리얼 엔진에서는 그레이 박싱
그리고 블록 아웃이라고도 해요
엔진에서 쓰이는 이런 3D 모델링 데이터를 통틀어서
Mesh라고 하는데 일반적으로 이런 Mesh를
블렌더나 3D MAX, MAYA 같은
외부 툴에서 제작해서 만들어 오기도 하지만
이런 화이트 박싱에서 사용하는 간단한 더미 Mesh는
엔진 내에서 간단하게 만들 수 있도록
언리얼 엔진에서 기능을 제공하고 있습니다
언리얼 엔진은 모델링 툴과 Geometry Brush
두 가지 기능이 있는데요
Geometry Brush가 간단한 형태를 만드는 데
최적화되어 있었다면
모델링 툴은 블렌더나 3D MAX, MAYA 같은
외부 툴에서 만드는 수준의 모델링을 제작할 수 있게
언리얼에서 제공해 준 툴이어서
기능은 많지만 외부 툴에서 제작하는 만큼의
지식이 필요하기 때문에
이번 레벨 디자인 수업은
간단한 형태를 만들 수 있는
Geometry Brush를 사용해서
레벨을 제작해 보도록 하겠습니다
이번에는 레벨을 디자인하는데
인터넷에서 아파트 평면도를 다운로드를 받았는데요
이 2D 평면도를 기준으로 입체를 꾸미는
레벨 작업을 진행할 거에요
평면도에 나와 있는 수치를 보면서
대략적인 크기를 맞춰갈 거니까
여러분들의 모니터 옆에 띄워놓고
번갈아 가면서 확인해가면서 진행하는 것이 좋을 것 같아요
저도 다른 모니터에다 띄워놓고
필요할 때마다 꺼내서 확인해 보면서
진행을 하도록 하겠습니다
새로운 프로젝트를 하나 만들었고요
베이직이라는 레벨을 만들었고요
여기다가 아파트를 만들어 보도록 할 겁니다
상단에 플러스 버튼을 눌러서
Place Actors Panel이라고 하는 패널을 열어서
사용하기 쉽게, Actor를 꺼내기 쉽게 이렇게 해두겠습니다
우리가 사용하는 Actor는
Geometry Brush라고 하는 Actor였죠
우리가 일반적으로 많이 사용하는
이렇게 Shapes에 있는 큐브 모양의 Shape하고는 조금 달라요
옆에 있는 Geometry라고 하는 항목을 보시면
여기에도 박스가 있거든요
이 박스를 가지고 와서 보시면 생김새가 좀 다르죠
왼쪽에 있는 하얀색 큐브는 고정되어 있는 큐브
그래서 이거는 Static Mesh라고 부릅니다
디테일 창에서도 보시면
Static Mesh라고 하는 항목이 보이죠
고정되어 있다 즉 이 오브젝트는 고정되어 있는 형태예요
변할 수가 없어요
물론 트랜스폼을 이용해서 이 Scale을 이용해서
줄이고 늘리고 할 수가 있는데
실질적인 큐브의 모양을 납작하게 혹은 두껍게
형태를 바꾸는 것이 아니라
이렇게 Scale을 통해서 얇고 길게 만든다는 것은
이 오브젝트의 공간을 일그러트려서 공간을 왜곡시켜서
이 형태를 납작하게 만들어 보일 뿐인 거고요
기본적으로는 이 Mesh 자체는 움직이지 않는
고정되어 있는 형태로서의 큐브라고 보시면 돼요
그래서 사실상 이 큐브는 변형될 수가 없다
반면에 Geometry Brush는 클릭을 해서 보시면
이렇게 파란색이 있고 주황색이 있고요
그다음에 이렇게 체크무늬로 되어 있는 것이 있죠
파란색은 버텍스라고 부르고 주황색은 엣지라고 부릅니다
이렇게 모서리를 엣지
선으로 표현되고 있는데
그 엣지가 연결되어서 하나의 면으로 보이게 되는
체크무늬 부분 이 부분을 페이스
보통 우리가 이야기하는 폴리곤이라고 하는
그런 면이라고 생각하시면 좋아요
이 Geometry Brush는 보시면 디테일 창에 보시면
Static Mesh 고정되어 있다는 표현이 없을 겁니다
Geometry라는 표현으로
변경이 가능한 형태로서 보실 수가 있어요
그래서 보시면 물론 역시 마찬가지로
공간에 있는 데이터이기 때문에
공간을 압축시키고 왜곡시켜서 똑같이
하얀색 큐브처럼 줄이고 늘리고도 가능하기는 합니다
이런 식으로 가능하기는 하지만
이 자체가 공간이 왜곡되어 있기 때문에 변화된 건 아니고요
아래쪽에 보시면 여기
Geometry Setting이라고 하는 곳에서 X는 200
200이라고 하는 수치는 200unit을 의미하고요
현실로 얘기하면 200cm를 이야기합니다
즉 현재 X로 200cm의 길이로
표현되어 있다는 걸 보여주고 있어요
그래서 여기를 만약에 X를 100unit만큼
100cm만큼 줄인다면 여기를 100으로 기입을 하면
X축, 빨간색 축으로 이렇게 줄어든 걸 볼 수가 있어요
이때 보시면 일반적으로 우리가 X축으로
다시 이것을 200으로 해놓고 X축으로 줄였을 때랑
X축으로 0.5로 줄였을 때 보면
이런 식으로 안에 있는 체크 박스가 약간 왜곡이 돼서
납작해 보이는 그런 모습을 볼 수가 있는데 반해서
이 밑에 있는 Brush Settings의 X를 100으로 놓으면
이런 식으로 왜곡이 되지 않은 상태
이 안에 있는 사각형이 왜곡이 되어 있지 않죠
왜곡이 되어 있지 않은 상태에서 온전하게 이 형태가
어느 정도로 줄여져 있는 상태
100cm로 줄여져 있는 상태로
형태를 변형시켰다고 볼 수가 있어요
그래서 Geometry Brush를 이용해서
Brush Settings의 X, Y, Z 수치를 이용하면
제대로 된 형태를 우리가 만들어낼 수가 있다는 거죠
공간을 왜곡시켜서 만들어진 그런 형태가 아니라
실제 데이터 자체가 변형되어진
그런 형태를 얻을 수가 있다는 겁니다
그래서 우리는 Geometry Brush를 활용해서 만들 거예요
꺼낸 것들은 일단 다 지우고요
이 밑바닥에 있는 Floor라고 하는
이 오브젝트도 사실상 Static Mesh예요
Static Mesh이기 때문에
우리는 이게 필요 없어서 지우도록 하겠습니다
바닥부터 만들도록 할게요
아파트 평면도를 보시면
가로가 이렇게 있고 세로가 이렇게 있죠
가로가 13200으로 되어 있고
세로가 4500으로 되어 있습니다
평면도 같은 경우에는 일반적으로 mm 단위예요
아까도 잠깐 얘기했지만 언리얼 엔진에서는
1unit이 1cm를 의미하기 때문에
이 아파트 평면도는 13200이 아니라
언리얼에서 만들 때는 1320으로 만들면 되겠죠
이런 룰을 잘 기억하고 있으면서
바닥부터 만들어 보도록 할게요
그럼 우리는 1320에 450만큼의 바닥부터 만들도록 하죠
Place Actor의 Geometry 항목의 박스를
드래그 앤 드롭해서 가지고 오고요
일단은 원점에 둘게요 위치를 원점에 두고요
아래쪽에 Brush Settings라고 하는 항목의 X, Y, Z 중에서
우리는 기즈모를 X 방향
X 방향이 저쪽 앞을 보게 빨간색이 저쪽 앞을 보게끔
그다음에 초록색이 오른쪽을 보고
파란색 화살표가 위쪽으로 가게끔 이렇게 두도록 할게요
언리얼에서는 빨간색 화살표를 Forward
그다음에 노란색 화살표 Y축을 Right
그다음에 파란색 화살표 Z축을 Up으로 정하고 있어요
그래서 이렇게 기즈모를 두면
제대로 된 방향이라고 볼 수가 있을 거예요
그래서 이렇게 된 상태에서
우리는 Y축 좌표로 1320만큼 길게
그다음에 X축 좌표로 450만큼 길게 만들면 되겠죠
그래서 먼저 Y축 잡아볼게요 Y축을 1320으로 두고요
X축이죠 450 이렇게 잡아두겠습니다
바닥은 지금 너무 두꺼우니까 바닥은 얇게
Z축은 10cm 정도 이렇게 맞춰주도록 할게요
이 Actor는 이름을 바꿔주도록 할게요
이름은 Ground로 하겠습니다 그럼 바닥은 됐네요
그럼 여기다가 왼쪽부터 차근차근 복도에서부터 침실
그리고 이 안에 있는 현관의 싱크대나 이런 것들은 무시할게요
이 안에 있는 다용도실들은 무시를 하고
침실 그다음에 욕실 그다음에 큰 침실, 발코니까지
발코니도 여기는 무시하도록 하겠습니다
이건 없애고 발코니까지 이런 식으로
왼쪽부터 차근차근 진행을 해보도록 하겠습니다
먼저 왼쪽에 있는 여기 벽부터 만들도록 하죠
역시 마찬가지 박스를 가지고 와서 만들어보도록 할게요
일단은 사이즈가 비슷하니까 X축으로 450이 되겠네요
벽 두께는 바닥을 10cm로 만든 것처럼
벽 두께도 10cm로 만들도록 하겠습니다
그래서 Y축으로 10
높이는 일반적으로 사람의 키를 기준으로 생각하면
사람의 키가 1.5에서 2미터 정도 되니까
높이는 사람 키를 생각해서 한 2미터 정도로 할게요
그래서 Z축은 200 그대로 두면 되겠네요
이 상태에서 이렇게 갖다 놓도록 하겠습니다
지금 스냅이 먹혀있기 때문에 착 하고 갈 건데
지금 보시면 안 맞죠 가려고 해도 맞지가 않아요
그럴 때에는 상단에 있는 그리드 표시
이 그리드 표시의 기준을 다르게 하면 좋을 것 같아요
지금은 10unit만큼 이동하도록 설정이 되어 있어요
이거를 반만 5unit만큼만 움직일 수 있도록
이렇게 해놓고 움직이면
착 하고 착 하고 이렇게 반만 움직이니까
조금 더 정확하게 움직일 수가 있게 되겠죠 그럼 됐네요
가운데에 복도가 있으니까 복도가 150unit 만큼 있어요
그래서 이거를 이만큼 또 이동을 해 줄 건데요
먼저 이 벽의 이름을 먼저 작성을 해 줄게요
벽의 이름은 Hallway01이라고 지어주고요
이 Hallway01이라고 하는 벽을 그대로 복사해서
오른쪽 침실이 시작되는 벽으로 만들어 주도록 하겠습니다
오브젝트를 복사를 하려면
Ctrl+C, V로 복사를 할 수도 있어요
그리고 Ctrl+D로 이렇게 복제를 할 수도 있고요
그리고 Alt키를 누른 상태에서 이동을 하면
이런 식으로 복제가 된 상태로 이동하게 됩니다
간편하죠? 그래서 이렇게 이동하면 좋을 것 같아요
이름은 자동으로 뒤에 2라는 숫자가 붙었는데
01, 02로 만드는 게 좋겠죠 통일성 있게
지금 현재는 이 사이가 1500
그러니까 150unit만큼 이동했는지 잘 모르겠어요
Hallway01의 위치값을 확인을 해 봐야 될 것 같아요
지금 Y축을 기준으로 봐야 되니까
-655만큼으로 되어 있으니까
150만큼 오른쪽으로 가면 되겠죠
그래서 Hallway02는 -505가 되겠네요 이렇게 되면
그 길이만큼 이렇게 넓혀지겠습니다 됐죠?
이어서 침실로 가보도록 할까요
침실은 벽이 있으니까
이 위에다가 이렇게 벽을 하나 만들어 볼게요
같은 작업이죠 X축, Y축
평면도를 보면서 수치를 입력해서 만들어주면 되겠죠
X축으로는 두께니까 10
그다음에 가로 Y축으로는 270이 되겠네요 270
그리고 이동해서 붙이면 좋겠어요 됐죠?
이름을 바꿔 주도록 하겠습니다
이름은 SmallRoom이라고 할게요
SmallRoom01 이런 식으로 하겠습니다
여기에 있는 벽도 만들어 보도록 할게요
이 벽은 여기에 있는 이 벽
Hallway2를 복제하면 좋을 것 같아요
그대로 Alt키를 누른 상태에서 복제를 하고요
이 X축의 길이만 조절하면 되겠네요
평면도에는 길이가 없기 때문에
임의의 수치대로 우리가 만들어주는 게 좋을 것 같아요
450이 아니라 한 250으로 할게요
그리고 이렇게 붙여주도록 하겠습니다 괜찮네요
이 Actor의 이름은 SmallRoom02가 되겠네요
그리고 침실 안쪽 이것도 밖에 있는 01
이 Actor를 그대로 복제를 하면
한 방에 해결이 되죠 탁 하고 맞춰주도록 하겠습니다
이름도 SmallRoom03 이렇게 만들어 주면 되겠죠 간단하죠?
주방을 만들어 볼까요 주방이 지금 여기만큼
주방의 벽이 이렇게 2200만큼 있으니까
벽을 또 만들어 주도록 할게요
복제를 해서 Y축으로 220만큼 맞춰주고요
이름도 Kitchen이라고 할게요
Kitchen01 이렇게 만들어 주도록 하겠습니다
위치를 이렇게 딱 갖다붙여서 막히게 해주시고요
그다음에 여기도 이렇게 좀 길게 갈까요
이 길이는 여기 위에 있는 WashRoom
화장실에 의해서 길이가 나올 것 같으니까
화장실까지 만들어 주고 갈까요
여기 있는 것을 그대로 복사를 해서
이름을 화장실 WashRoom이라고 할게요
이 벽은 200이네요 좀 짧아요
그래서 이 정도로 만들어 주고요
WashRoom의 세로 벽을 또 만들어 주도록 하겠습니다
드래그 앤 드롭해서 이렇게 만들어 주고요
역시 마찬가지 X축의 길이가 정확하게 나와 있지 않기 때문에
이것도 임의로 맞춰주도록 하겠습니다
X축을 한 150 정도로 만들어 볼까요?
180 정도로 할게요 180 정도로 하고
벽 두께 Y축으로 10만큼 만들어 주겠습니다
이렇게 맞춰주고요
그다음에 여기 끝에 이렇게 있으니까 이렇게 좀 더 갈게요
이게 좀 헷갈리니까 이거를 살짝 뺐다가
이렇게 붙여 놓고 다시 이렇게 가져오면 맞죠?
이 이름도 WashRoom02로 할게요 이렇게 01, 02
다음 여기에 이렇게 벽이 있으니까
WashRoom01을 복제해서 이렇게 가지고 오면
간편하게 만들어지겠네요
이렇게 만들어주겠습니다 이름은 WashRoom03
여기에 있는 벽이 그대로 쭉 하나로 오면 좋을 것 같으니까
저 왼쪽에 있는 복도에 있는 이 벽을 갖다가
그대로 복제를 해서 이렇게 가지고 오면
해결이 되겠죠 간단하네요
그럼 이제 여기 이만큼 길이가 나오겠네요 만들어보죠
박스를 가지고 와서
X축은 벽 두께니까 10이라고 해주고요
위치는 이만큼 옮겨주고 높이는 그냥 2미터 두고
Y축으로 계산을 해보니까 670 정도가 나올 것 같아요
한번 해볼게요 Y축으로 670
딱 하니까 안 맞죠
지금 현재 아마 이 가운데 벽도 있고 하다 보니까
살짝씩 안 맞는 느낌이에요
690 살짝 안 맞죠
그래서 700으로 가보겠습니다 딱 맞네요
아무래도 이 벽이 가운데에 들어가 있는 것 같네요
완료가 됐죠 그러면 바로 침실로 넘어가 볼까요
침실도 박스로 드래그 앤 드롭해서 가지고 오도록 할게요
X축이 벽 두께니까 X가 10
그리고 큰 침실의 Y축이 330이네요
이동을 해주고 옮겨주고
이름도 바꿔주도록 하겠습니다
이름은 큰 방이니까 BigRoom01로 할게요
보니까 여기 밑에도 이름을 지어주지 않았네요
여기 이름은 Kitchen이었죠
Kitchen02로 붙이면 되겠네요 간단하네요
이것도 Hallway가 아니죠
이거는 큰 방으로 칩시다
BigRoom02로 가도록 하겠습니다 1번, 2번
BigRoom02를 또 복사를 해서
이렇게 Alt키로 복사하고 있어요 이렇게 붙이면
오른쪽 벽이 완료가 되는 걸 볼 수가 있죠
위에 있는 BigRoom01도 복제를 해서
이렇게 가지고 오면
아래쪽 벽도 닫힌 걸 볼 수가 있네요
이름만 정리를 하면 좋을 것 같아요 04, 03 이렇게요
마지막으로 발코니가 남았네요
발코니도 만들어 보도록 하죠 박스를 가지고 와서
여기 위에 있는 벽을 만들어 보도록 할게요
X축으로 벽 두께니까 10
그다음에 가로로 1500으로 되어있네요 그래서 Y축으로 150
이렇게 맞추면 얼추 맞죠?
이름을 바꿔 주겠습니다
이렇게 이름을 바꾼 Actor를 선택해서 복제를 할게요
Alt키 눌러서 복제를 합니다 이렇게 바꾸면
이런 식으로 두면 아래쪽 마킹이 되죠
이름은 Balcony02가 되겠네요
외곽에 있는 이 라인만 그대로 맞추면 되겠네요
안에 있는 큰 방 벽을 카피해서 막으면 딱 되겠어요
이름만 바꾸면 되겠네요
이름은 Balcony03 이렇게 하면 되겠죠
이렇게 만들어졌는데 아래쪽을 보니
우리가 작업하는 과정에서 약간의 오차가 생기면서
이런 식으로 구멍이 생기게 됐어요
이 구멍 같은 경우에는
Ground Actor를 선택한 상태에서
지금 보니까 오류인 것 같은데
Surface Properties 닫으면 밑으로 나와요
Brush Settings에서 XYZ를 조정해서 맞출 수도 있지만
지금 계산하기가 너무 복잡하죠
수치를 얼만큼 입력하면
Y축으로 얼마만큼 늘어나야 이게 맞을까?
좀 헷갈릴 거예요
그래서 Geometry는 사실상
이렇게 수치로도 입력할 수 있지만
수작업으로 손으로 직접 이 형태를 만들 수 있게끔
그런 기능을 제공하고 있어요 어디서 만드느냐
수정할 오브젝트를 선택하고요
왼쪽에 Selection Mode를
Brush Editing이라고 하는 모드로 바꿔줍니다
이 Brush Editing Mode는
Geometry Brush를 수정할 수 있는
그런 모드라고 생각하시면 돼요
그래서 내가 선택한 Geometry Brush Actor를
수정하는 공간으로 들어간 거예요
그래서 지금 왼편에 보시면 여러 가지 옵션들이 있죠
이 옵션들이 Brush Editing이라는 패널 안에
이렇게 나와 있고요 이 옵션들을 이용해서
Actor의 형태를 Editing을 하는 거예요
그래서 보시면 형태가 좀 다르죠
우리가 선택한 Actor는 파란색으로 바뀌고
여기에 보면 모서리 버텍스라고 불리는 모서리
그다음에 엣지라고 불리는 선
그다음에 페이스, 폴리곤이라고 불리는 면
이런 식으로 따로따로 선택을 할 수 있고요
그 선택에 따라서 이렇게 메뉴들이
활성화되는 걸 볼 수가 있을 거예요
간단하게 보면 나는 이 면만 좀 늘려서 여기까지 늘릴 거야
그게 우리가 원하는 거죠
그래서 우리가 이렇게 면을 선택하고
이 면을 이렇게 이동해 주면
이런 식으로 면만 쭉 이동하는
그래서 전체적으로 쭉 늘어나는
그런 형태의 변형을 할 수가 있게 되는 겁니다
Extrude라는 기능도 있고 Split이라는 기능도 있고
여러 가지 기능들이 있어요
이런 기능들을 하게 되려면 연습이 좀 필요합니다
복잡한 형태를 만드는 그런 연습은 사실상
블렌더나 3D MAX, MAYA에서
외부 툴에서 보통 만들어오기 때문에
사실상 여기서는 굳이 이런 것들을 숙달할 필요는 없고요
그냥 간단하게 우리가 원하는 것은 이동하거나
아니면 면을 크게 잘라서
버텍스를 좀 이동하거나 하는 수준의
아주 간단한 작업이지만
여러분들이 알고 계시면 좋을 것 같고요
그래서 우리는 그냥 간단하게
면을 잡고 이동하는 수준으로 마무리를 하겠습니다
Brush Editing Mode를 다시 Selection Mode로 바꿔줘서
모드를 빠져나와야 돼요 그럼 형태도 바뀌죠
다시 회색으로 돌아온 걸 볼 수가 있습니다
그러면 이제 이렇게 잘 메꿔진 걸 볼 수가 있죠
이제 마지막으로 구멍을 좀 내볼게요
Geometry Brush는 Mesh를 구멍을 뚫을 수가 있어요
그래서 이 구멍을 뚫는 기능을 이용해서
우리는 현관문, 방문, 발코니 문들을 만들어 보도록 할게요
먼저 현관문부터 진행을 할게요
현관문을 만들기 위해서는
일단은 박스를 가지고 올게요 박스를 가지고 와서
구멍이 뚫릴만한 크기대로 이 박스를 변형을 시켜 줄게요
그래서 이 박스가 구멍을 내는 용도라고 생각하시면 좋아요
그러니까 X축으로 사람이 들어갈 만한 공간
90 정도로 해놓고요
높이는 2m보다는 좀 작아야 되겠죠
그래서 한 180 정도로 해 볼까요
이렇게 맞춰주도록 하겠습니다
넓이는 이 벽을 뚫을 수 있을 만큼 정도면 되니까
지금 2m는 조금 과하고 한 50으로 줄여주도록 할게요
이렇게 얄팍하게 만들어 준 다음에
구멍을 뚫을 자리에다가 이렇게 위치를 시킵니다
이렇게 위치를 시키고 나서
이 Geometry Brush의 속성을 좀 바꿔 줄 거예요
디테일 창에 보시면 아래쪽에 쭉 내려보시면
Brush Type이라고 하는 항목이 있어요
지금 Additive로 되어있는데
이 Additive를 Subtractive로 바꿔줍니다 클릭
그러면 투명하게 되면서
겹쳐 있는 이 오브젝트를 뚫리게 만들어서
구멍이 난 것처럼 보이죠
이렇게 되면 현관문 구멍이 완료가 됐습니다
이렇게 이동을 하면 그 이동한 만큼 그 공간만큼
구멍이 뚫려져 있는 거예요
그래서 이렇게 원하는 위치에다가
적당히 맞춰놓으면 되겠죠
같은 방식으로 여기도 박스를 놓고
속성을 Subtractive로 바꾸면 똑같은 방식이 되겠죠
저는 복제를 할 거예요 이렇게 복제를 해서
복제된 걸 90도로 회전해서 이동하면 되겠죠
순식간에 작은 방 문이 생겼네요
그대로 복제해서
화장실도 이렇게 만들어 주도록 할게요 됐죠?
침실도 그대로 만들까요?
침실도 그대로 복제를 해서 회전해야 되겠네요
이렇게 회전해서 침실 입구도 만들어 주겠습니다
적당한 위치에다가 됐죠?
또 그대로 복제해서 이렇게 복제해서
좀 늘려 줄게요 X축으로 한 400 정도
이렇게 만들어 주면 뻥 뚫린
너무 크네요 여기는 한 350 정도로만 할게요
조금 뚫린 발코니와 연결된
큰 방과 발코니가 연결되어 있는 큰 창이 생기게 되고요
이걸 또 그대로 이렇게 이동을 하면
베란다가 뚫려져 있는 그런 모습이 되겠네요
베란다는 약간 턱이 있을 것 같으니까 위로 조금 올리고요
그다음에 높이도 조금 줄여주도록 하겠습니다
한 150 정도로 줄이면 이런 식으로
모양을 재밌게 맞출 수도 있겠죠 됐네요
아파트 평면도에서는 나오진 않지만
이걸 응용하면 창문도 뚫을 수가 있을 거예요
이 오브젝트를 선택해서 그대로 복사를 할게요
이렇게 뒤로 복사를 하고
사이즈를 조정하면 되겠죠
사이즈는 높이는 좀 과감하게 줄여주도록 하겠습니다 한 100 정도
그리고 그다음에 Y축으로도 100 정도
좀 더 넓게 갈까요? Y축으로도 한 150 정도로
지금 같은 경우에는 Y축인 줄 알고 Y축을 눌렀더니
X축이 늘어난 걸 볼 수가 있어요
이게 왜 그러냐면 저는 이 오브젝트를
현관문에 있었던 이 Brush Actor를
회전시켜서 만들었단 말이죠
그러다 보니까 이게 어떤 일이 벌어졌냐면
이 오브젝트의 기준이 틀어진 거예요
그래서 상단에 보시면 여기
기즈모 기준을 로컬로 바꿔주세요
지금 월드로 되어 있는 것을 로컬로 바꿔주시면
이렇게 회전되어 있는 모습을 볼 수가 있습니다
이 오브젝트가 갖고 있는 X축의 방향과 Y축의 방향이
회전되어서 틀어져 있다고 볼 수가 있어요
그래서 지금 현재 이 Brush Settings는
로컬 기준의 방향성으로 맞추다 보니까
지금은 Y축으로 150을 늘려서 보니까
이 Y축이 이쪽 방향으로 쭉 늘려진 걸 볼 수가 있는 거죠
그래서 이런 거 바꿔줄 때는
상단에 있는 것을 월드가 아니라 로컬 형태로 바꿔줘야
이 X, Y, Z가 정확하게 표현되는 걸 볼 수가 있어요
그러면 Y축을 150으로 두는 것이 아니라
X가 150이 되어야겠죠
이렇게 맞춰서 창문을 만들어 보도록 하죠 됐네요
안방에도 창문을 두도록 할게요
안방도 그대로 가지고 와서
이렇게 복제를 해서 가지고 오도록 할게요
안방은 좀 더 크게 갈까요?
X로 한 200으로 과감하게 갈게요
큰 통창을 이렇게 두도록 하겠습니다 됐네요
그러면 이렇게 적당히 창문이 있는
이런 아파트가 완료가 됐네요
여기까지 완료가 됐고 일단은 저장부터 할까요?
날아가면 안되니까 다음 작업을 위해서 저장을 할게요
파일에 Save Current Level As를 클릭을 해서
우리가 만든 프로젝트 내부의
콘텐츠 폴더 안에다가 만들어 주도록 할게요
여기다가 우선은 폴더를 하나 더 생성할게요
New Folder를 클릭해서 이름은 레벨이라고 할게요
레벨이라는 이름의 폴더를 만들어서 여기다가
이름을 하나 정하도록 합시다
이름은 아파트 만들 거니까 Apartment
그리고 Save를 눌러서 이런 식으로
프로젝트 내에서 콘텐츠 폴더를 열면
이렇게 콘텐츠 폴더 안에 레벨 안에
이렇게 레벨 애셋으로 저장할 수 있게끔
반드시 프로젝트 내부에 레벨 애셋이 들어가 있도록
저장을 해 주시기 바랍니다
그럼 이번 시간에 학습한 내용을 정리해 보도록 하겠습니다
언리얼 엔진과 그래픽
그래픽 작업 엔진 기본 요소
애니메이션: 캐릭터를 비롯한 오브젝트가 보이는 여러 가지 형태의 동작
UI: 오브젝트의 정보, 움직임을 유저가 인지할 수 있도록 표시
레벨: 지형의 높고 낮음, 즉 공간 디자인 렌더링: 카메라가 찍은 것을 화면에 그려주는 작업
후보정(Postproduction) 렌더링 샷을 편집 및 보정하는 단계
렌더링: 실시간 렌더링 카메라가 이미지를 즉시 모니터에 그리는 방식
비실시간 렌더링 카메라가 이미지를 시간과 상관없이 미리 그려두고 나중에 보여주는 방식
화이트 박싱 제작하기
화이트 박싱 제작 도구
화이트 박스: 콘텐츠 제작 초반 빠른 검증과 수정을 위해 임시로 만든 데이터
Place Actors Panel: Actor를 편하게 사용하기 위한 메뉴 생성
Geometry: 오브젝트의 실제 데이터를 변화하여 형태를 변형하고 자유롭게 편집하는 기능
Brush Editing Mode: 지오메트리 브러시 Actor 수정 모드