2014년 4월 21일 월요일

Blender를 제품설계자용 렌더링 툴로 활용하기


Blender를 제품설계자용 렌더링 툴로 활용하기





* 기존 문제점


1. CAD의 기본 렌더링 툴이 만족스럽지 못하다.

현재 사용중인 Pro/engineer Wildfire (Creo) 3D CAD에 기본으로 달려있는 렌더링 툴은 PhotoRender인데, CAD 안에 통합되어 있고 메뉴가 간단해 사용법은 쉽지만, 출력되어 나오는 퀄리티는 별로 만족스럽지 못하다.  (물론 셋팅을 주의깊게 잘 하면 품질은 어느정도 나오긴 하지만, 전체적으로 그림이 너무 딱딱한 느낌을 준다.)

2. 상용 렌더링 툴은 가격이 부담스럽다.

제품설계자에게 가장 좋은 컨셉을 가진 렌더링 툴인 Keyshot의 경우, CAD의 원래 모델을 다른 포멧으로 변경할 필요도 없이 그냥 불러 읽어들여지고, UI가 아주 간단해서 별도의 설명서로 읽어볼 필요조차 없다.  직관적으로 재질 등을 설정하면 실시간으로 렌더링 화면이 보여진다.  정식 렌더를 시키면 백그라운드 작업으로 잠시 기다리면 최소한 봐줄만한 퀄리티는 기본으로 나온다.
이렇게 좋은 툴이기는 한데, 이걸 구매하려면 1카피당 가격이 대충 300~400만원 정도 들어간다.
게다가 매년 업그레이드도 해 줘야 하니 돈이 계속 들어간다.

3. Keyshot과 같은 기존의 상용 렌더러(제품설계자용)는 거의 전부 윈도우+GUI 전용 어플리케이션이다.

따라서 리눅스 서버에서 커맨드 스크립트로 딱 때려서 렌더링 작업만 시키는 방식은 부적합하다.
매번 새로운 모델이 있을때 마다 일일이 셋팅해 줘야 한다.  귀챦다.

4. 테크니컬 일러스트레이션을 그릴 방법이 마땅챦다.

포토리얼리스틱한 렌더링 뿐만 아니라, 테크니컬 일러스트레이션이 필요한 경우도 있기 때문에 Line art 렌더링 기능도 되면 좋겠다.  Keyshot 같은 툴에는 이 기능이 없다.  테크니컬 일러스트레이션을 신속하게 만들 수 있는 라인아트 기능이 지원되는 툴은 Pro/Engineer와 연동되는 IsoDraw 또는 Creo Illustrator 같은 툴이 있다.  하지만 이 툴 역시 기능은 좋지만 가격이 상당히 비싸다.



* 필요한 사양


1. 우선 쉽고 간단해야 한다.

제품설계자가 사용하는 렌더링 툴은 그래야만 한다.  렌더링 작업이 메인 잡이 아닌 것이다.
CG 애니메이션 같은걸 만드는 예술가가 아니기 때문에 퀄리티는 적당히만 나와줘도 OK이다.  디지털 목업 개념으로, 제품을 실제로 만들면 대충 이런 느낌이겠구나 하는걸 보여주면 되는거다.

2. 빨라야 한다.

최고의 응답성을 보여주는 제품은, 실시간으로 렌더링 화면을 뿌려주는 Keyshot이다.
사실 Keyshot은 실제 렌더링 속도는 그다지 빠른 것은 아니지만, 해상도를 반복적으로 올려가는 식으로 점차 화면이 또렷해지는 방식이기 때문에 사용자는 일단 화면 상태를 곧바로 알 수 있다.  또, 렌더링 연산은 GPU와는 전혀 무관하게 CPU만 사용하기 때문에 그래픽카드를 거의 타지 않는다.  이걸 쓰는데 고급 그래픽카드를 구입해야 할 필요가 전혀 없다는거다.  (대신 렌더링을 위한 컴퓨팅 파워는 제한되므로 속도는 저하됨)
아무튼, Keyshot은 코어의 퍼포먼스는 결코 빠르지 않지만 실제 사용자가 체감하는 응답이 빠르게 나오기 때문에 '빠르다'는 느낌을 주고, 때문에 사용자의 작업 속도가 대폭 향상된다.

3. 멀티플렛폼이면 좋겠다.

윈도우, 리눅스에서 다 돌아가면 좋겠다.

