2014년 4월 29일 화요일

조직생활에 관한 소고


글쎄, 누구에게나 사회생활이 어렵지만 ...
불신이 만연하고 배려가 없는 조직이란 정말 끔찍한 것이다.
한국사회는 그런 지옥이기도 하다.

마음이 아직 단단해지지 않은 젊은 청년들은 그래서 많이 힘들어한다.
선배에 대한 존경심도 없어지겠지.
인내심이 부족해서 섣부른 결정을 내리기도 하고
자신에게 도움을 주려는 손길을 뿌리친다.

하지만 알고 있을까.
자신이 바로 그런 지옥을 만드는데 일조하고 있다는 것을.
책임감은 무겁다.
나는 이제 용기있게 맞서서 이겨보려한다.

승리하는 그 순간
나를 질투하는 무능한 환관형 인간들에게
청량하게 웃어주자.
자신의 어리석음을 스스로 깨닫지 못하는
헛똑똑이의 허영심이 참으로 가벼움을 느낀다.

하하하하하!

승리의 예감이다.
마라톤의 마지막은 아직 저만치 남아있다.
많은 사람들은 그 도중에 지쳐 떨어져 나가겠지만,
그래서 경쟁이 더 쉬워지는지도 모른다.


2014년 4월 24일 목요일

Blender vs Keyshot



Blender vs Keyshot



Keyshot

Source : Pro/Engineer Wildfire + Ordinary Colored parts
Import : stp
Material : Nothing



Blender Default Renderer

Source : Pro/Engineer Wildfire + Ordinary Colored parts
Import : wrl (vrml2)
Material : Nothing




Blender Cycles

Source : Pro/Engineer Wildfire + Ordinary Colored parts
Import : wrl (vrml2)
Material : Nothing




Blender Cycles

Source : FreeCAD
Import : wrl (vrml2)
Material : Nothing

결과

Keyshot의 퀄리티가 가장 좋았다.

이유는 당연히 BREP 구조의 stp 파일의 표면 정보인
NURBS 그대로 소스데이터를 받아서 뿌려주기 때문이다.
다만 렌더링 시간은 가장 많이 걸렸다.
또 렌더링 할 때에는 CPU가 풀로드로 걸리기 때문에,
다른 작업에 영향이 가므로,
워드프로세서가 잠시 얼어붙거나 하는 현상이 생긴다.

Blender Cycles의 렌더링 퀄리티나
능력 자체는 Keyshot의 것과 동등하거나 확실히 더 우월한 것 같다. 

설정 옵션도 거의 뭐 근본적인 것들까지 다 건드려줄 수 있으므로
전문적인 렌더링 능력이 있다면 그 장점을 극대화시킬 수 있을 것이다.
하지만 디폴트 셋팅에 가까운 상태에서는
색이 과다노출로 날아가버리는 것을 막거나,
색상 톤을 조절하거나 하기가 좀 까다로운 것 같다.
이것저것 무작정 건드려 볼 뿐.. ㅠㅠ

대신에,
CUDA를 사용할 수 있으므로 렌더링을 걸어놔도
CPU에는 부담이 별로 가지 않는 것 같다.
거의 작업중인 다른 프로그램에 영향을 주지 않는다.
게다가 렌더링 속도도 훨씬 더 빠른 것 같다.


이상한 점

이상하게 프로이에서 직접 만들어준 vrml 파일은
부품별로 모두 분리된 파일로 나온다.

FreeCAD에서 만들어준 vrml은 단일 파일로 나오면서 용량이 크게 작게 나온다.
대신 데이타 상태가 좀 이상한 것 같은 느낌이 든다.
구멍이 숭숭 뚫린건지..  아직 잘 파악이 안됨.

둘 다 데이타 용량은 10메가 정도로 비슷하다.


그런데 더 신기한 것은,
프로이에서 만든 wrl 파일을 블렌더에 임포트 시키면 엄청나게 무거워진다.
화면이 거의 얼어붙다시피해서 오브젝트를 움직이기도 힘들 정도다.
블렌더 파일을 저장해 보니 용량이 500메가 정도다.

