2014. 12. 17.

Xoio Berlin Flat 제작기

글쓴이 Lasse Rode,

소 개

제 이름은 Lasse Rode이고 저는 스튜디오 xoio에서 일하고 있습니다. 저희는 소규모 대행업체로 건축과 제품 마케팅 영역에서 시각화와 일러스트레이션 업무에 특화된 업체입니다. 저희는 주로 "전통적인" 3D 제작 툴인 3ds Max와 기타 유사한 프로그램을 사용합니다. 현재는 Corona Renderer, V-Ray, Octane 등을 많이 사용하고 있지만 저희는 지속적으로 새로운 랜더링 엔진의 소식에 귀를 기울이고 있습니다. 이 엔진들은 각자의 장점이 있고 저희는 항상 목적에 맞도록 그 점을 살려내려고 노력합니다.

제가 보기에 저희 쪽 업계에서는 실사화 하려는 측면과 실시간이 아니라면 빠르게 랜더링 하려는 측면 등 여러 가지의 주류 트렌드가 있었습니다. 특히 애니메이션을 랜더링 할 때 처럼 랜더링 걸어 놓고 기다리지 않는 것은 저희에게 항상 꿈같은 것이었습니다!

"실시간" 측면에서 주요 문제점으로는 미리 랜더링 한 정지 이미지나 애니메이션에 비해 품질이 저하되는 것이었습니다. 그럼에도 불구하고 아주 흥미로운 것이, 제반 사항을 가지는 방식으로 시각화를 한다는 것은 쉽지 않은데다가, 솔직히 "게임같은" 모습은 건축과 브랜드 분야에서 수요가 많은 고객들을 대상으로 판매고를 높이기가 어려운 것이 사실이라는 점입니다.

이런 판도가 급격하게 변하였습니다. 그 결과는 오늘날의 실시간 엔진을 가능하게 하였고 보기에 그럴 듯 하면서도 아주 아름답습니다.

어째서 언리얼 엔진을 선택하는거죠?

언리얼 엔진 4의 출시는 업계에서 엄청난 주목을 받았으며 그 가능성 또한 무한해 보였습니다. PBR(물리 기반 랜더링) 머티리얼 시스템과 사용하기 쉬운 언리얼로의 임포팅 파이프라인에 출력 가능한 품질까지 가세하여 강제로 사용을 시도 하게 만드는 이유를 충족시켰습니다! 여러분께서 몇 주 전에 입소문이 났던 Koola(마켓플레이스에서 다운로드 가능합니다.)의 작품을 보셨다면 저희만큼 언리얼 엔진 4가 인상적으로 높은 품질을 낼 수 있다는 확신을 하셨을 것입니다.

이어지는 포스팅에서 여러분이 마켓플레이스에서 다운로드 하실 수 있는 Berlin Flat scene을 제가 제작하게 된 과정과 몇가지 요령에 대한 윤곽을 보여 드리고자 합니다. 몇 가지는 제가 직접 알아낸 것이고, 나머지는 인터넷에서 알게 되었습니다. 언리얼 엔진 포럼문서, 엔진에서 기본으로 제공하는 사용자용 컨텐츠, 마켓플레이스에서 구매 가능한 애셋들은 방대하고 굉장한 정보의 보고가 되어 주었습니다.

The Berlin Flat

베를린에서 역사적으로 유명한 건물 내 아파트의 랜더링 이미지를 2013년 초에 3ds Max와 Corona Renderer를 사용하여 여러 장 제작하였습니다. 이 방법으로는 전체 세트의 하얀 분위기를 뽑아 내는 데 정말 도움을 많이 주는 컬러 매핑을 쉽게 다룰 수 있습니다. 제가 이런 이유 때문에 언리얼 엔진을 시범적으로 사용할 때 위 방법을 선택하였습니다.

저는 UE4가 우울한 분위기의 라이팅과 복잡한 텍스쳐 등이 있는 씬에서 매우 성공적으로 사용되어 왔다는 것을 알게 되었습니다. 저는 엄청 하얀 인테리어에서 정확한 쉐도우와 GI를 얻는 것은 쉽지 않겠다고 생각했습니다.

