본문 바로가기
유니티 엔진

닥터 프로스트 군중작업을 위한 유니티 연구 이야기 #2

by 대마왕J 2021. 9. 18.

https://chulin28ho.tistory.com/674 에서 이어집니다. 

 

닥터 프로스트 군중작업을 위한 유니티 연구 이야기 #1

지난 시간의 닥터 프로스트 배경작업 이후로, 역시나 유니티에 관심이 많아지신 이종범 교수님이 또다른 제안을 들고 오셨습니다 "캐릭터 움직일 수 있죠? 기존의 에셋스토어에 캐릭터들요" "움

chulin28ho.tistory.com

이렇게 캐릭터가 움직이는 실험은 대충 되었고, 이번에는 배경과 카메라를 받아 군중을 배치해야 할 타이밍이었습니다. 

그 때 스케치업으로 광화문 중심부가 거의 다 구현된 거대한 파일을 구해주셔서 이걸 어떻게 유니티로 얹나 .. .라는 고민을 하기 시작했죠. 게다가 원하시는 카메라 뷰도 거기에 있었음. 

일단 무식하게 유니티로 얹어 보는것 부터 해보았습니다. 
스케치업 파일을 FBX로 컨버팅하여 무려 950메가에 달하는 파일이 된 것을  

... 역시나 그냥 올리니 대 환장 
저기 보이는 기즈모 부분에 작은 주황색이 1m 짜리 박스인데, 지금 세종대왕상이 약 120미터로 들어와 버렸습니다. 
이건 3D 어플리케이션 간의 스케일 문제. 


당시 RTX2060 그래픽 카드를 장착한 컴에서도 이 데이터는 무척 버거운 데이터였습니다.  시간이 오래 걸려서 겨우겨우 로딩. 그런데 Z 문제와 그림자 문제가 발생하는군요. 당연한 것이, 스케일이 이렇게 크면 어쩔 수 없지요. 



뭐 원래 게임용 데이터가 아닌걸 가져다가 게임엔진에 얹으면, 그렇게 쉽게 되지 않는게 정상이예요. 
게임은 게임에 걸맞는 최적화 방식이 있거든요. 

그래서 우선시되어야 하는 작업은 , 스케일을 맞추는 거였습니다. 
게임 엔진에 내장된 스케일로 처리하는 것은 매우 위험한데, 스케일 작업을 하면 엔진에서 실제로 그 연산이 추가되는 것이기 때문입니다. 여기서는 아예 처음부터 물체의 크기를 맞추거나 해야 하는데 불가능하므로,  Import 에서 Scale Factor를 조절하는 것이 해결책이었습니다. 

그래서 스케일 펙터를 0.079로 해 주었습니다. Apply를 누르고 적용되기 위해 오랜 시간을 기다려야 하더군요. 

오랜 시간이 걸려 스케일 작업이 완료되었는데 문제가 생겼습니다. 일부 데이터들은 스케일이 줄어들지 않는 것이지요. 

원인을 파악하고 싶었지만 이렇게 작업이 오래걸려서야 시간낭비라고 판단되고, 아예 3Dmax에서 FBX를 다시 불러들여 최적화를 하고 엔진으로 가져오는것이 효율적일거 같다는 생각이 들었습니다. 어쨌거나 고통... 

 

그렇게 고생하다가, 버전을 업그레이드 하니까 
스케치업의 데이터를 불러 올 수 있는 기능이 업데이트 되어 있음을 찾았습니다 냐하!!!! 

카메라 위치도 제대로 불러오고, 스케일도 알아서 맞춰서 들어옵니다 .. 진작 이걸로 해볼걸 .. 

https://docs.unity3d.com/kr/2017.4/Manual/HOWTO-ImportObjectSketchUp.html

 

SketchUp에서 오브젝트 임포트 - Unity 매뉴얼

SketchUp은 아키텍처 모델링에 일반적으로 사용되는 소프트웨어 중 하나입니다. Unity에서의 시각화에 SketchUp 모델을 사용하려면 우선 이 모델을 Unity가 지원하는 중간 포맷으로 변환한 후 Unity에서 이를 사용해야 합니다.

docs.unity3d.com

일단 이건 이렇게 되었고.. 

다음에는 유니티에서 배경까지 처리할 수 있는지에 대한 실험을 해 보았습니다. 
텍스쳐까지도 제대로 넘어오기 때문에 셰이딩만 플렛하게 만들면 되고, 외각선 처리를 하기 위해 아웃라인을 연구해 보았습니다. 

일단 기존의 포스트 프로세싱을 통한 아웃라인 공식을 튜닝해 보았습니다. 정밀도를 더 높일 순 없는지... 

원격 부분의 길에 쓸데없는 라인이 나오는게 맘에 안드는데, 일단 전보다는 꽤 좋아졌네요. 
사람의 발이 나오지 않는 것은 커스텀 버퍼를 만들어 처리하면 되겠지만, 지금 이 경우는 차라리 따로 렌더링하는게 낫겠지요. 

 

 

건물쪽 라인이 맘에 안들어 노말댑스로 한번 더 손대 보았습니다. 좋은 점도 있고 나쁜점도 있네요 흐음. 
가까운 부분이 맘에 들면 먼거리가 맘에 안들고, 먼거리가 맘에 들면 가까운 거리가 맘에 안듭니다. 
거리에 따라 공식을 바꾸는 것도 고려할 만 한데.. 

 

 

 

일단 더 큰 문제는 데이터가 너무 무거워서 제어가 힘들다는게 문제였습니다. 애초에 스케치업 데이터라 유니티와 최적화가 잘 되어있진 않을테니까요. 그래서 최적화 하는 법을 고민해 보았습니다. 

첫 번째 방법은 유니티가 지원하는 픽시즈를 사용하기 - 유니티의 에반젤리스트 아드리아나님과 컨텍하여 테스트 해보았습니다만, 실제 메터리얼까지 재분배해서 합쳐주는 기능은 없고, 같은 메터리얼을 쓰는 오브젝트를 합쳐주는 정도밖에 사용못한다는 결론이 나왔습니다. 좀 부족. 

그래서 이번에는 맥스에서 스크립트로 같은 메터리얼끼리  Attach로 합치는 스크립트를 구해다가 작업을 해봤습니다. 오브젝트의 갯수가 약 1/10로 줄어들었습니다!!! 아주 만족스러운 결과입니다  (5868개에서 511개로 줄음) 

이렇게 하고나니 훨씬 가벼워져서 조작하기가 더 좋아졌습니다. 

 

하지만 연구를 해봐도 이 방법을 쓸 수는 없었는데, 

이유는 

1. 기존 스케치업의 외각 라인 느낌과 너무 다른게 문제. 다른 배경들은 스케치업으로 만들어져 있어서. 

2. 스케치업에서 컨버팅을 해서 넘겨 왔긴 하지만 소실되는 데이터들이 있었다. 스케치업에서 메쉬가 아닌 독자적 방식으로 처리하는 라인들 같은 경우가 안 넘어 오는 듯. 

 

그래서 일단 배경은 스케치업에서 그냥 작업하기로 하고, 여기의 카메라 각도에 맞게 '캐릭터만' 유니티에서 렌더링하여 스케치업으로 렌더링한 배경과 매칭하여 합성하기로 결정하였습니다. 

 

 

블로그 주인장에게 커피값을 후원할 수 있습니다! 

donaricano-btn

 

 

 

반응형

댓글