2018년 10월 11일 목요일

[2013. 2. 22] 미이라 관을 만들어 봤습니다. (iOS용 게임으로 쓰기 위한 용도)


개인적으로 Unity를 이용해서 iOS / Android 등의 모바일게임을 개발하는 중인데요... 게임중에 미이라관이 등장하기에 ZBrush를 이용해 제작해 봤습니다. (Maya도 약간 사용했습니다)
 
우선 대다수의 분들이 이렇게 시작하시겠지만, 미이라 관 이라는 컨셉트가 정해졌으면, 참고자료, 이미지들을 많이 찾으실 겁니다... 저도 그렇게 시작했고, Google이미지에서 좋은 참고 이미지(맵소스로 까지 활용 가능한...)를 얻었습니다.

 그 중에서도 좌측의 이미지가 마음에 들었습니다.
 우선 게임에 필요한 미이라관의 모델이 거의 고정된 시점으로 정면이 필요했던   점과 부합되었고, 깔끔하게 촬영된 사진이어서 맵소스로 활용하기가 아주 유용할 것이라는 판단에서 였습니다...
 물론 맵소스의 해상도가 크지 않다는 점이 있기는 했지만, 첫째로 모바일게임용이어서 그렇게 큰 퀄리티를 요구하지 않는다는 점이 있었고요. 맵소스로서 전체적인 컬러 텍스쳐만 잡을 수 있어도, 실제 디테일한 것은 직접 coloring해서 추가할 수 있으니까요...
 다음 단계로는 모델링을 시작해야겠죠. ^^
 Zbrush에서 모델링을 시작하기 전에, 이번 작업은 ImagePlane을 써서 Zbrush View내에 이 참고 이미지를 뒤로 깔아놓고 모델링 작업을 진행하기로 결정했습니다...
 
 
 
 
 
 
 
위 이미지의 가로, 세로 비율에 맞춰서 Maya같은 3D툴에서 plane을 만들었습니다.

 
그런데 UV를 위의 이미지에서 볼 수 있듯이 텍스쳐를 모두 감싸도록 UV Texture Editor에서 다 채워주어야 겠죠.
다음은 obj 파일로 export해서 Zbrush에서 불렀습니다.
GoZ같은 간단한 툴을 사용하지 않은 이유는 plane은 단지 하나의 face에 불과해서 볼륨이 아니다보니 Goz로 보냈을 때, 에러가 나더군요... 어떤 옵션이나 처리를 하면 가능한지는 모르겠습니다만, 어차피 obj 형식을 이용하면 잘 되니까요.
 
Zbrush에서 ImagePlane은 subtool에서 import하고, Sphere3D는 subtool에서 Append해서 아래 이미지 처럼 되었습니다.


 
Subtool에서 ImagePlane을 선택하고, 여기에 위 참고이미지를 import해 Texture로 씌워주는데 그렇게 하면 Zbrush의 특성상 위아래로 반대로 보여지게됩니다.
 
 
Texture > 에서 해당 이미지를 다시 import하고 선택한 다음 Texture > Flip V 를 적용해 놓은 후에 다시 Tool > Texture Map 에서 선택해 주면, 올바르게 됩니다.
 
다음은 subtool에서 다시 Sphere를 선택하고서,
Sphere의 꼭지 부분이 위 아래로 향하는 편이 모델리에 도움이 되기에 Tool > Deformation 탭에서 Rotate를 x축으로 90도 돌려서 맞추었습니다.
그러면 이제 Zbrush에서 본격적인 Sculpting을 시작할 수 있게 되었는데, Dynamesh를 사용하는 편이 쉬울 것 같다는 판단으로 Dynamesh로 전환해서 Sculpting을 시작했습니다...
(Sculpting을 시작하기 전에 작업의 시작부터 마지막까지 전체적인 프로세스와 다른 툴과의 파이프라인까지 잘 고려하고 시작하지 않으면 중간에 낭패를 볼 수 있습니다.
저도 시작 전부터 전체적인 파이프라인을 잠깐이나마 생각해보고나서, 어떻게 진행할 것인지 일일히 정한 후에 일을 진행한 것이었습니다.)
사실 이번 모델의 경우는 특별히 Dynamesh를 사용할 이유는 없었습니다. Dynamesh는 예를 들면 사람을 Sculpting하는 경우 처럼 Sphere와 비교해서는 머리, 팔, 다리가 구체로 부터 뽑혀져 나와야 하는 형체인 경우 일반 sculpting을 사용할 땐 뽑아져나온 부분은 폴리곤이 쭉~ 늘어져 버려서 Stretch되어 버리는 문제가 생기는데, Dynamesh를 사용하면, Refresh할 때, 메쉬 전체의 폴리곤이 그 볼륨, 형태를 고려해서 자동으로 잘 배분되어지기 때문에 대단한 유연성과 유용성을 가질 수 있습니다.
이 경우는 구체가 위아래로 전체적으로 길어지는 정도이기에 Dynamesh의 유용성은 크지 않은 편입니다.
 