솔직하게 말씀드리자면 요령이 있습니다!

Realtime Berlin Flate

위 사진은, 3ds Max와 Corona Renderer로 랜더링한 원본 이미지 입니다. 전체 사진을 보시려면, 여기를 누르시기 바랍니다.

하지만 처음부터 시작하도록 하겠습니다.

원본 씬

original scene

전체 모델링은 3dsMax에서 급하게 만들었기 때문에 최종 이미지에서 보이는 부분만 자세하게 만들었습니다. 이런 제작 방법은 실시간 랜더링 환경에는 당연히 적합하지 않습니다. 언리얼 엔진으로 재사용하기 위해 저는 범위를 좀 줄일 수 밖에 없었는데, 테스트 목적으로 공간 전체에 가구를 배치하고 상세하게 세팅하는 것은 시간낭비이기 때문입니다.

저는 방 2개만 익스포트 하기로 했습니다. 위 스크린 샷의 왼쪽에 보이시는 것입니다.

Unreal Engine으로 지오메트리 익스포트

몇 가지만 명심하면 이 부분은 아주 쉽습니다!

몇 가지로 나눠 놓는 것이 이치에 맞는 이유는 라이트매스가 모든 오브젝트의 각 나눠진 맵으로 계산이 되기 때문이고, 벽이나 천장같이 넓은 물체를 다룰 때에는 특히 조심해야 하는 게 좋기 때문입니다. 이런 이유 때문에 저는 실제로 보이는 벽의 안쪽 면만 익스포트 하였습니다.

저는 벽의 윗면과 아랫면을 조금 늘려서 천장과 겹치도록 하였습니다. 저는 "빛이 새는"것을 방지하는 데 좋은 방법이라고 생각합니다. 복잡한 텍스쳐가 잔뜩 들어있는 우울한 씬에서는 빛이 새는 문제가 발생하지 않지만 우리는 아주 밝은 공간을 만들 것이기 때문에 특히 모서리 등에서 최대로 정확한 GI를 얻는 것이 중요합니다.

exporting the geometry for Unreal Engine

두 번째 중요한 것은 GI가 저장될 언리얼 엔진 라이트매스 계산 채널에 래핑되지 않은 UV좌표를 채워 넣는 방법으로 비워 둬야 한다는 것입니다. 3ds Max에서는 UV채널 2입니다.

채널1은 디퓨즈, 러프니스, 노말 기타 등등으로 사용할 수 있습니다. 언리얼 엔진은 채널 번호를 0부터 사용합니다. 처음 사용하는 데 헛갈릴 수 있지만, 한 번 이해하면 그 뒤로는 쉽습니다.

중요: 언래핑으로 채널 비우기는 라이트맵 채널에만 해 주면 됩니다! 텍스쳐 채널에는 큐브, 원통형 매핑 등 아무 매핑이라도 상관이 없습니다. 대부분의 경우 3ds Max의 unwrap이 간단한 "플래튼 매핑"으로 적절한 UV좌표를 만들어 줍니다.

lightmap channel

3ds Max에서 제작한 것들을 언리얼 씬에서 조립하고 싶다면 , 전체 "스페이스"를 그냥 그 위치에서 익스포트 하는 것이 낫습니다. 왜냐 하면 물체의 좌표를 쉽게 정렬할 수 있기 때문입니다. 의자나 기타 애셋들처럼 간단한 것은 하나만 익스포트 하고 언리얼에서 인스턴스화 하기 매우 편리합니다. 이런 경우에는 애셋을 3ds Max의 중심으로 가져온 다음 익스포트 하는 것이 좋은데, 왜냐하면 새로운 오브젝트의 피벗 센터가 중심에 위치할 것이기 때문입니다.

chair 1

chair 2

여러분은 제가 LOD 없이 고폴리곤 지오메트리를 그대로 사용하는 것을 보실 수 있을 것입니다. 이 것은 당연히 이번 프로젝트처럼 작은 씬에서만 권장되는 것이지만, 한 번 겪어본 저로써는 제 가구에 덜 다듬어진 모양이 생기는 게 싫어서 어쩔 수 없이 사용합니다. 뭐, 최적화 시키는 방법이 있긴 하겠지만요. ;)

