posted by cimple 2009. 10. 14. 14:23

수업 시간 과제로 나온 고슴도치 가시 붙이기.

커스텀 플러그인을 짜서 고슴도치에 가시를 복사해 붙이고,

노드를 통해 데이터를 넘겨서 실시간으로 가시를 조정할 수 있도록.












ThEnd.
posted by cimple 2009. 10. 7. 11:29


1. 개발할 때 window memory name 중복문제

MEL script 로 UI 를 개발할 때, window 의 memory name 중복 문제가 발생한다.
즉, 이미 내가 실행하고 있는 윈도우를 다시 실행할 때나,
아니면 이미 내가 종료한 윈도우라고 하더라도 메모리에 이름이 삭제되지 않아서 같은 memory name 을 가진 윈도우를 생성할 수 없는 문제 등이 발생하는 것이다.

이를 위해서 다음과 같은 코드를 추가해 주자.

global string $f_painter_memoryName = "uiFeaturePainter";
global string $f_painter_titleName = "Feature Painter 0.1";

global proc ui_f_painter()
{
  global string $f_painter_memoryName;
  global string $f_painter_titleName; 


  int $developing = false;
  if($developing && `window -exists $f_painter_memoryName`)
 deleteUI $f_painter_memoryName;
  if(!`window -exists $f_painter_memoryName`)
 window -title $f_painter_titleName -width 400 -height 500 -sizeable true $f_painter_memoryName;

  ...

}


이렇게 하면 윈도우의 memory name 중복 문제를 해결할 수 있다.




2. 특정 field 를 edit 하는 방법.


예를 들어, select 버튼을 누르면 위의 selected Object text field 옆에 현재 선택한 object 의 이름이 뜨도록 하고 싶다고 가정하자.

그렇다면 UI 함수 안에서 text field 는 이렇게 만들어져 있을 것이다.


textFieldGrp -label "selected Object : " -text " " -editable false;


여기에서 맨 끝에 객체의 이름을 추가해 줄 수 있다.


textFieldGrp -label "selected Object : " -text " " -editable false selectField;


그리고, 다른 함수에서 이 객체의 이름을 가지고 text field 를 수정해 줄 수 있다. 중요한 것은 -edit 라는 파라미터이다.

global proc string selectObject()

  string $selCapture[0] = `ls -sl`; 
  string $selectObj = $selCapture[0];
 
textFieldGrp -edit -label "selected Object : " -text $selectObj -editable false selectField; 
  return $selectObj;
}


이렇게 하면 button 을 누를 때 -cmd "selectObject" 이렇게 selectObject 함수를 호출하기만 하면 text field 의 값을 바꾸어 줄 수 있다.


3. 화면의 Layout 을 나누는 방법

MEL 에서 화면의 Layout 을 나누는 방법은 여러 가지이다.



(1) frameLayout

그림과 같이 화면을 나누어주고 싶을 때 사용한다. 프레임 전체를 접었다 펼 수 있는 -collapsable, 외곽 스타일을 정해줄 수 있는 -borderStyle 등을 정해줄 수 있다.




(2) columnLayout

보통 UI 의 component 들은 각 요소가 세로로 배열되는 경우가 많다.
그럼 단지 columnLayout; 으로 간단하게 component 들을 세로로 순차적으로 배열할 수 있다.


frameLayout ...;
columnLayout;

...

serParent ..;
setParent ..;



이렇게, frameLayout 과 함께 자신의 부모를 window 로 지정해준다. 이렇게 하나의 단위를 이루면서 생성되는 경우가 많다.



(3) gridLayout

버튼을 보기좋게 배치할 때 gridLayout 을 사용하였다. 사실 아래와 같이 분할되어 있다.


이것은 다음과 같이 이루어져 있다.


gridLayout -cellWidthHeight 133 40 -numberOfRowsColumns 1 3;
text -label " ";       
button -label "select" -align "center" -width 133 -height 30 -actOnPress true -command "selectObject";   
text -label " ";
setParent ..;


이런 식으로 cell 을 분할한 다음, 빈 공간에는 공백 텍스트를 주고, 버튼을 배열하는 방식으로 버튼 위치를 조절할 수 있다.


(4) rowColumnLayout

행과 열을 나누어서, 그 width-height 를 분할해서 component 들을 배치할 수 있다.
아래와 같이 index 가 매겨지고 그 크기값을 주어서 보기 좋게 분할할 수 있다.




rowColumnLayout -numberOfColumns 4 -columnWidth 1 60 -columnWidth 2 160 -columnWidth 3 100 -columnWidth 4 40;
   text -label " ";  
   attrEnumOptionMenu -l "Map : " -ei 0 "angle Map" -ei 1 "density Map" -ei 2 "scale Map"; 
   button -label "edit" -width 10 -height 30 -align "center";
 setParent ..;


