맥스스크립트 심화

배치스크립트 1

스크립팅하는애님 2021. 6. 27. 18:00
728x90
반응형

안녕하세요.

애니메이터가 들려주는 MAX Script의 스크립팅하는 애님입니다.

 

오래간만에 글을 남기네요. ㅎㅎㅎ

여전히 바쁜 본업에 근근이 살고 있는 애님입니다.

얼마 전에 '^^'님이 배치 스크립트에 대한 내용을 정리해 달라는 의견을 써주셨습니다.

제 블로그에 배치스크립트에 관한 내용이 있기는 한데, 여기저기 조금씩 나와있어서 다 찾아서 자신의 것으로 하기에는 어려움이 있기는 합니다.

저 역시 '책이나 인터넷을 보며 알게 된 내용을 어디 한 곳에 모아 놓는 것'도 하나의 목적으로 블로그를 시작했는데 블로그의 한계인지 제가 블로그질을 못하는 건지 제가 적은 내용을 찾는 게 생각보다 힘들 기는 합니다. (이렇게 찾는 경우엔 인쇄된 책이 확실히 편합니다. ㅎㅎ)

 

'^^'님이 남기신 내용은 요약하지면 '다수의 맥스 파일에서 특정한 본만 선택하여 익스포트 하는 배치 스크립트'입니다.

그럼 해결해야 하는 내용어 어떤 게 있을지 파악해 보겠습니다.

1. 특정 본을 선택

2. 익스포트

3. 1, 2의 작업을 다수의 맥스 파일에 적용

세세하게 따지고 들어가면 더 많겠지만 크게 보다면 이 정도겠네요.

 

우선 특정 본을 선택하겠습니다.

맥스 창에서 여러 개의 오브젝트를 만들어 두겠습니다.

각각의 이름은 'Cone001, Sphere001, Tube001, Teapot001, Box001'입니다.

이 중에 'Tube001, Teapot001'을 익스포트 할 특정 본으로 생각하고 변수에 저장하겠습니다.

 

1
exportBone = #($'Tube001', $'Teapot001')
cs

 

가장 간단하게 변수에 오브젝트를 저장하는 방식을 선택했는데 필요에 따라서는 외부 파일로 변수값을 저장하는 경우도 있습니다.

외부 파일로 저장하면 스크립트를 모르는 작업자도 간단한 편집 툴(메모장)으로도 쉽게 값을 변경할 수 있는 장점이 있습니다.

자세한 내용은 아래 링크를 참고하시면 됩니다.

https://animaxscript.tistory.com/62?category=1058881

 

파일 열기와 저장(7) FileStream(1)

안녕하세요. 애니메이터가 들려주는 맥스 스크립트의 스크립팅하는 애님입니다. 오늘 할 이야기는 맥스 스크립트에서 Text파일을 만들고 내용을 입출력하는 방법에 대해서 이야기하려고 합니다

animaxscript.tistory.com

https://animaxscript.tistory.com/63?category=1058881

 

파일 열기와 저장(8) FileStream(2)

안녕하세요. 애니메이터가 들려주는 맥스 스크립트의 스크립팅하는 애님입니다. 지난번에 이어서 맥스 스크립트에서 Text파일을 입출력하는 방법에 대해서 이야기하겠습니다. 지난번의 내용이

animaxscript.tistory.com

 

하지만 이 부분까지 다시 설명 하기에는 내용이 복잡해지니 넘어가겠습니다. (나중에 스크립트가 익숙해지시면 시험 삼아 꼭 적용해 보세요.)

 

다음으로 변수에 저장한 오브젝트를 선택하겠습니다.

 

1
2
exportBone = #($'Tube001', $'Teapot001')
select exportBone
cs

 

잘 선택 되었네요.

 

 

두 번째로 해결할 부분은 익스포트인데 이 부분은 아래 링크에 자세히 설명되어 있습니다.

 

https://animaxscript.tistory.com/60?category=1058881

 

파일 열기와 저장(6) Export, Import

안녕하세요. 애니메이터가 들려주는 맥스 스크립트의 스크립팅하는 애님입니다. 오늘 이야기할 파일 열기와 저장은 맥스의 임포트와 익스포트입니다. 임포트는 다른 3D 프로그램의 파일을 3D 맥

animaxscript.tistory.com

 

https://animaxscript.tistory.com/61?category=1058881

 

파일 열기와 저장(6) FBX Export 옵션

안녕하세요. 애니메이터가 들려주는 맥스 스크립트의 스크립팅하는 애님입니다. 오늘 이야기할 내용은 지난번에도 설명했듯이 언리얼, 유니티 엔진에서 사용되는 FBX 파일을 익스포트 옵션을

animaxscript.tistory.com

 

사실 저는 지금까지 익스포트를 FBX 파일만 했기 때문에 다른 방식의 익스포트는 모릅니다.

그렇기 때문에 FBX파일 기준으로 적당히 적겠습니다.

(원하시는 옵션이 있으면 바로 위의 링크에서 내용을 확인하시고 수정하시면 됩니다.)

 

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
exportBone = #($'Tube001', $'Teapot001')
select exportBone
 