여러분의 애셋들이 하나의 오브젝트로 합쳐지도록 만들고 서로 다른 머티리얼 아이디를 갖도록 해서 나중에 언리얼에서 조정하도록 하세요!

음, 그럼 지오메트리를 .fbx파일로 저장하시고 프로그램을 닫고 언리얼 엔진 에디터를 켜시면 됩니다!

Unreal Engine 4에서 임포트 하기

FBX파일을 언리얼 4로 임포트 하는 것은 아주 부드럽게 진행됩니다! 저는 이 과정을 몇 단계로 나눠서 진행했습니다.

저는 합리적이도록 몇 개의 파일로 나눠서 준비 해 두었습니다.

  • 방의 지오메트리를 따로 fbx파일로
  • 각 에셋마다 구분하여 내부에 오브젝트를 포함시켜서

오브젝트를 나눠서 임포트 하기 위해 "Combine Meshes"를 반드시 체크 해제 하셔야 합니다.

Combine Meshes

머티리얼

저는 매우 직관적인 사람이고 단순한 설정을 좋아합니다! 철학적인 이야기지만, 무언가를 얻을 때에는 가능한 적은 노력만 투자하는 것이 당신만 아는 설정으로 만들거나, 반년 뒤에 까맣게 잊어버리는 것 보다는 훨씬 낫습니다.

이 쉐이더 예제는 디퓨즈 맵 하나로 구성되었고 무채색화 되고 검은색으로 블랜딩 된 것으로 아주 간단합니다. 동일한 맵에서 색 변경하고 색 반전하여 머티리얼의 러프니스 채널에 넣으면 끝입니다. :-D

Materials

노말맵을 잔뜩 써보고 싶었지만... 어쨌든 여러분의 씬을 위해 머티리얼들을 자유로이 살펴 보시기 바랍니다!

Normal Map

여기 보시듯 테이블과 의자에 나무 머티리얼을 적용하였습니다. 무늬와 질감을 간결하게 반사하며 검은 색으로 염색된 나무입니다.

이 이미지에서 보시는 두 개의 머티리얼이 아마도 흥미롭게 다가올 것입니다. 커튼은 후광이 비치는, 양면 머티리얼입니다.

back-lit sunlight

쉐이딩 모델을 "Subsurface"로 설정하고 1보다 작은 값으로 Constant 노드를 만들어 오파시티 값에 연결 해서 이러한 효과를 냅니다.

전면에 컵에는 매우 단순한 글래스 머티리얼이 들어가 있습니다.

foreground material

꽤 어두운 디퓨즈 컬러가 들어갔고, 러프니스가 0이며 높은 스패큘라 값이 들어가 있습니다. 또한 저는 오파시티와 리프렉션을 조절하기 위해 프레스넬 노드를 1.5 값으로 연결시켰습니다. 더 실사같은 유리를 만들기 위한 복잡한 과정이 더 있지만 지금은 솔직히 말씀드리자면 제가 완전히 이 것을 조정하는 데 어려움이 있어서 최대한 좋게 보이면서 간단하도록 만들었습니다. :)

제는 디테일 탭에서 "Two Sided"에 체크 하였고 Translucency Lighting Mode를 "TLM Surface"로 선택하였습니다.

TLM Surface

여기서 제가 보여드리고 싶은 머티리얼 한 가지는 바닥입니다. 왜냐하면 유일하게 노말맵이 적용된 것이기 때문입니다.

Material for Floor

여기에 디퓨즈 컬러, 러프니스 텍스쳐와 노말맵으로 정의된 머티리얼이 있습니다.

디퓨즈 컬러는 아주 단순하고 가벼운 느낌의 회색으로, 4 축 값의 상수로 정의됩니다.

