Saturday, July 25, 2009

ZBrush To Maya Displacement Guide

http://www.pixologic.com/docs/index.php/ZBrush_To_Maya_Displacement_Guide

Maya에서 모델링한 obj 파일 ZBrush로 import 할때 UV 깨지는 현상 해결법

질문 : Maya에서 모델링한 obj 파일 ZBrush로 import 할때 UV 깨지는 현상 해결법
답 : 지브러시는 UV 가 세로가 반대이다. 텍스처 로딩시 Flip Vertical 만 해주면 된다.
부연 : 이런 작업은 16비트 맵에만 해당됨
설명 : http://www.zbrushcentral.com/zbc/showthread.php?t=28393
(본문중에서) Yes. You can apply your texture to the model in ZBrush. Simply load the model and draw it on the canvas. Enter Edit mode. Import the texture into the Texture palette and flip it vertically. It will now wrap correctly onto the model. The catch is that each model can only have one texture applied to it. So if your model uses multiple textures you will probably want to bring each part into ZBrush separately.
주의점 : Photoshop 의 Color Profile 관련 옵션을 제대로 해줘서 포토샵이 멋대로 색을 수정하지 않게 해줄 것.
관련자료 : Scott Spencer의 강좌를 참조할 것 : Gnomonology Rendering Zbrush Displacement Maps
지브러시 및 displacement map 을 알려면 반드시 봐야 하는 강좌임

Thursday, July 23, 2009

Mac이 PC보다 더 좋다?

Mac이 PC보다 더 좋다? (본문중에서) 저는 미국에서 살고 전공도 영화라 영상편집을 많이 합니다... 근데.. 여기선 그래픽작업과 영상편집은 거의다 Mac을 씁니다... 물론 가격은 엄청 비싸죠.. 괜찮은 MacPro사려면 $3000 ~ $5000정도 드니까요. 학교에서도 그래픽이랑 영상쪽으론 MAC으 가르칩니다.. 그정도로 미국애들은 Mac을 많이쓰고.. PC보단 Mac을 좋아합니다. 적어도 그래픽과 영상쪽에선요. 저의 과에서도 컴퓨터를 보면 10명중에 8명이상은 MAC을 쓰고 나머지는 PC씁니다. 물론 PC를 쓰는애는 영상작업을 안하는 애들이고요. 건 사람 나름이고.. 제 친구도 Dreamworks Animation에서 일하는데 그녀석은 직장에선 PC를 쓴답니다. 왜냐고 물었더니 잘은 모른겠는데 Pixar animation사장이 apple사장이라나.. 그래서 라이벌이라서 회사에서 맥을 많이 안산다고.. 하지만 그녀석도 집에선 Mac을 씁니다.. 학교다닐땐 맥으로 배우고요...

드림웍스 Dreamworks 에서 사용하는 컴퓨터 스펙 (2007당시)

슈렉은 디지털 애니의 산 증인 (본문중에서) 영화 제작 기간 동안, AMD 옵테론(Opteron) 듀얼코어 프로세서 기반의 HP 프로라이언트 DL145 서버와 HP xw9300 워크스테이션은 드림웍스 애니메이션 아티스트들이 놀랄 만큼 생생한 캐릭터들을 표현하는데 기여했다... 이 밖에도, 드림웍스 애니메이션 제작진들은 AMD 튜리온(Turion) 64 X2 듀얼코어 모바일 기술 기반의 HP nx6125 노트북을 사용하여 복잡한 제작 활동을 간소화했다... 소비자들은 애니메이션 제작자들이 ‘슈렉 3’의 생동감 넘치는 세상을 표현하기 위해 사용했던 AMD 애슬론 64 X2 듀얼코어 프로세서 기반의 HP 데스크톱 시스템과 AMD 튜리온 64 X2 듀얼 코어 모바일 기술 기반의 HP 노트북을 통해 영화에서와 같은 프로세싱 파워를 각자의 가정에서 경험할 수 있다...

Wednesday, July 22, 2009

photoshop의 "not enough RAM", "not enough memory" error