이렇게 하면 좀더 자유롭게 component 들을 배치할 수 있다.


5. 기타등등

radio 버튼 등을 배치할 때 기본값으로 하면 버튼간의 간격이 너무 넓다. component 들의 parameter 를 이용해서 이 간격들을 조절해 줄 수 있다.

radio 버튼같은 경우에는 각 버튼의 index 를 가지고 위치를 조절해줄 수 있다.




radioButtonGrp -numberOfRadioButtons 3 -columnWidth 1 105 -columnWidth 2 90 -columnWidth 3 70 -label "Operation : " -labelArray3 "replace" "add" "smooth";


MEL 의 모든 parameter 를 외우면서 활용하기란 불가능하다. 자주 사용하는 command 의 parameter 라면 숙지해야겠지만, MAYA Document 를 적극 활용하면서 친숙해지는 방법이 가장 효율적이라고 생각된다.

ThEnd.
posted by cimple 2009. 9. 9. 23:08

Visual Studio 2008 에서 Maya 2009 Plug-in Wizard 를 사용하는데
지속적인 문제가 있어 이를 해결해 보았습니다.

사용법은 첨부된 파일(MayaPluginWizard2.0.zip)을 다운로드 받은 후 압축을 풀어 보면
MayaPluginWizard2.0\_MayaPluginWizard 안에

MayaPluginWizard 라는 폴더와

MayaPluginWizard.ico
MayaPluginWizard.vsdir
MayaPluginWizard.vsz


3개의 파일이 있습니다.

MayaPluginWizard 폴더는
C:\Program Files\Microsoft Visual Studio 9.0\VC\VCWizards
폴더 안으로 복사해 주시고,
나머지 3개의 파일은
C:\Program Files\Microsoft Visual Studio 9.0\VC\vcprojects
안으로 복사해 주십시오.

그리고 Visual Studio 2008 을 실행시킨 후 Project 를 생성하면
정상적으로 MayaPluginWizard 가 실행되는 것을 볼 수 있습니다.



////////////////////////////////////////////////////////////////////////

[수정한 사항 설명]
(이 부분은 꼭 보셔야 할 부분은 아닙니다. 위의 설명대로 따라만 하셔도 됩니다.)


1번사항.

MayaPluginWizard2.0\_MayaPluginWizard\MayaPluginWizard.vsz
의 원본 내용은

//
VSWIZARD 7.0
Wizard=VsWizard.VsWizardEngine.7.1

Param="WIZARD_NAME = MayaPluginWizard"
Param="FALLBACK_LCID = 1033"
//

인데, 이 내용을

//

VSWIZARD 7.0
Wizard=VsWizard.VsWizardEngine.9.0

Param="WIZARD_NAME = MayaPlugInWizard"
Param="ABSOLUTE_PATH = C:\Program Files\Microsoft Visual Studio 9.0\VC\VCWizards\MayaPluginWizard"
Param="FALLBACK_LCID = 1033"

//

로 변경시켜 주었습니다.



2번사항.

MayaPluginWizard2.0\_MayaPluginWizard\MayaPluginWizard\HTML\1033\default.htm

의 '2008' 을 모두 '2009' 로 변경하였습니다.

(Maya 2009 의 devkit 폴더 안에 들어있는 PluginWizard 파일에도 2008로 되어 있더군요;;)




///////////////////////////////////////////////////////////////////////////////////



[추가사항]
(이 부분은 위의 예와 다른 VisualStudio 나 Maya 의 버전을 사용하신다면 참고하시면 됩니다.)



1. Visual Studio 2005 에서 Maya 2009 Plug-in Wizard 를 사용하고 싶다면,
다운로드 받은 파일에서 MayaPluginWizard.vsz 파일의 내용을

//
VSWIZARD 7.0
Wizard=VsWizard.VsWizardEngine.8.0

Param="WIZARD_NAME = MayaPlugInWizard"
Param="ABSOLUTE_PATH = C:\Program Files\Microsoft Visual Studio 8\VC\VCWizards\MayaPlugInWizard"
Param="FALLBACK_LCID = 1033"
//

로 바꿔준 후 저장한 다음, 똑같이 폴더는
C:\Program Files\Microsoft Visual Studio 8\VC\VCWizards
로, 3개의 파일은
C:\Program Files\Microsoft Visual Studio 8\VC\vcprojects
로 복사해 주시면 됩니다.


2. VS2005, VS2008 에서 Maya 2008 PluginWizard 를 사용하시고 싶다면
C:\Program Files\Autodesk\Maya2008\devkit\pluginwizard
에서 기본적으로 제공되는 MayaPluginWizard 압축파일의 압축을 푼 후,

MayaPluginWizard 폴더는