pluginManager.loadClass FBXExporter
FBXExporterSetParam "SmoothingGroups" true
FBXExporterSetParam "NormalsPerPoly" false
FBXExporterSetParam "TangentSpaceExport" true
FBXExporterSetParam "SmoothMeshExport" false
FBXExporterSetParam "Preserveinstances" false
FBXExporterSetParam "SelectionSetExport" false
FBXExporterSetParam "GeomAsBone" true
FBXExporterSetParam "Triangulate" false            
FBXExporterSetParam "Animation" true
FBXExporterSetParam "UseSceneName" true
FBXExporterSetParam "Removesinglekeys" false
FBXExporterSetParam "BakeAnimation" true
FBXExporterSetParam "BakeFrameStart" (animationRange.start.frame as integer)
FBXExporterSetParam "BakeFrameEnd" (animationRange.end.frame as integer)
FBXExporterSetParam "BakeFrameStep" 1
FBXExporterSetParam "Skin" true
FBXExporterSetParam "Shape" true
FBXExporterSetParam "FilterKeyReducer" false
FBXExporterSetParam "PointCache" false                
FBXExporterSetParam "Cameras" false            
FBXExporterSetParam "Lights" false            
FBXExporterSetParam "EmbedTextures" false            
FBXExporterSetParam "ScaleFactor" 1.0
FBXExporterSetParam "ConvertUnit" "cm"
FBXExporterSetParam "UpAxis" "Z"
FBXExporterSetParam "ShowWarnings" false
FBXExporterSetParam "GenerateLog" false
FBXExporterSetParam "ASCII" false
FBXExporterSetParam "FileVersion" "FBX201600"
cs

 

다음으로는 fbx파일로 익스포트를 하는데, 파일 이름은 현재 열려 있는 맥스 파일의 이름을 기준으로 할 것입니다.

그렇기 때문에 지금 열려있는 맥스 파일이 저장되지 않아 이름이 없을 경우엔 먼저 저장을 하겠습니다.

저는 '샘플1.max'라고 저장했습니다.

 

이제 스크립트로 맥스 파일 이름을 구하고 그 이름을 이용하여 FBX 파일을 익스포트 하겠습니다.

다음과 같이 입력하고 확인해 보겠습니다.

 

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
exportBone = #($'Tube001', $'Teapot001')
select exportBone
 
pluginManager.loadClass FBXExporter
FBXExporterSetParam "SmoothingGroups" true
FBXExporterSetParam "NormalsPerPoly" false
FBXExporterSetParam "TangentSpaceExport" true
FBXExporterSetParam "SmoothMeshExport" false
FBXExporterSetParam "Preserveinstances" false
FBXExporterSetParam "SelectionSetExport" false
FBXExporterSetParam "GeomAsBone" true
FBXExporterSetParam "Triangulate" false            
FBXExporterSetParam "Animation" true
FBXExporterSetParam "UseSceneName" true
FBXExporterSetParam "Removesinglekeys" false
FBXExporterSetParam "BakeAnimation" true
FBXExporterSetParam "BakeFrameStart" (animationRange.start.frame as integer)
FBXExporterSetParam "BakeFrameEnd" (animationRange.end.frame as integer)
FBXExporterSetParam "BakeFrameStep" 1
FBXExporterSetParam "Skin" true
FBXExporterSetParam "Shape" true
FBXExporterSetParam "FilterKeyReducer" false
FBXExporterSetParam "PointCache" false                
FBXExporterSetParam "Cameras" false            
FBXExporterSetParam "Lights" false            
FBXExporterSetParam "EmbedTextures" false            
FBXExporterSetParam "ScaleFactor" 1.0
FBXExporterSetParam "ConvertUnit" "cm"
FBXExporterSetParam "UpAxis" "Z"
FBXExporterSetParam "ShowWarnings" false
FBXExporterSetParam "GenerateLog" false
FBXExporterSetParam "ASCII" false
FBXExporterSetParam "FileVersion" "FBX201600"
 
exptFileName = getFilenameFile maxFileName
pathFile = maxfilepath + "\\" + exptFileName + ".fbx"
exportFile pathFile #noPrompt selectedOnly:true
cs

 

익스포트 된 '샘플1.fbx'파일을 임포트 하여 열어보면 선택했던 오브젝트만 익스포트 된 것을 알 수 있습니다.

추가된 내용에 대해서 알아보겠습니다.

35번 라인은 현재 열려있는 파일의 이름을 확장자명을 제외하여 변수 'exptFileName'에 저장합니다.

36번 라인은 현재 열려있는 파일의 패스에 현재 열려있는 파일의 이름과 '.fbx'라는 확장자명을 합쳐 변수 'pathFile'에 저장합니다.

37번 라인은 익스포트 하는 명령인데 익스포트 할 때 열리는 창을 무시하고 선택한 오브젝트만 익스포트 한다는 옵션이 붙어 있습니다.

 

지금까지의 내용이 익스포트의 기본적인 내용을 스크립트로 정리한 것입니다.

이것이 작업자의 스크립트 내용에 따라 반복되는 것이 배치 익스포트 스크립트가 되지요.

다음 시간에는 해당 내용을 자동 반복하는 방법을 설명하겠습니다.

오늘은 여기까지 이야기하겠습니다.

728x90
반응형