4. 오픈소스일 것

렌더링 툴을 위해서 돈은 들이기 싫다.  돈 들일거면 그냥 기존 솔루션 사용하고 만다.

5. 다양한 데이타 포멧을 지원할 것

Pro/engineer의 오리지널 파일 포멧을 곧바로 읽어들일 수 있는 정도까지는 바라지도 않는다.
적절한 Neutral Format을 통해서 어찌됐든 3D CAD에서 생성한 제품 형상 데이타를 읽어들일 수 있어야 할 것이다.

6. 라인 아트 렌더링이 가능할 것

테크니컬 일러스트레이션을 위해서는 이 기능이 꼭 필요하다.  제품의 외관 윤곽선을 따서 출력해 주면, 그걸로 디자이너가 제품설명서나 사양서 같은데 쓸 삽화를 더 신속하고 아름답게 만들수 있게 해 주기 때문이다.
가장 이상적인 것은, 라인 아트 출력 파일의 포멧은, jpg/png 같은 레스터 그림 파일이 아니라 svg/ai 같은 벡터 그림 파일이어야 한다.

7. 스크립트로 설정 및 렌더링 수행이 이루어질 수 있을 것

GUI도 물론 제공되어야 겠지만, 스크립트로 셋팅 및 렌더링 수행이 이루어질 수 있으면 금상첨화다.  표준적인 렌더링 셋팅을 잘 설정해 놓고, 새로운 제품 모델링 파일이 나올 경우 그걸 그냥 엮어서 기계적으로 렌더링을 시키는 식으로 작업하고 싶다.
그러면 최초 명령어 때려주는 것만 해 주면 내가 더 할일은 없는 거쟎아???
매번 조명 일일이 맞추고 재질 설정해주고 쉐이딩 셋팅값 조절해 주고
맘에 안들면 또 새로 반복하고 렌더링 하는 동안 멍하니 기다리는 등등
그럴 시간 없다.



* 해결책 모색


1. 그럼 오픈소스 렌더러를 찾아서 쓰면 되지 않을까?

오픈소스 렌더러들의 위엄(?)은 이미 잘 알려져 있다.  픽사에서 렌더러의 표준이라 할 수 있는 Renderman을 옛날에 만들었다는 건 알고 있었는데, 오픈소스 쪽에서 이것의 클론이 몇가지 나온 것 같다.  Pixie 같은 것들이 대표적이다.
하지만 Renderman 같은 형태의 렌더러는 사실 제품설계자용 렌더러라고 보기는 힘들다.
이걸 공부해서 일일이 밑바닥부터 셋팅해 주면서 개발하고 있을 수는 없기 때문이다.

2. Blender를 써 보자.

오픈소스 3D 툴 중에 엄청나게 유명한 블렌더(Blender)를 한 번 살펴보자.
요즘에 이넘이 아주 탄력을 받아서 업데이트 속도도 엄청난 것 같다.
옛날에 내가 잠시 보고 너무 어려워 보여서 못 쓰겠네 했던 그 Blender가 아닌 것만 같다.
Blender의 최신버전은 금일 현재 2.70a 이다.
그럼 이걸 기준으로 위의 필요한 사양을 모두 만족시킬 수 있는지 하나씩 따져본다.


* Blender 분석


1. 일단 UI가 굉장히 난해하다.

하지만 나는 다른 잡기능은 하나도 안 쓰고, 오로지 렌더링만 할 거다.  렌더링 메뉴만 튜토리얼 등을 따라서 확인해 보니 별로 어려운 것 같지는 않다.  물론 세세한 설정이 가능한 것들이 너절하게 있지만 난 그런거 신경 끄고 그냥 디폴트로 하면 된다.  없는 셈 치는거다.
아무튼 기본적인 거만 한다 치고 생각해 보면, 그다지 복잡하지만은 않다.
그럭저럭 쓸만한 UI라고 생각하기로 한다.

2. 렌더링 속도는?