(VS2005의 경우) C:\Program Files\Microsoft Visual Studio 8\VC\VCWizards
또는
(VS2008의 경우) C:\Program Files\Microsoft Visual Studio 9.0\VC\VCWizards
폴더 안으로 복사해 주시고,

나머지 3개의 파일중 MayaPluginWizard.vsz 파일을 메모장/워드패드로 열어서

(VS2005의 경우)
//
VSWIZARD 7.0
Wizard=VsWizard.VsWizardEngine.8.0

Param="WIZARD_NAME = MayaPlugInWizard"
Param="ABSOLUTE_PATH = C:\Program Files\Microsoft Visual Studio 8\VC\VCWizards\MayaPlugInWizard"
Param="FALLBACK_LCID = 1033"
//

(VS2008의 경우)
//
VSWIZARD 7.0
Wizard=VsWizard.VsWizardEngine.9.0

Param="WIZARD_NAME = MayaPlugInWizard"
Param="ABSOLUTE_PATH = C:\Program Files\Microsoft Visual Studio 9.0\VC\VCWizards\MayaPlugInWizard"
Param="FALLBACK_LCID = 1033"
//

로 수정한 다음 3개의 파일 모두
C:\Program Files\Microsoft Visual Studio 9.0\VC\vcprojects
안으로 복사해 주십시오.



이 글의 방법대로 한다면, Visual Studio 나 Maya 가 설치된 폴더를 임의로 지정해 주지 않았다는 가정 하에 

Maya2008 Plug-in Wizard 의 VS2005, VS2008 에서의 사용,
Maya2009 Plug-in Wizard 의 VS2005, VS2008 에서의 사용을 모두 커버할 수 있을 것입니다.


ThEnd.

posted by cimple 2009. 7. 29. 21:23

C'est La Vie


C'est La Vie 는 불어로, '이것이 인생이다' 라는 뜻을 가지고 있다.
이영규, 송재원, 추연준, 이재준.
4명이 'Team Lavie' 를 이뤄서 일구어낸 1년 농사의 결실이며,
2008년 아주대학교 미디어학부 졸업작품으로 제작된 5분 30초 분량의 Full 3D 애니메이션이다.

나는 모든 캐릭터 애니메이션(라비, 비셔스, 백혈구),
부유물 애니메이션, 일부 섬모 애니메이션, 일부 배경 오브젝트 모델링,
그리고 라비의 목소리를 담당했다.




AWARDS

- 2009 SBS 창작애니메이션 대상 TV / 극장 상영작 결정





- 2009 이탈리아 카툰클럽 애니메이션 페스티벌 초청작




- 2009 스페인 온앤오프 페스티벌 경쟁부문 선정 (진행중)





SOUND


http://rwlim.tistory.com/entry/Cest-La-Vie

위 링크는 C'est La Vie 의 사운드 디자인을 홀로 맡은 UBY 의 블로그로,
C'est La Vie 의 사운드 트랙 및 그의 다양한 작품들을 감상할 수 있다.



ThEnd.


posted by cimple 2009. 2. 1. 21:49


2007년 여름, '3D 렌더링 워크샵' 이라는 주제로 열린 겨울방학 특강에서 진행했던 프로젝트 입니다.
프로젝트라 이름을 붙이니 거창하지만, 개인적으로 작품을 하나 만들면서
모델링, 쉐이딩, 렌더링 연습도 하고, HDRI 이미지를 이용한 라이팅 연습도 하면서
Z-brush 등의 다른 3D 툴도 배울 수 있었던 좋은 기회였습니다.


3D 렌더링 워크샵의 주제는 '신화의 주인공을 만들어보라!' 였습니다.

제가 선택한 것은 영화 300에 나오는 강한 스파르타 전사들을 모티브로 해서
강력한 군신(軍神) 을 만드는 것이었지요.


그림1. 영화 300의 한 장면


실제로 영화 300은 배경을 풀 3D 로 제작해서 더욱 화제가 되었던 영화였기도 하다는...
...일단 차치하고, 어떤 과정으로 제작하였나, 한번 돌아보도록 하겠습니다.



1. 레퍼런스 수집

모든 것의 기초는 레퍼런스를 수집하는 것에서 시작합니다. 저는 300의 주인공을 모델로 하기로 결정했기 때문에, 그에 필요한 여러 가지 레퍼런스들을 수집합니다.

그림 2. 주인공 제라드 버틀러의 얼굴

예, 주인공 제라드 버틀러의 얼굴입니다. 이 외에도 모델링에 필요한 모든 물건들의 레퍼런스를 준비해 놓습니다. 헐벗고 있는 300 전사들인 줄 알았더니, 의외로 소품들이 다양하더군요.

그림 3. 방패, 투구, 창, 망토 등의 다양한 소품들 레퍼런스

그리고 300 전사들의 생명은 바로 우람한 근육! 이를 잘 표현하기 위해 다양한 근육질의 남성 신체 레퍼런스를 수집했습니다.