이런 에러는 포토샵의 메모리 leak 때문에 생긴다. 포토샵은 memory leak 이 많기로 악명높은데 예를 들면 많은 레이어를 만들다가 그 레이어들을 다 합치면 메모리 용량이 줄어들 것으로 예상하지만 메모리 leak 때문에 occupy 하는 용량은 줄어들지 않는 경우가 다반사. 그 외에도 다양한 경우에 이런 에러가 발생한다고 한다. 이런 경우는 그냥 포토샵을 다시 시작하거나, 컴퓨터를 리부트할수밖에 없는 것 같다. http://www.flickr.com/groups/photoshopsupport/discuss/72157594292074207/

Saturday, July 18, 2009

How can I use the old style render layers in Maya 2009?

There is no preset option to create a layer override in Maya 2009 as it was in 2008
However you can still create these overrides by using the following Mel
Where layer1 is the name of the Layer you like to override.

Ambient Occlusion

renderLayerBuiltinPreset occlusion layer1;

Luminance Depth

renderLayerBuiltinPreset linearDepth layer1;

Normal Map

renderLayerBuiltinPreset normal layer1;

Geometry Matt

renderLayerBuiltinPreset matte layer1;

Diffuse

renderLayerBuiltinPreset diffuse layer1;

Specular

renderLayerBuiltinPreset specular layer1;

Shadow

renderLayerBuiltinPreset shadow layer1;

From http://mayastation.typepad.com/

http://eltepedia.blogspot.com/2009/04/can-i-use-old-style-render-layers-in.html

Render pass, multipass render

Friday, July 17, 2009

진짜보다 더 진짜같이… ‘오감체험 놀이’가 뜬다

진짜보다 더 진짜같이… ‘五感체험 놀이’가 뜬다 진동·냄새·바람 까지 4D 입체 영화관 각광 http://www.munhwa.com/news/view.html?no=2009071101210127256001&w=nv 서울 마포구 상암동 CGV 블러디 발렌타인 등 (본문중에서) 의자가 덜컹거리면서 세차게 흔들린다. 누군가 나를 공격하는 느낌에 ‘쭈뼛’ 머리칼이 곤두선다. 피가 흘러내리듯 얼굴이 끈적거리고, 무언가 타는 듯한 매캐한 냄새가 코를 찌른다. 갑자기 눈앞이 화염에 휩싸이고 불쑥 날선 흉기가 날아든다. 서울 마포구 상암동 ‘CGV 포 디멘션(4D·Four Dimensions)관’에서 9일 개봉된 영화 ‘블러드 발렌타인’은 ...

Thursday, July 16, 2009

Endorphin에서 Character Rig Setup

Endorphin에서의 Character Rig Setup 다이얼로그 박스는 옛날 버전(2.6 이전 것)용이다. 튜토리얼은 옛날 버전이라 Character Rig Setup 사용한 것이다. 2.6 버전부터는 Character Rig Setup 다이얼로그가 Motion Transfer Editor 로 바뀌었다. 핫키는 M 이다.

Saturday, July 11, 2009

마야 기능 관련 사이트/블로그 Link

http://www.onoff.ch/2008/01/04/maya-please-dont-select-the-back-face/
http://mayastation.typepad.com/

Anatomy of a walk

Anatomy of a walk http://www.rubberbug.com/walking.htm 인체 애니메이션 해부학적 분석

CUDA releases RUINS, a Real Time Shatter tool for Maya

CUDA releases Real Time Shatter tool for MayaRUINS is a shatter plug-in for Autodesk's Maya. RUINS is an advanced technology designed to simulate shatter sequences in Maya. In Maya, solid shatter is a difficult to solve, moreover a lengthy process, RUINS offers shattering and breaking of your models in an instant. RUINS is production-proven software and capable of meeting most simulation shattering and breaking needs. RUINS costs $66.00-$99.00 See more information about RUINS here: http://www.nshatter.com/index.html Tutorial Available here: http://www.nshatter.com/ruins%201.0.html

NaturalMotion Endorphine 내츄럴모션 사의 엔돌핀

모션캡처motion capture 없이 애니메이션animation 비용 절감 NaturalMotion Endorphine, Morpheme, Euphoria 엔돌핀, 모핌, 유포리아 http://www.naturalmotion.com/