그런데
FreeCAD에서 만들어준 wrl 파일을 블렌더에 임포트 시키면 상당히 가볍다.
블렌더 파일을 저장해 보니 용량이 50메가 정도로, 10% 정도로 줄어들어 있다.

차이점은..  같은 wrl 파일인데, 프로이에서 나온 것은 아스키 텍스트 파일이다.
FreeCAD에서 나온 것은 바이너리 파일이다.

블렌더의 vrml 임포트 툴이 아마
바이너리 파일을 읽는 것에 최적화되어 있어서 그런가 싶기도 하다.


블렌더에서 보완해야 할 점 

vrml을 통해서 데이터 교환은 되긴 되는데
아무래도 로우 폴리곤 파일이다 보니...
표면 상태가 영 아니다.
폴리곤 데이타의 한계인가 싶다.
이 부분은 렌더러 설정에서 뭉개주는 방법을 찾던가 해야 할 것 같다.

아무튼...
블렌더를 제품설계자의 프로페셔널한 용도로 사용하려면
벤치마킹 대상인 키샷 정도의 퀄리티로 렌더링이 이루어져야 할 것 이다.
또한
신속하게 표준 조건에서 렌더링이 이루어질 수 있도록
확실히 프레임웍을 만들어내 두어야 할 것 같다.

이런 작업은 누가 대신 해 줄 것이 아니므로
시간을 두고 천천히 만들어나갈 수 있었으면 한다.



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 파일을 불러들이고, 부품별로 쪼개는 방법 설명




2014년 4월 17일 목요일

크롬 앱스토어에 무료 MS오피스 앱이 올라왔군요.



크롬 앱스토어에 무료 MS오피스 앱이 올라왔군요.


언제부터 이게 된 건지... 헐
최근 업데이트가 4월14~15일 인걸 보니 이틀 사흘 전에 올라온 건가 싶기도 하고요.
암튼 일단 워드,파워포인트,액셀 3형제 깔아서 써보는 중입니다.
리눅스 PC에서 구글 크롬 띄워서 MS오피스를 쓰다니 
예전에는 상상도 못했던 일 같네요.

단점은 PC의 파일에 바로 접근해서 사용할 수는 없고
MS클라우드인 원클라우드에 무조건 가입해서, 거기에 파일을 올린 다음에 불러다 쓸 수 있는건데
이정도 수고야 ... ㅠㅠ

암튼 리브레오피스다, 킹소프트 오피스다 해 가면서 만족을 못했었는데
MS 오리지널이 나왔으니 최소한 이넘으로는 원본 파일 형태가 깨지거나 하는 일은 없겠죠....
상당히 크고 구조가 복잡한 프로젝트 관리용 엑셀 파일을 불러들여서 실험해 보는 중인데 꽤 괜챦군요.

이제 남은건 한컴 워드프로세서가 무료 크롬 웹앱으로 나오는 날만 기다리면 되는건감. 
설마 그런 날이 오지는 않겠죠.

ㅠㅠ



암튼 MS가 이판사판이다 하면서 사업구조를 바꿔볼려고 막 지르나 봐요.

AutoCAD dwg 파일을 웹브라우저에서 보여주는 방법에 관한 고찰



AutoCAD *.dwg 파일을 

웹브라우저에서 보여주는 방법에 관한 고찰



* 필요성

현재 진행중인 사내 소규모 웹기반 간이 PDM 시스템에서,
도면 파일을 웹브라우저상에서 찾고 클릭해서 다운로드 하거나 하는건 아무 문제가 없는데
웹브라우저상에서 썸네일 보기 처럼 미리 도면 내용을 확인할 수 있으면
실무자가 일하는데 참 편하겠다 싶은 생각이 강하게 든다.


* 문제점