2.70a 버전을 일단 깔아보니, 기본 렌더러가 2가지 제공된다.
"블렌더 렌더"와 "사이클 렌더"이다.
블렌더 렌더는 퀄리티는 좀 떨어질 수 있겠지만, 꽤 쓸만하게 나온다.
사이클 렌더는 이게 뭔가 대단한 물건이다.  사이클 렌더를 소개해 놓은 블로그나 포럼들을 보니깐, 이넘은 그냥 Keyshot의 실시간 렌더링에 대응하는 물건인게다.
즉 사이클 렌더는 Keyshot 처럼 실시간 렌더링이 되는거다.
게다가 Keyshot 보다 더 빠르다.
왜?
Keyshot은 CPU만 써서 연산을 수행하지만, 사이클 렌더는 nVidia 그래픽 카드를 사용하는 PC의 경우에는 CUDA 기능이 지원된다.  즉 그래픽 GPU의 파워를 렌더링하는데 동원하는 것이다.
nVidia 그래픽 카드가 아닌 경우에는 OpenCL 기능도 지원된다고 한다. OpenCL은 CUDA 보다 좀 더 일반적인 것이긴 하지만 완성도가 좀 떨어져서 버그가 많다고 한다...  하지만 뭐 제품설계자는 기본적으로 무조건 nVidia 그래픽카드를 쓴다고 봐야겠지..(3D CAD 툴과의 전통적인 호환성 등의 문제 때문)
나는 nVidia Quadro 4000 그래픽 카드를 사용하고 있으므로, CUDA 지원은 강력한 파워를 보여줄 것이다.
아무튼 결론적으로 Keyshot 보다 속도면에서는 하드웨어적으로, 소프트웨어적으로 모두 우월하다.

3. 멀티플렛폼은 되는가?

Blender는 20년 전에 처음 개발될 때는 당연히 C로 만들었지만, 지금은 왠만한 부분은 거의 다 Python화 되어가는 것 같다.  윈도우,리눅스,맥 가리지 않고 다 된다.  심지어 안드로이드에 포팅하는 친구들도 있는 것 같다.
리눅스 윈도우 다 돌려보니 상당히 안정적이다.
렌더링 할 때 해상도를 엄청나게 올려서 컴퓨터의 메모리를 다 잡아먹어 버리면 다운되는 것이랑, 렌더링 속도 옵션을 최대로 해서 돌리면 노트북 팬이 미치도록 돌다가 결국 뻗어버리는(재부팅) 되는 경우 밖에 못봤다.  소프트웨어 자체적으로 뭔가 버그가 심각해서 꼬여 다운되거나 하는 경우는 거의 없는 것 같다.

4. 오픈소스?

Blender는 Ton이라는 개발자가 창업했다가, 3D Max 같은 괴물들 한테 아작이 나서 시원하게 말아먹고 빚쟁이들한테 권리가 넘어가 버렸는데, 빚쟁이들(=금융권)이라는게 컴퓨터 소프트웨어를 갖고 있어봤자 짐만 될 뿐인데다가 원래 개발자가 아직도 질질 짜면서(?) 미련을 못 버리는 것을 보고 불쌍해 보였는지 몰라도 암튼, 1만불인가 대충 그쯤 되는 돈만 주면 소유권을 다시 양도해 주겠다고 했다고 한다.
그래서 Ton이 요즘 유행하는 크라우드 펀딩 비스무레하게 모금운동을 했는데 (옛날에 한글과 컴퓨터 살리기 운동 같은) 연말까지 목표 금액 모금에 극적으로 성공하면서 다시 권리를 양도받아 재단을 만들어서 오픈소스화 했다고 한다.
아름다운 이야기다.
암튼 이런 암울한 시기를 지나고...
지금 와서 보니깐 대부분의 3D 툴은 거의 전부 Autodesk 한테 다 잡아먹히거나 또는 밟혀 죽었는데, Blender는 오픈소스다 보니깐 잡아먹히거나 시장경쟁 같은거 걱정 안해도 밟혀죽을 걱정을 안해도 되는거다.
게다가 돈주고 소프트웨어 쓰기 싫은 나같은 사람이 원체 많아서 그런지 몰라도, 사용자들이 커뮤니티를 형성해서 필요한 애드온을 엄청나게 만들어서 공유하고 하는 식으로 기능도 몬스터처럼 강해져만 갔다.  우리나라 전설의 불가사리 같은 꼴이다.
(불가사리 = 쇠를 먹으면 먹을수록 점점 더 커지는 몬스터. 불가사리 잡으려고 군대가 창,화살,칼,대포알 같은 쇠붙이를 막 쏘니깐 그걸 먹고 점점 더 커져서 감당이 안됨)
암튼 그런식으로 되다 보니깐 심지어 이제는 Autodesk에 대항 가능한 유일한 소프트웨어 자리를 꿰어찬 형국이다.
암튼 그래서 요즘도 Ton을 위시한 개발자들이 신이나서 열나게 개발해서 계속 업데이트 해 주고 있다.  정말 고맙다.