doMenuComponentSelection 관련 에러 해결법-dagMenuProc source 해주기

메뉴 관련해서 Mel 함수를 만들 때 doMenuComponentSelection 가 없다는 에러메시지가 뜨는 경우가 있다.

특히 마야를 처음 띄우고 할때 이런 메시지를 종종 보게 되는데 일단 오른버튼을 눌러서 메뉴를 띄운 후에 실행하면 제대로 됨을 알 수 있다. 이것은 right mouse button menu 관련 코드인 dagMenuProc.mel 가 아직 source 되지 않았기 때문이다. 마야는 시작시에 모든 스크립트를 한꺼번에 다 로드하지 않는다. 예를 들면, Right mouse button menu 관련 코드는 오른 마우스버튼이 처음 눌렸을 시점에 로드한다.

따라서 MEL 처음 부분에

  • if(!`exists doMenuComponentSelection`) eval("source dagMenuProc");

를 라고 넣어주면, doMenuComponentSelection 관련 에러를 보지 않고 제대로 실행되게 할 수 있다.

doMenuComponentSelection 가 dagMenuProc.mel 에 포함된 함수인지 어떻게 아는가 하면, 다음과 같이 whatIs 명령을 쓰면 된다.

  • whatIs doMenuComponentSelection;

그러면 다음과 같이 나온다. // Result: Mel procedure found in: C:/Program Files/Autodesk/Maya2009/scripts/others/dagMenuProc.mel //

참고로 MMM에서는 F6 눌러 build 할때 install script 초반에 자동으로 이 코드를 넣어주고 있다.

MMM에서 whatIs 에 해당하는 함수는 ScriptingUtil_FindMelFileFromFunction() 이다.

오브젝트의 children 얻을때 listRelatives 에 -path 플래그 줄것

$obj 라는 오브젝트의 children 들을 모두 열거할때
  • string $children[] = `listRelatives -c $obj`;
와 같이 하는데, 이렇게 하면 결과값을 다른 함수에 넣어줄 때 문제가 되는 경우가 있다. 그것은 같은 이름의 오브젝트가 다른 parent 밑에 있을 경우이다. 따라서 결과값을 MEL스크립트에서 사용할 것이라면 다음과 같이 해야 한다.
  • string $children[] = `listRelatives -c -path $obj`;
이렇게 하면 ambiguity 가 없는 이름값이 얻어진다. MMM을 써서
  • ListUtil_ListChildren($obj);
해도 된다.

Vertex의 위치를 구하는 법

Component 모드에서 선택된 $vertex 의 world 위치를 구하려면

  • float $pos[] = `pointPosition -w $vertex`;

와 같이 하면 된다.

MEL에서 object의 position 얻기 Get position

Object의 월드좌표에서의 좌표를 얻기를 원하는 경우가 많은데 그때 다음과 같이 하면 안된다.

  • float $x = `getAttr ($obj + ".translateX")`; float $y = `getAttr ($obj + ".translateY")`; float $z = `getAttr ($obj + ".translateZ")`;

다음과 같이 얻도록 한다.

  • vector $pos = `xform -q -ws -rp $obj`;

-q 는 query, -rp 는 rotate pivot 즉 오브젝트의 피봇, -ws 는 world space 을 의미.

MMM을 써서

  • vector $pos = GeomUtil_GetPos($obj); vector $pos = GeomUtil_GetPosAsVector($obj); // 위와 동일 float $pos[] = GeomUtil_GetPosAsArray($obj); // float array 로 얻어짐
같이 하면 간편하다.

MEL 의 move 명령 메모 Set Position

MEL 에서 헷갈리기 쉬운 것이 move 명령의 플래그 -wd 와 -os 등이다. -a 와 -r, -wd, -os 등을 정리해보자.

move 명령은 주로 다음과 같이 쓴다.

물체를 절대좌표 원점으로 옮기기

  • move -a 0 0 0 $obj; // -a 는 -absolute 의 약자.

물체를 vector로 나타낸 절대좌표 $pos 로 옮기기

  • move -a ($pos.x) ($pos.y) ($pos.z) $obj;