그런데 문제는...
오토캐드사에서는 *dwg 파일 스펙을 공식적으로 오픈하고 있지 않다는 점이다.
때문에 *.dwg 파일을 읽을 수 있는 오픈소스 소프트웨어는 존재하지 않는다.
LibreCAD 개발하는 사람들이 최신버전 *.dwg를 읽어들이게 하려고 노력하는 것 같은데
아마 스펙이 상당히 방대하므로 해킹하는 수준으로는 구현 자체가 어려울 거다.
게다가 오토캐드사는 이 포멧의  상위호환성을 계속 깨면서 버전업을 해 가고 있으니...
오픈소스에서 아무리 노력해도 그 속도를 못 따라잡는다.

(마치 이 상황은 한컴오피스의 *.hwp 파일 포멧이 "사실상" 비공개 상태여서,
오픈소스 또는 제3개발자가
그걸 읽어들이거나 다루는 소프트웨어를 제대로 개발하고 있지 못한
상황과 비슷하다.)

오토캐드사의 입장은 단순한 것 같다.
"*.dwg 파일은 그냥 우리 독점 포멧이니깐 우리 제품 쓰시고
웹에서 이걸 보게 하려면, 웹용으로 포멧을 경량화한 *.dwf 파일로 변환해서 쓰세요."

웹에서 보려면 당연히 용량을 줄이고, 읽기 전용으로 하는게 좋으므로 오토캐드사의 입장이 잘못된 것 같지는 않다.
다만 우리 회사와 같은 경우에는 안 맞는거다.

일단 오토캐드의 상용 솔루션을 사서 적용하고 싶지도 않고 또 가능할 것 같지도 않다.
왜냐면 우리 서버는 리눅스 서버니까.
오토캐드에서 리눅스 서버에서 구동가능한 변환기나 API를 제공할 것 같지는 않다.
(정확히 확인은 안 해 봤음)
설령 제공한다 하더라도 상당히 높은 가격 부담을 요구할 것이다.

즉,
오픈소스에서 구현이 안되어 있고.
오토캐드 쪽의 솔루션도 마음에 안든다.


그럼, 서버에 도면 데이타를 올릴 때 *.dwg 파일로 올리지 말고
*.pdf 내지는 *.dxf 같은 다루기 쉬운걸로 업로드 하면 되지 않냐고?

실무설계자 입장에서 그건 실무자를 너무 괴롭히는 처사다.
pdf 도면은 협력업체에 줘도 안 좋아한다.  왜냐면 치수 측정이 안된다.
dxf 포멧은 용량이 증가하긴 해도 일단 아무데서나 다 통하니 좋긴 하지만
설계자가 그걸 사용하는 습관이 되어 있지 않다.
(오토캐드 또는 드래프트사이트 프로그램의 디폴트 저장 옵션을 변경해 줘야 하는데
일일이 그렇게 하는 것도 쉽지 않다.  타성이나 관습 때문에)
간단히 말해 실무자들이 편하게 쓰려면 무조건 dwg가 아니면 안된다.



* 솔루션

그럼 다른 솔루션을 찾아봐야 할 텐데...
3가지 솔루션이 일단 눈에 띈다.