어쨌든 저의 전체적인 작업 프로세스는
 
앞서 준비한 것 이후에
-> Dynamesh 로 Sculpting
 
-> 게임용의 low poly를 사용하면서도 (LowPoly-HighPoly) Normal map 을 뽑아내고, 또한 Displacement map을 뽑아 이를 텍스쳐맵에 녹여나도록 BakerMap을 사용할 것이어서, Zbrush-Maya-(DX11의 Tessellation도 포함) 등등에서 필요로하는 사각폴리곤(SubDivision Surface전환이 가능한 Topolopy의...) 이 요구됩니다... 최신의 Zbrush에서는 QRemesher 가 이 기능을 대단히 잘 수행해 주기 때문에 앞서 Dynamesh를 쓰더라도 마음놓고 작업할 수 있습니다. 참고로 Dynamesh는 Scupting에 엄청나게 유연하지만, Maya 등 다른 툴에서 normal map/displacement map 등 특히나 Tessellation이 요구 될 때, Topology의 차이로 인해 문제가 될 수 있습니다. 그렇게 QRemesher를 적용해 원하는 Topology의 lowpoly 모델을 얻어내고 -> 필요한 만큼 Divide를 수행하여(여기서는 6단계) HighPoly 작업까지 수행했습니다.
 
-> 다음은 UV작업인데, LowPoly에서 했어야 하는데, 이미 Divide를 수행한 다음에 UV작업을 하게 됐습니다. 최신의 Zbrush에서는 이러한 작업이 가능합니다. Tool > Geometry > Freeze SubDivision Levels 기능이 생겼기 때문이죠... UV작업에는 ZPlugin > UV Master를 사용했습니다. 우선 Tool > Geometry > 에서 가장 lowpoly로 내려놓고 Freeze SubDivision Levels를 켰습니다. 이러면 UV master작업이 가능해 집니다.
 
-> UV를 Copy / Paste 해서 작업을 마친 후에 Freeze SubDivision Levels를 다시 끄고, 필요한 HighPoly로 옮겨가면서 디테일 Sculpting작업을 합니다.
 
-> 좋은 참고이미지를 가지고 있으므로, PolyPaint를 켜고, SpotLight 기능을 이용해서 텍스쳐링을 수행합니다. Tool > Texture Map > Create > New From Polypaint 를 해서 텍스쳐를 만들어놓습니다.
 
-> 가장 낮은 LowPoly로 옮겨놓고서, Displacement Map / Normal Map 등을 생성합니다.
 
-> DisplacementMap과 재질이 모두 담긴 Texture를 뽑아내기 위해서 Matcap Baker(무료 Plugin)을 사용했습니다. 재질은 Material > SketchToyPlastic 이 좋아서 이것을 사용했습니다.
 
-> GoZ로 Maya로 보내고, 여기서 LowPoly model 을 Joint를 입히던지 그냥 사용하던지 필요에 따라서 작업하고, FBX파일로 Unity로 보내서 게임에 사용하게 됩니다.
Maya에서 필요에 따라 Rendering > Lighting/Shading > BatchBake(MentalRay)ㅁ 를 사용해서 Occlusion map을 만든다거나 멘탈레이 GI/FG , HDR 등등이 적용된 텍스쳐를 생성해 낼 수도 있습니다.
 
이상이 전반적인 작업 프로세스입니다.
이제 좀 더 자세히, 하나씩 살펴보겠습니다...
 
Dynamesh로 전환은 Resolution을 32로 했습니다. 작은 편이긴하나 미이라관의 형태가 복잡한 것이 아니기에 시작으로 전체적인 형태를 잡는데에는 그리고 Topology 형태를 잡아내는 데에는 적당합니다.
 
그리고나서 Tool > Geometry > qRemesher 를 사용해서 필요한 Topology mesh로 전환했는데, 역시 복잡한 형태가 아니기에 Dynamesh 그대로인 상태에서 AutoMask를 켜고 Same 을켜서 기존 Dynamesh와 같은 수의 polygon count를 유지하도록 했습니다. 필요에 따라 옵션을 잘 조절해서 전체적인 폴리곤 수는 늘이고 줄이고 가능합니다. 이제 QRemesher 버튼을 클릭해서 사각폴리곤으로 전환합니다.


 
이런식으로 됩니다.
 