물체를 현재위치에서 relative하게 object space 기준으로 z축 -3 만큼 이동

  • move -relative -objectSpace -worldSpaceDistance 0 0 -3 $obj;
  • move -r -os -wd 0 0 -3 $obj; // (위와 동일)

-worldSpaceDistance 라는 플래그는 object space 에서 scale 등이 적용되었을 때 world space 내의 distance 와 object space 내의 distance 가 다르기 때문에 사용된다.

Object space 단위의 distance 로 움직이려면 -wd 를 빼고 다음과 같이 하면 된다. Scale 하고 rotate 한 오브젝트로 시험해보면 쉽게 알 수 있다.

  • move -r -os 0 0 -3 $obj;

주의할점은 물체를 월드 상의 특정 위치에 위치시키려할때

  • setAttr ($obj + ".translateX") ($pos.x); setAttr ($obj + ".translateY") ($pos.y); setAttr ($obj + ".translateZ") ($pos.z);

와 같이 하지 말고 move 명령을 -a 플래그와 함께 써야 쓰라는 것이다. 또는 MMM 의

  • GeomUtil_SetPos();

를 쓰면 편하다.

두 object가 identical 한 것인지 비교 하려면

Array 를 $arr 라고 할 때

  • $arr[size($arr)] = 값

하면 저절로 array 가 늘어나면서 값이 들어간다.

두 object가 identical 한 것인지 비교 하려면

if(longNameOf($objA) == longNameOf($objB)) 와 같이 해야 한다. 이렇게 하면 Hierarchy 에 상관없이 둘이 identical 한지 여부를 파악할수 있다. 만일 그냥 비교하게 된다면 서로 다른 노드인데도 이름이 같은 경우에 문제가 된다.

connectAttr 로 각도 attribute 를 연결할때 자동으로 생성되는 unitConversion 노드

1. connectAttr 와 각도 attribute 
여기서는 connectAttr 로 각도 attribute 를 연결할때의 현상을 알아보자.

// 1. 물체 $a 와 $b 를 만든다.  
// $a 에는 angle 이라는 attribute 가 들어갈 것이다. 그 attribute는 // $b 의 rx 를 조절할 것이다. 
string $a = CreateSimpleObjUtil_Cube(); // polygon Cube 를 만들어준다. 
string $b = CreateSimpleObjUtil_Pipe(); // polygon Pipe 를 만들어준다. 

// 2. cube 에 "angle" 이라는 Attribute 를 slider와 함께 추가 
// (기본값 0, slider 최소값 0, slider 최대값 360) 
NodeUtil_AddAttr_Double_WithSlider $a "angle" 0 0 360; 

// 3. connect attribute 한다. 
connectAttr -f ($a + ".angle") ($b + ".rx");

이제 이렇게 하면 $a 의 angle 어트리뷰트를 슬라이더로 조절할 때 $b 즉 pipe 가 회전하는 것을 볼 수 있다.

2. unitConversion 노드

이제 다음과 같이 해보자.
connectionInfo -destinationFromSource ($a + ".angle"); 
이렇게 하면 아마 pPipe.rx 가 출력될거라고 예상할 것이다. 하지만 실제로는
// Result: unitConversion1.input // 
같은 값이 출력된다. 그 이유는 이 값이 angle 값이기 때문이다. (내부적으로 아마 라디안 값으로 변환하는 모양이다) 다른 보통의 attribute 들을 connectAttr 하면 unitConversion 노드 없이 바로 연결된다. 참고로
ls -type unitConversion; 
를 해보면 모든 unitConversion 노드를 list 해볼 수 있다.

3. disconnect 하는 방법 중간에 unitConversion 노드가 있기 때문에 모든 경우에 disconnectAttr 함수를 쓸수는 없다. 따라서 다음과 같이 해주면
NodeUtil_DisconnectAttr ($a + ".angle") ($b + ".rx"); 
unitConversion 노드가 있는 경우와 없는 경우 모두 connection 이 제대로 끊어진다.

4. Connected 여부 알아내기 중간에 unitConversion 노드가 있는 경우, MEL 에서 기본 제공되는 isConnected 함수를 쓸 경우 connect 되지 않았다고 나온다. 이는 매우 이상하게 느껴질 수 있다 왜냐하면 분명히
  • connect -f "A.rot" "B.rx"