1. CADian 2D Viewer 솔루션  ( http://www.cadian.com/product/viewer.asp )
요놈은 일단 국산이다.
따라서 문제가 생기더라도 전화해서 막 뭐라 그러면 일단 답변받기는 쉬울 것 같다.
속도도 빠르다고 한다.
문제는 ActiveX 기반이라는 거다.
그래서 아웃.

2. profiCAD 솔루션 (  http://gallery.proficad.com/tools/AutoCAD-Viewer.aspx  )
위 주소에 들어가보면 무료 온라인 DWG 뷰어 서비스를 제공한다.
자기네들 제품은 못 팔더라도 일단 웹사이트 히트수를 올려주기 좋은 고마운 서비스다.
문제는 이 회사 서버에 우리 회사의 설계데이타가 올라가야 보여질 수 있다는 거다.
게다가 우리 PDM 웹에 이걸 임베드 시키는 건 아무래도 비정상적이겠지...

3. QCAD 솔루션 (  http://www.qcad.org/en/  )
QCAD는 대부분이 오픈소스이고, 익스텐션 기능만 상용화되어 있다.
(오픈소스 부분은 원래 LibreCAD의 전신이다.)
헌데 익스텐션 기능 부분 중에 제일 중요한게 바로 *.dwg 파일 관련된 것이다.
그런데 이 소프트웨어는 재미있는 특징이 있다.
자바 앱이라 그런지 리눅스-MS윈도우-맥 등등 잡식성으로 다 포팅되어 있다는 것이다.
다시말해 리눅스에서 실행 가능하다.
게다가 커맨드라인 툴이 제공된다.
(  http://www.qcad.org/en/qcad-documentation/qcad-command-line-tools  )
제공되는 커맨드라인 툴 중에 쓸만한게 바로 "dwg2svg"와 "dwg2pdf" 이다.
이것들도 확인해 보니 다 자바로 짠거다.
다만 익스텐션 기능을 구매해야 사용 가능하다.
그럼 익스텐션 기능은 얼마 하느냐...  32유로 즉 우리나라 돈으로 4만6천원 한다.


그럼 답은 나왔네..
위 3가지 솔루션 중에 3번을 선택한다.
그럼 리눅스에서 dwg 파일을 svg 또는 pdf로 마음대로 변환할 수 있다.
구현하는 PDM 웹앱에서
사용자가 어떤 dwg 도면을 클릭해서 보겠다고 하면
웹앱이 이 변환용 실행파일을 구동해서, 해당 dwg 파일을 svg 또는 pdf로 변환해서
템포러리 디렉토리에 임시로 저장한 다음에
웹브라우저에는 그걸 띄워서 보여주는거다.
커맨드라인 툴의 명령어를 사용하게 되므로
API 같은걸 사용하는 것과 달리 좀 무식한 방법이긴 하지만
일단 4만6천원짜리 솔루션인 거다.
웹앱 개발자가 dwg파일을 어떻게 다룰지 고민 안해도 된다.
svg 파일 같은 경우에는 웹브라우저에서 그냥 보여주는 거니깐...

이런 식으로 구현되면 아마
2번 profiCAD 웹사이트에서 제공하는 것과 유사한 dwg 웹 서비스가 될 것이다.



* 욕심

사실 3D 데이타도 그렇다.
썸네일 개념으로 형상만 간단히 확인하게 해 주면 좋은데...
Step이나 Iges 파일을 x3d, x3dom 같은 xml 파일로 변환해 주는 컨버터가 있다면
그게 가능할 거다.

WebGL로 데이타 보여주는 경우 (크롬,파폭에서 기본 지원)
http://dlmf.nist.gov/21.4.F1i.webgl

WebGL로 3차원 로고를 웹에서 보여주는 경우 (크롬,파폭에서 기본 지원)
http://coforward.com/

컨버터 툴을 아마 구하기 쉬운 시기는 아직 아니라고 생각한다.
하지만 때가 있겠지...




2014년 4월 16일 수요일

Project Management = Excel + Gant Chart + Google Calendar 구현 관련

Project Management
= Excel + Gant Chart + Google Calendar
구현 관련



* 목표
1. 구글 캘린더와 연동 가능한 프로젝트 관리 솔루션 구현
2. 실업무에 필요한 양식의 자동 생성을 통한 노가다 반복 업무 제거

* 구현방안
1. MS엑셀로 일단 데이타를 집어넣고, 간트 챠트를 만들어낸다.
2. 구글 캘린더에 임포트시킬 수 있는 csv 파일을 MS엑셀로 생성한다.

* 레퍼런스
1. http://ganttchartpro.blogspot.kr/  Insung Lee님의 엑셀 간트챠트 예제 블로그.  따끈따끈함.
2. http://sourceforge.net/projects/openproj/   오픈프로젝트 프로그램.(오픈소스)
3. http://www.ganttproject.biz/  간트프로젝트 프로그램 (오픈소스)
4. http://www.youtube.com/watch?v=qaisZI6i75U   엑셀로 간트챠트 그리는 요령 강좌


* 기존 솔루션의 단점

1. 사용이 불편
오픈소스 프로그램들은 사용해 보니, 데이타 입력이 그렇게 편하지도 않다.  완전 노가다임.
GUI 환경인데도 불구하고 별로 직관적이지도 않음.
20여개의 프로젝트 일정 관련 정보를 집어넣어 보니, 마우스 클릭하는 손가락에 마비가 옴.

2. 내 업무와 맞지 않음
오픈소스 프로그램들은 모두 하나의 파일에 하나의 프로젝트를 입력하도록 가정하여 설계되어 있음.  달리말해, 한 사람 또는 한 팀은 오로지 단 하나의 프로젝트만 진행하는 것으로 가정되어 있음.  이것은 몇명의 팀원을 가진 하나의 팀이 동시에 여러개~수십개의 프로젝트를 동시에 진행하는 형태에는 맞지 않음.
동시에 여러개의 프로젝트를 진행한다는 것 자체가 비정상이지만...
여긴 한국이다.  ㅠㅠ

3. 어르신들이 원하는 포멧을 만들어주지 않는다.
어르신들은 변덕도 심해서 양식에 대해서 이러쿵 저러쿵 말을 많이 하시는 분의 경우에는 상당히 자주 양식을 바꿔줘야 한다.  무슨 항목을 넣어라, 배치가 이런식으로 되어야 하지 않느냐 등등.  고정된 양식만 뱉아내 주는 기성품 프로그램으로는 대응이 어렵다.
오픈소스 프로그램의 경우에는 주로 데이타 파일이 xml 형식으로 저장되는데, 이걸 유연하게 그때그때 바꿔서 표현해 주는 것도 보통 일이 아님.

4. 구글 캘린더와 연동했으면 좋겠다.
나는 주로 구글 캘린더를 애용하고 있는데, 회사에서 제공하는 더존ERP의 그룹웨어도 있긴 하지만 너무 원시적인 소프트웨어라서 일절 사용하지 않는다.  더존ERP의 경우는 범용 브라우저도 아니고 전용브라우저만 쓰도록 되어 있거나, 인터넷 익스플로러에서만 정상적으로 기능이 발휘되거나, 액티브X가 돌아가지 않으면 안되는 등등 한마디로 한심한 상태이다.
(국내 기업용 솔루션 개발업체들은 도대체 무슨 생각들을 하고 있는지 모르겠다.)

아무튼 만들어낸 데이타를 구글 캘린더에 임포트시켜 팀원들과 공유하는데 목적이 있다.
물론 이런 기능을 지원하는 상용 솔루션도 있더라.
http://www.gantter.com  이런 것.
하지만 상용인데다가, 지속적인 비용지출을 강요하는 Saas 형태라서 아주 싫다.
그냥 하나 만들어 쓰자.


* 현재까지의 상태

1. 데이터 입력 양식 (완료)
2. 간트챠트 구현 (완료)
3. 간트챠트에 주말,공휴일 표시 (완료)
4. 간트챠트에 오늘 표시 (완료)
5. 계획일정vs실제일정 표시 (완료)
6. 인적 리소스 계산 기능 (미구현)
7. 경제적 리소스 계산 기능 (구현하기 싫음)
8. 전체 일정 데이타 입력 (미입력)
9. 크리티컬 패스 표시 (구현하기 싫음)
10. csv 파일 추출 기능 (미구현)
11. 구글 캘린더에 임포트 실험 (미실현)
12. 회사 주간업무일지 양식 자동 추출 (미구현)
13. 회사 월간업무일지 양식 자동 추출 (미구현)




헥헥헥....











2014년 4월 3일 목요일

Auto-start with Sage Notebook



* 참조
http://whatwant.tistory.com/497
https://groups.google.com/forum/#!topic/sage-notebook/ZckZXywGB-k
http://www.sagemath.org/download-linux.html

* 환경
Ubuntu Server 12.04
Sage 6.1.1 (깔린 장소는 /usr/lib/sagemath/ )

* 과정 설명
Sage Notebook이 설치된 서버컴퓨터를 껐다 켰을 때 마다 자동으로 Sage Notebook 서버가 실행되도록 스크립트화 한다.
옛날 DOS의 Autoexec.bat 파일에 해당된다고 할 수 있는 것이 /etc/rc.local 파일이다.
따라서 이 파일을 편집해서 Sage Notebook의 실행 쉘스크립트 명령어가 실행되도록 하면 된다.
Sage Notebook의 실행 쉘스크립트 명령어는 역시 편집기로 적절하게 작성해 둔다.


1.  /etc/rc.local  파일 편집

이 스크립트는 각 멀티유저의 실행레벨의 제일 마지막에 실행된다.
실행이 성공하면 제일 마지막의 "exit 0"에 의해 0 값을 내놓고, 실행 실패할 경우에는 다른 값을 내 놓는다.
또한 실행 실패할 경우에는 첫째줄의 "#!/bin/sh -e"의 -e 옵션에 의해서 중간에 멈추거나 하지 않고 그냥 이 스크립트는 강제로 종료된다.  실행에 실패하더라도 일단 다음 과정으로 넘어가서 부팅이 완료되도록 하기 위해서이다.
본 스크립트가 실행 가능하도록 하기 위해서는 실행 비트들(execution bits)을 변경해 주면 된다.
본 스크립트는 우분투를 막 설치한 직후의 원래 디폴트 상태로는 아무 명령도 없으므로 아무것도 하지 않는다.
따라서 아래와 같이 이런 식으로 써서 내용을 변경해 준다.

#!/bin/sh -e
/home/share/powertrain/sage/start-sage.sh
exit 0


2. /home/share/powertrain/sage/start-sage.sh 파일 편집

이제 설정한 쉘스크립트를 새로 생성해서 편집한다.

#!/bin/sh
su -c 'nohup /usr/lib/sagemath/sage -c "notebook(secure=true,interface=\"\", port=443, timeout=36000, server_pool=[\"sagecalc@localhost\"], accounts=True)" 2> /home/share/powertrain/sage/log/log2.txt > /home/share/powertrain/sage/log/log1.txt &'


"su -c"는 루트 권한으로 다음에 이어지는 단따옴표 안의 명령어를 실행하라는 뜻이다.
"nohup 명령어 &" 구문은 백그라운드로 실행하되 백그라운드 상태에서 멈추지 않고 계속 명령어로 실행된 프로그램이 구동되도록 해 주는 것이다.
"sage -c"는 sage 프로그램을 실행하되 다음에 이어지는 겹따옴표 안의 명령어를 실행하라는 뜻이다.
"notebook(~)" 함수명령어 괄호 안의 옵션들의 뜻은 다음과 같다.

secure=true 옵션은 OpenSSL https 프로토콜로 웹서비스가 이루어진다.
interface='' 옵션은 localhost이외에도 모든 네트워크 인터페이스로 연결할 수 있게 한다.  즉 외부로 서비스할 때 이렇게 해 줘야 한다.
port=8888 옵션은 기본 포트인 8080을 다른 서비스가 점유하고 있을 때 빈 포트를 써준다.
timeout=36000 옵션은 아이들 상태로 방치된 워크시트 세션이 정해준 시간(초)이 지나면 자동으로 종료되도록 한다.  사용자가 로그아웃 하지 않거나 기타등등의 이유로 방치된 워크시트가 있을 경우 자동적으로 정리해 주는 역할을 한다.
server_pool=["sage1@localhost"] 옵션은 워크시트 프로세스가 각각의 사용자마다 따로 실행되도록 특정해 준다.  (참고로 따옴표 앞에 \를 붙인 이유는 스트링으로 취급하기 위해서이다.)
accounts=True 옵션은 세이지 웹사이트 서비스에서 자신이 스스로 자신의 아이디를 만들 수 있도록 메뉴를 제공해 준다.

2> /home/share/powertrain/sage/log/log2.txt  > /home/share/powertrain/sage/log/log1.txt
구문은 리디렉션을 이용해서 로그파일을 만들어주는 것이다.


* 방화벽 관련 참조
http://kimsee.tistory.com/66