사실 이 단계에서 ZPlugin > UV Master 를 사용해서 UV를 생성하는게 맞습니다...
그렇지 않고, Divide를 이미 실행하고서, Sculpting작업 및 PolyPaint를 켜고 Coloring(Texturing) 작업까지도 이미 수행했을 때는, 앞서 말한 Freeze SubDivision Levels 를 켜고(가장 낮은 Level에서) UV Master작업을 합니다.
또다른 방법은 WorkOnClone으로 복사모델을 만들어 그 UV를 작업하고 Copy / Paste를 이용해서 UV를 작업모델로 복사해 오는 방법을 쓸 수도 있습니다.
Protect를 전체적으로 칠해주고, Attract 를 모델의 등쪽에 수직으로 그어놓고 UV를 생성합니다.



 
이제 UV Master 탭안에서 Copy UVs 를 클릭해서 메모리로 UV를 복사해 둡니다. (물론 그전에 UnFlatten은 해야겠죠^^)
다시 Tool 에서 UV작업을 위해 복사한 모델이 아닌 기존의 모델을 선택합니다.
그리고 ZPlugin > UV Master 탭에서 Paste UVs를 이용 작업하는 기존 모델로 UV들을 붙여넣으면 UV작업이 완성됩니다...
Freeze SubDivision Levels 를 켰으면 이제 끄고 작업하면 됩니다.
SDiv를 올려서 필요에 따라 올리고 내리면서 Sculpting을 수행합니다.
 

 
대략 빠르게 위 이미지 정도로 제작을 했습니다.
크게 디테일할 필요도 없었고, 게임상에서 그런 디테일이 드러나지도 않을 것이기에 이 정도만 하면 충분했습니다. 또 텍스쳐가 잘 입혀지는 것이 더 중요하고요...
 
다음은 텍스쳐를 SpotLight기능을 사용해서 입혔습니다... 측면부분도 정면의 이미지만 있지만, 정면의 이미지를 칠하고 남은 부분에 잘 연결되게 맞춰서 칠해주었습니다.



당연하지만, SpotLight로 Coloring할 때는 RGB(또는 필요에 따라MRGB)만 켜고, ZAdd/ZSub는 꺼야겠죠.
 
이제는 이 PolyColor를 텍스쳐로 전환합니다.
기왕이면 최대 SubDivision Level에서 Tool > Texture Map > Create > New From Polypaint 를 사용합니다.
다음은 최하레벨로 내리고, NormalMap을 생성합니다.
 
여기서 Tool을 저장을 해 두는 것이 좋습니다.
MatCap Baker는 모델 자체를 바꿔버리기 때문이죠.
이제 MatCap Baker로 재질, 디스플레이스먼트맵이 적용된 텍스쳐를 생성합니다.
이것은 Plugin으로 pixologic 에서 다운 받을 수 있습니다.
아래는 MatCap Baker를 사용해서 Texture를 생성해낸 이미지입니다.


 
MatCap Baker를 사용할 때는 주의해야 할 점이 있습니다.
실행하고 난 이후에 Frame / Move / Scale / Rotate 등 카메라를 움직이면 안된다는 것입니다. 사실 이 기능은 모델을 UV를 따라 Flatten 한 것으로서 UV Map에 딱 맞춰줘 있는 것이기 때문이죠... Canvas를 움직이는 Scroll / Zoom 을 사용하면 됩니다...
이제 이 Document를 Export 하면 Texture가 만들어 지겠죠.
또는 BPR렌더를 사용해서 뽑아낼 수도 있을 거구요.
 
이제 앞서 저장한 Tool을 다시 불러와서 GoZ 나 Export를 사용해 Maya로 보냅니다.
다음은 Maya에서 본 화면입니다. (ViewPort 2.0)


 
이렇게 대략적으로 알아봤습니다.
실제로는 Unity의 Shader에 알맞게 부가적인 작업이 필요할 수도 있습니다만...
지브러쉬의 작업은 모두 마쳤다고 볼 수 있겠습니다.
 
참고로 모바일 게임용 작업이라고는 하나 작업 파이프라인과 프로세스는 애니메이션, 영화용 작업도 거의 마찬가지로 볼 수 있습니다.
다만 여기에서 더 나아가 이들을 이용 더 다양한 맵소스를 만들어내기도 합니다만 (즉, 스페큘러맵, SSS용 맵이라거나 Ambient Occlusion 맵 등등) 
그리고 마야 같은 툴에서 퀄리티 향상을 위한 더 많은 작업을 하게 되겠지만요. Pass렌더링 등...
 

댓글 없음:

댓글 쓰기