와 같이 연결해놓은 것들이,
  • isConnected "A.rot" "B.rx"
하면 연결되지 않은 결과가 나오기 때문이다. 이는 매우 불편하다. 따라서 NodeUtil_IsConnected()  같은 함수를 만들어 쓰면 이런 경우 편하다. NodeUtil_IsConnected() 함수는 중간에 Unit conversion 노드가 있는 경우도 감안하여 connected 여부를 돌려주기 때문이다.

listRelatives 에서 틀리기 쉬운 것 (Flag 의 and 조건 안됨)

1. 저지르기 쉬운 실수
예를 들면 특정 노드 $obj의 child 로 되어 있는 light 들만 얻으려 할 때
string $children[] = `listRelatives -c -typ light $obj`;
라고 하면 될 것 같지만, 이렇게 하면 잘 되지 않는다.
-c 와 -typ 플래그가 and 의 조건으로 동작하지 않는 것이다.

2. 해결책
따라서
string $children[] = `listRelatives -c $obj`;
와 같이 한 후 여기서 light 노드들만을 가려내는 식으로 얻어내야 한다.
따라서 다음과 같은 함수를 만들어 쓰면 편하다.
ListUtil_ListAllTextures()
ListUtil_ListAllLights()

Maya의 project path와 workspace path

Workspace 와 Project 의 관계에 대해서는 마야의 어떤 help 에도 안나온다(마야 2008 기준).
그러나 Project 마다 workspace.mel 파일이 있는 것으로 보아, 마야의 Project 파일이 workspace.mel 이라는 것을 유추할 수 있 다. 또한 메뉴의 File > Project > Set .. 에서 프로젝트를 세팅한 후       
workspace -q -fullName 
 하면 방금 세팅한 project directory 가 나오는 걸로 보아 workspace 가 project 와 동일한 의미라는 것은 명백하다. 또한 workspace 명령에 -projectPath 같은 프로젝트 관련 플래그가 있는 것도 이러한 사실을 뒷받침해준다. 한가지 혼동될 수 있는 것은       
workspace -q -fullName       
workspace -q -directory 
가 서로 다른 결과를 준다는 것인데 이는 다음 예를 보기로 하자.
C:/gameModeling        
를 set project 하고
C:/gameModeling/scenes/packman.mb
라는 모델링 파일을 로딩했다고 해보자. 이 상태에서       
workspace -q -fullName 하면
C:/gameModeling 가 되고 
workspace -q -directory 하면      
C:/gameModeling/scenes 가 된다. 
그런데 여기서 만약 C:/modelingSources/scenes/star.mb 라는 모델링 파일을 로딩했다고 하자. 그러면 현재 project 는 여전히 C:/gameModeling 지만 씬은 C:/modelingSources 라는 다른 프로젝트에서 로딩되는 것이다. 따라서      
workspace -q -fullName 하면
C:/gameModeling 가 되고        
workspace -q -directory 하면      
C:/modelingSources/scenes 가 된다.
따라서 workspace -q -fullName 를 SystemUtil_GetProjectDir() 라는 함수로 만들어주고
workspace -q -directory 를 SystemUtil_GetWorkspaceDir() 라는 함수로 만들어주면
혼동 없이 쓰기 좋다.

Light 노드 리스트list 시 주의점

1. objectType 에서의 -isType

어떤 오브젝트 $obj 가 라이트인지 구별하기 위해

  • if(`objectType -isType light $obj` == "light")

와 같이 하면, 스팟라이트 같은 경우 리턴값이 spotLight 이 되기 때문에 의도한것과는 다르게 if 문 자체가 false 가 되어버리는 문제가 있으므로 주의해야 한다.

2. ls 의 -type

ls 를 쓸때는

  • ls -type light

  • ls -type spotLight

를 용도에 따라 둘다 사용할수 있다.

3. Light shape 노드와 Transform 노드

ls 명령으로 light 노드를 리스트하면 light shape 노드들이 리스트되는데, 원하는 것이 light transform 노드인 경우라면 귀찮아진다. 따라서 이런 경우는 MMM 의 ListUtil_ListAllLights() 등을 쓰는 것이 간편하다.