러프니스는 좀 더 복잡해 보입니다. 왼 쪽에 보시는 것은 TexCoord 노드를 이용하여 3배 한 것입니다. R 채널은 바닥 판자에 미묘한 노이즈 반사 효과를 얻기 위해 다른 채널과 곱해지고 Lerp 노드의 알파 값으로 0.3과 0.2 사이 값을 얻기 위해 입력됩니다. 그리고 나면, "Power"노드를 이용해 미세 조정을 하여 보기 좋을 정도로 적절한 러프니스 값을 얻어 냅니다.

다시, 노말맵은 머티리얼상의 미묘한 완화를 위해 TexCoord노드와 "FlattenNormal"노드를 통해 어느 정도 평탄화 됩니다.

애셋 설정하기

씬에 애셋을 추가하기 전 항상 머티리얼을 지오메트리 에디터에서 적용하는 게 가장 좋습니다. 여러분은 여기에서 적용하고 나서 다시 메인 씬에서 적용할 수도 있습니다. 여러분께서 보시듯 이 과정은 아주 빠르며, 서로 다른 아이디의 머티리얼을 제 위치에 적용하는 것이 중요합니다.

Preparing Assets

씬 만들기

그럼, 이번에는 정리를 좀 해고, 조립을 해 보겠습니다. 먼저 여러분은 room 지오메트리를 끌어 옵니다. 필요한 모든 파트를 선택해서 씬에 드래그 해 넣는 게 가장 좋은 방법입니다. (익스포트 할 때 좌표를 생각하여 만들었으므로, 드롭 위치가 동일하기 때문에 한 번에 설정이 됩니다.) 그리고 나면 모든 가구와 애셋들이 제 자리에 위치가 됩니다.

Building the scene

여기에 (안) 보이는 벽의 뒷면이 있습니다. 제가 위에 설명드렸듯, 라이트매스 계산을 위해 단면으로 제작하는 것이 더 좋습니다.

이런 정확한 목적에 부합하도록 라이트맵 해상도를 큰 오브젝트에는 크게 주는 것이 좋고, 저의 경우 벽에는 2048을 주었습니다.

Lightmap for large objects

위에서 말씀드렸듯, 빛이 새는 현상은 문제가 될 수 있습니다. 이 문제를 방지하기 위해 저는 검은 박스 안에 전체 씬을 넣었습니다. 밖에서 보면 좀 지저분하지만, 안 쪽에서는 더 깔끔하게 보입니다.

black boxes around whole scene

라이팅과 라이트매스

라이팅 또한 꽤 간단하게 설정하였는데, 저는 "Koola 방식"을 사용했습니다. 태양 입사를 통한 스카이 라이트를 시뮬레이션 하기 위해 스포트 라이트를 창문에 붙였습니다. 이렇게 하는 것이 효율적이고 쉽게 조정할 수 있게 됩니다.

그럼, 지금 상황에서는 글로벌 일루미네이션을 단 몇 가지의 설정 변경만으로 하는 것이 중요하게 됩니다.

Global illumination tweak

저는 라이트 반사와 간접 라이트 퀄리티를 극적으로 늘렸습니다. 저는 또한 smoothness를 0.6으로 줄였습니다. 세부 사항이 더 낫게 보이고 그림자가 약해 지는 현상이 줄었습니다.

저는 다이렉트 라이트를 다이내믹 쉐도우로 바꿔서 그림자 품질을 높였습니다. 이런 설정은 나중에 애니메이션에서 라이팅의 품질을 높이는 데에도 중요하게 작용합니다.

getting better shadows with dynamic shadow

"빌드"를 누르기 전 마지막 작업은 라이트 퀄리티를 "Production"으로 바꾸는 것입니다!

Lighting Quality to Production

이렇게 설정하시면 모든 부분에 부드러운 라이팅이 적용되게 됩니다!

저는 실제 이 설정을 처음 적용하였을 때 전율이 몸을 감쌌습니다! 사람을 전율시키는 것은 정말 이 엔진 최고의 장점입니다! 실시간으로 여러분의 "랜더링" 속으로 들어갈 수 있는 것은 진정 행복한 순간임에 틀림 없습니다!

"포스트 프로세싱"