그림 4. 다양한 인체 레퍼런스


물론 실제로는 훨씬 많은 레퍼런스를 준비합니다. 작품은 그 레퍼런스 이상을 뛰어넘을 수 없다. 라는 말도 있거든요. 많은 자료수집을 통해, 더 나은 작품을 만들어 내는 것은 창작의 기본입니다.




2. 얼굴 모델링

이제 본격적으로 모델링에 들어가도록 합니다. 모델링은 일단 얼굴 모델링부터 시작했습니다.

먼저 얼굴 모델링을 하기에 앞서, 얼굴을 구성하는 와이어의 흐름, 즉 토폴로지(topology) 를 구성합니다. 토폴로지는 다양한 뜻을 가지고 있는데, 모델링에서는 면의 배치, 즉 어떤 식으로 면을 분할하고, 배치할 것인가를 의미합니다.

그림 5. 얼굴 토폴로지 구성

폴리곤 모델링은 면들의 집합으로 이루어지는데, 오브젝트를 Smooth 했을 때 부드러운 결과가 얻어질 수 있도록 각 폴리곤의 크기를 되도록 균등하게, 와이어의 흐름을 잘 이어지게 모델링하는 것이 중요합니다. 그래서 이렇게 미리 손으로 와이어의 흐름을 그려보면, 직접 마야에서 모델링을 할 때 초보자들에게는 많은 도움이 됩니다.

이후로는 열심히 모델링 해 나가면 됩니다. 본래 정확한 모델링은 물체의 삼면도, 즉 정면, 측면, 평면에서의 도면을 마야에 import 시킨 후 작업하는 것이 가장 정확합니다. 그러나 제라드 버틀러의 삼면도를 가지고 있을 리 만무하니, 삼면도에 가까운 레퍼런스를 준비하고, 상상력을 함께 동원해서 최대한 모델과 닮게 모델링하려 노력합니다.


그림 6. 1차 얼굴 모델링


어때요, 제라드 버틀러와 좀 닮았습니까?
(퍽)
;;; ...첫 술에 어떻게 배부르겠습니까... 계속해서 모델링을 수정해 나갑니다.

그림 7. 2차 얼굴 모델링



머리카락과 수염은 3D 모델링 툴인 Z-brush 를 이용했습니다. 붓으로 칠하듯 모델링을 할 수 있는 매우 획기적인 툴입니다.

이제 조금은 제라드 버틀러와 닮았다고 해 주셔도 괜찮을 것 같습니다;;;

좌우지간 얼굴 모델링은 이 정도로 마무리하고, 신체 모델링으로 넘어갑니다.




3. 신체 모델링

신체 모델링, 바디 모델링은 사실 굉장히 어렵게 느껴지지만, 또 그렇게까지 어렵지는 않습니다. 얼굴 모델링을 능숙하게 할 정도의 실력이라면 신체도 어렵지 않게 만들 수 있겠구나, 생각했습니다.

신체 모델링은 위에서 보셨듯이 괜찮은 레퍼런스들이 있었던 것이 좀더 작업을 도왔던 일일지도 모르겠습니다. 물론 만족할 만한 결과물이 나온 것은 아니지만, 처음 시도했던 것 치고는 뚝딱뚝딱 몸이 만들어져서 스스로도 신기했었습니다.

그림 8. 포즈 구상




이 단계에서 기본적인 포즈를 간략하게 스케치해봅니다. 그리하여 이 단계에서 신체의 강조 및 생략할 부분을 정하게 되는데, 공부하는 마음으로 일단 전신을 다 모델링해 보았습니다.

그림 9. 인체 모델링 과정.

몸에는 기본적인 컬러만 입혀 보았습니다. 아직까지 많이 어색하지만, 이후로 계속 모델링을 수정합니다.

이런 식으로 모델링을 하게 됩니다. 이번 300 프로젝트 과정은 전문적인 지식보다는, 전체적으로 CG 작업이 어떻게 진행되는가 맛보는 글로 삼도록 하겠습니다.

ThEnd.

 

posted by cimple 2009. 2. 1. 19:47

발전사라고 할 수도 없지만, 일단 보유하고 있는 옛날 자료들을 긁어모아 올려봅니다.

언젠가는 즐거운 추억이 될 수도 있겠지요...


 


꽃입니다. 마야를 처음 접한 2005년 1학기, 컴퓨터 애니메이션 시간에 만들었던 것으로 기억나네요.




2007년, 전역하고 다시 열심히 마야를 해보겠노라 의욕에 불타서 책보며 그대로 따라 만들었던 로봇이네요.



2007년 겨울, 얼굴 모델링에 도전해보고자 뚝딱거렸던 얼굴입니다.
코가 왜저래?

ThEnd.