5. 다양한 데이타 포멧을 지원하는가?

이게 좀 문제인데...
3D CAD는 Solid 모델의 데이타를 다룬다.
그런데 Blender 같은 그래픽용 툴은 Polygon 모델의 데이타를 다룬다.
데이타 자체가 다르다.
물론 왠만한 상용 툴은 이거저거 다 지가 알아서 변환해서 임포트 익스포트 다 되는데...
이넘은 오픈소스라서 아무래도 이 부분이 좀 딸린다.
Por/Engineer 소스파일은 물론, iges/step 같은 Solid Neutral Format 파일을 직접 임포트 하는 것은 불가능하다.  그쪽으로 애드온이 개발이 제대로 되어 있지 못한 듯 하다.
(오픈소스 쪽에서는 다른 툴의 경우에도 보통 오래된 iges는 많이들 다루던데, 특히 step 쪽은 꽤 약해서 ap203은 되는데 ap214이후로는 거의 지원 안되는 것 같다.  step은 너무 스펙 내용이 방대해서 해킹이 어렵나보다.)
암튼 그래서 남은 방법은, Pro/Engineer 쪽에서 폴리곤 모델인 .sla 포멧으로 저장해서 그것을 Blender에서 불려들여 쓰는거다.
sla 포멧은 여기저기 원체 흔하게 쓰고, 포멧 규약 자체도 간단해서 지원 안되는 툴이 거의 없는 것 같다.
그런데 치명적인 문제점이 있다.
즉 sla 포멧은 단일 파트만 된다는 것이다.  어셈블리 파일을 sla로 저장하면 전부 통짜바리로 하나의 파트처럼 취급되어 버린다.
이게 렌더링 툴에 들어오게 되면 심각한 문제가 된다.
즉 어떤 제품이 있다 하면 색깔(재질)이 부품마다 다 다를텐데 그걸 지정해 주는게 불가능해 지는거다.  물론 CG그래픽 미술하는 애들(?)처럼 노가다로 데칼 그림 그려서 그걸 씌워 입혀주고 이런식으로 하면 되긴 하겠지만 제품설계자가 그짓을 한다는 것은 말도 안된다.
따라서 부품별로 따로 떨어져서 임포트시킬 수 있는 포멧이 필요하다.
sla는 단일부품 밖에 안되기 때문에.

안절부절

전전긍긍

끄응

하다가 찾은 해결책 하나는, Pro/Engineer가 어셈블리 파일을 익스포트 시켜줄 때 가능한 포멧 중에 .slp 포멧이 있다.  이넘은 간단히 말해 렌더링용으로 제정한 Pro/Engineer 전용 포멧인 것 같은데, 데이타 구조가 .sla처럼 간단하면서도, 여러개의 파트를 구분할 수 있는 정보도 함께 들어가는 놈이라고 한다.
그래서 이 포멧을 해킹해서 Blender에서 임포트시킬 수 있도록 만들어 놨더라.
그런데 조건이 있다.
Blender 2.4x 버전에서만 이 기능을 넣어 놨다.
이후의 2.5~2.70a 버전에서는 이 기능이 제거되어 있다.
왜 제거했는지는 몰라도 정말 왕짜증이다.
결국 나는 Blender 2.49b 도 깔고, 2.70a도 깔았다.
slp 파일를 2.49b로 임포트 시킨 다음에, 다른 이름으로 저장한 다음 2.70a에서 불러들여서 작업을 하는 거다. (블렌더도 하위호환성은 유지되므로)
무식하긴 해도 대충 되긴 된다.  100% 되는건 아니다.  어떤 부품들은 분리되지 못하고 그냥 하나의 부품으로 남아있는 경우도 있더라...  ㅠㅠ
아무튼 무슨수를 쓰던지 어쨌든 간에 Pro/Engineer의 모델링 데이타를 Blender로 불러들이기는 할 수 있게 된 것이다.
아무튼 이게 제일 큰 약점이었다고 생각된다.
조금 더 궁리해 보면 좋은 수가 나겠지...


6. 라인 아트 렌더링