가장 좋은 기능은 컬러 교정과 카메라 효과를 에디터 안에서 바로 설정할 수 있다는 것입니다. 이 기능은 global settings에서 PostProcessVolume으로 조정합니다. 저는 채도, 술 장식(커튼 등의), 도안 등에 약간의 변형을 가하였고, 자동 노출 값을 최소 1, 최대 1로 설정해서 사실상 껐으며, 노출 바이어스 값을 1.42정도로 증가시켜서 전체적인 밝기를 증가시켰습니다. 저는 또한 실시간 효과로 정말 멋지다고 생각하는 렌즈 플레어를 추가하였습니다.

Post Processing

애니메이션 설정하기

씬에서 자유로이 움직일 수 있는 능력은 애니메이션을 매우 쉽게 만들 수 있도록 돕습니다. 리얼타임의 특성상 즉각적인 피드백을 받을 수 있기 때문입니다. 제작 툴을 자주 써 본 입장으로 마티네 툴을 익히는 데에는 시간이 얼마 들지 않았습니다. 먼저 마티네 액터를 설정하도록 하죠.

Setting up the Animation

마티네를 열면 여러분은 트랙이 있는 섹션과 커브 에디터를 볼 수 있을 것입니다.

카메라를 설정하고 애니메이션이 동작하는 것은 아주 자명하게 되어 있습니다. 움직임은 키프레임에 의해서 설정되고 커브는 기타 다른 애니메이션 소프트웨어처럼 동작합니다. 그리고 "컷 씬"제작 또한 마티네 에디터에서 완성됩니다.

저는 공간을 따라 움직이는 카메라 동선을 몇 가지 만들었습니다. 현재 작업하고 있는 과정을 정확하게 볼 수 있는 것은 컷 씬의 타이밍과 카메라 이동 속도를 조절하는 것에 많은 도움이 됩니다.

created a couple cameras

여러분이 보시듯 카메라의 이동 경로를 보면서도 빠르게 직접 조정할 수 있습니다!

마티네에서 대강의 "컷 씬" 제작을 마치면, 저는 전체 애니메이션을 avi 파일 포맷으로 익스포트하고 Premiere에서 미세 조정 및 음악 추가를 합니다.

결 론

3ds Max에서 언리얼 엔진으로 임포트 하는 곳으로부터 시작하여, 쉐이딩, 라이팅으로 애니메이션을 생성하고 유투브에 올리기까지 하루가 걸렸습니다. 이것은 건축시각화 분야에서 전대 미문의 작업 속도이며 언리얼 엔진의 시각화 작업 분야 사용에 있어 핵심적인 가능성을 보여주고 있습니다.

이미지 "제작"이라는 관점에서 실시간 랜더링이 되는 것은 제작 과정을 매우 유연하고 자유롭게 만들어 줍니다. 여러분의 입력에 반응하는 빠른 피드백은 진짜 혁명인 것입니다!

저희는 지속적으로 이런 종류의 결과물과 작업 방식을 우리의 평소 업무와 주변 환경을 통틀어 적용시킬 가능성에 대해 생각하고 테스트 합니다.

적용 가능한 방법들이 더 많이 존재할 것입니다. 저희는 이런 방법들을 열렬히 더 찾아내고자 합니다!

저는 제 스스로의 동기와 과정에 통찰력, 그리고 많은 즐거움을 Berlin Flat scene을 통해 주었기를 바랍니다. ;)

- Lasse

xoio

최근 게시글

Andy Serkis가 비디오 게임 기술 속 언리얼 엔진의 발전을 논하다

언리얼 엔진으로 제작된 Planet of the Apes: Last Frontier는 동명의 Fox 영화 프랜차이즈를 인터랙티브 엔터테...

Stonehenge VR SANDBOX로 독창적인 스톤헨지를 건설해 보십시오.

VR을 직접 경험한 후 열정으로 가득해진 Jessica Villarreal과 Christian Bretz는 즉시 VR이 가지고 있는 잠...

Maelstrom의 환상 속, 높은 파도가 치는 위험한 바다

Maelstrom은 해상 전투에 수많은 커스터마이제이션을 가진 아케이드 스타일의 액션과 판타지의 분위기를 합쳐, 여러분이 이 장르에 대...