Blender 2.70a 버전이 slp 임포트 기능이 없는 대신, 라인 아트 렌더링 기능이 기본으로 들어있다.
블렌더 렌더 옵션 중에 '프리스타일' 옵션이 그것이다.
프리스타일 라인 아트라고 해서 만화 윤곽선을 자동으로 그려주는게 원래 목적인 것 같은데, 그냥 윤곽선에 아무 옵션도 안주고 기본으로 하니깐 깔끔하게 테크니컬 일러스트에 적합한 선화가 나온다.
대신 이건 렌더링이므로, 레스터 그림 파일로 얻어지는 것이다.
벡터 그림 포멧으로 얻을 수 있는 방법은 없는 것인가...
오타쿠들이 미소녀 캐릭터를 블렌더로 그려서 인형놀이 하기 위해서 다 만들어 놓았나 보다.
검색해 보니 다 나온다.
프리스타일 옵션에서 오타쿠가 만들어놓은 파이썬 스크립트를 돌리도록 해 놓으니깐
벡터 포멧인 svg 파일이 뙇 나오는거다.
그것도 아주 완전 깔끔하게.
이 툴은 2.70a 버전에 맞게 3월달에 나온 따끈따끈한 것이므로 호환성 문제는 없는 것 같다.

7. 스크립트?

Blender는 파이썬 중심이므로, 파이썬 스크립트를 암턴 잘 짜면 왠만한건 다 되는 것 같다.
나중에 리눅스 서버에서 자동 일괄 렌더링 같은 서비스를 올리려면 어찌 잘 연구하면 이룰 수 있을 확률이 매우 높다.



* 결론


검토 결과, Blender는 요구조건 7가지 모두 충족한다.
1,5번 요구조건에서 조금 약하긴 하지만, 상대적으로 사소한 결함에 불과하다고 보인다.
따라서 Blender에서 조건을 잘 잡아주면
제품설계자용 퀵 렌더러 툴로 활용 가능하다고 판단된다.

실무에서 이렇게 하는 제품설계자는 아직 보지는 못했다.
(아마 어딘가 숨은 설계자 중에는 있을지도 모르지만, 인지가 불가능하므로 없는 걸로 치고)

대기업 댕기는 설계자는 자기가 렌더링 할 일 없을 거고.
중소기업 댕기는 설계자는 일에 치여서 이런거 시도할 여유도 없을 거다.
또 설계자가 렌더링까지 왜 하냐면서 화를 낼 지도 모른다.
그런거는 디자이너한테 돈 주고 맡겨야 할 일 아니냐고...

하지만 로봇 업계에서 로보티즈 같은 회사는 이미 상용툴인 Isodraw를 도입했다.
그런데 우리 회사에서는 사진 찍어서 설명서에 넣고 있는 수준이다.
쪽팔리는거다.
그렇다고 Isodraw를 구매하자니 더 쪽팔린다.
호구도 아니고 이런 서브툴에 상용 툴을 사용하는 것도 웃기는 거다.

따라서 향후 과제로,
Blender 디폴트 셋업을 잘 해보고 그걸 정규화하는 방법을 찾아 보고...
방법이 정립되면 스크립트화 해 보면 어떨까 싶다.


서클 렌더

블렌더 렌더 + 프리스타일

블렌더 렌더 + 프리스타일 + 프리스타일svg마스터 스크립트

출력된 svg 파일을 잉크스케이프에서 열어본 모습
(면을 채울 때 윤곽선 일부가 새는지 몰라도, 복잡한 형상일 경우 면 채우기에서 깨져 있는 모습을 볼 수 있음.
하지만 윤곽선 및 은선(Hidden Line)은 아주 잘 나온다..)




* 레퍼런스


http://www.blender.org/
---> 블렌더 재단 홈피

http://animation-software.findthebest.com/compare/19-41/Blender-vs-Keyshot-Pro-Animation-KeyshotVR
---> 블렌더vs키샷 비교

http://togetter.com/li/655463
---> 블렌더 렌더 프리스타일에서 벡터 svg 파일 출력하는  스크립트(FreestyleSvg-master) 다운로드 및 방법 (일본어)

http://blenderartists.org/forum/showthread.php?49161-How-to-import-IGS-files
---> 블렌더 2.4x 버전에서 .slp 파일을 불러들이고, 부품별로 쪼개는 방법 설명




댓글 없음:

댓글 쓰기