반응형

개발이라 하면 두드러기가 나는 디자이너 들이 있습니다.
아니 대부분 그렇죠.
이글을 읽고 계신 본인도 그러하다면, 그런데 스크립트로 무언가를 하고 싶다면 어쩌겠습니까.. 배워야지요.
 
그래서 책을 사고 공부를 하려면 눈에 영 들어오지를 않습니다.
"hello world !"로 시작한 강좌는 몇 강 따라가다 보면 내가 뭘 하고 있는 것인지 모르겠고 어느 순간 무슨말인지 하나도 모르겠는 상태가 되고 결국 '올해도 포기~' 하는 단계에 이르게 되죠.
 
자 그렇지 않도록 한번 포스팅을 해볼까 합니다.
게임 업계에 계시든 건축쪽에 계시든 다른 어떤 분야에 계시던 간에 MAX script 를 이용하여 무언가를 해보고 싶으신 분들을 위하여 강좌 형태로 포스트를 남겨보겠습니다.
 
참고로 저는 디자이너 이며 수년간 맥스 스크립트를 이용하여 실무를 하고 있는 사람입니다. 물론 포토샵 스크립트도 사용하고 일러스트 스크립트도 사용하고요, VBA 나 VB.NET, C# .NET 도 이용하고 있습니다. 
어떤 언어인가가 중요한 것이 아니라 무엇을 개발 할 것인 가가 중요한거죠.
 

비 개발자도 개발할 수 있는 맥스 스크립트

자 그럼 시작해 볼건데요. 
이 카테고리를 통해서 뭘 다룰 것이냐 하면요. 간단한 맥스 스크립트 구문, 예제, 문법 등을 체계 적이지 않게 포스팅을 할것입니다. 체계적인 순간 갈길이 너무 멀어 힘들어 집니다. 그냥 쓸만한 스크립트들을 설명과 함께 올려보겠습니다.
예를 들면 이런 것 이죠.
<obj 파일 익스포트 예제> - 선택한 개체만

exportPath = "C:\\Users\\mnsoft\\Documents\\exporttest\\"

objs = getCurrentSelection()

for o in objs do
(
	clearselection()
	select o
	
	if (doesFileExist (exportPath + o.name + ".obj" )) then
	(
		exportfile (exportPath + uniqueName(o.name) + ".obj" ) #noprompt selectedOnly:true
	)
	else
	(
		exportfile (exportPath + o.name + ".obj" ) #noprompt selectedOnly:true
	)	
)

이러한 스크립트를 이용하면 아주 많은 시간을 단축할 수 있습니다. 코드를 개발하는 방법에 따라서 혁신 적으로 시간을 단축할 수도 있습니다. 어떤 작업을 자동화 할수 있는가를 정확하게 판단할수 있는 눈과 머리가 만들어 져야 합니다.
<scene 안의 모든 개체의 isolate vertex 제거하기>

objs = getCurrentSelection()

for o in objs do
(
	case (classof o) of
	(
		Editable_mesh:
		(
			meshop.deleteIsoVerts o
			break;
		)		
		Editable_Poly:
		(
			polyop.deleteIsoVerts o
			break;
		)		
		default:
		(
		)
	)	
)

이런 것들 입니다.
처음 시작하는 여러분들께 중요한 것은 코딩 실력이 아니라 무엇을 개발해서 나의 업무 시간을 줄일 것인가 를 빨리 찾아내는 것이죠.
필요한게 있으면 방법은 찾아지게 되어 있습니다.
본 카테고리를 통하여 가능한 손쉽게 해답을 찾는 방법도 설명 드리겠습니다.
빠르지는 않겠지만 천천히 따라오실 수 있도록 지속적으로 포스팅하도록 하겠습니다.
틈틈히 들어오셔서 업데이트 된 내용이 있으시면 차곡차곡 챙겨 가시기 바랍니다.
 
이번 카테고리에서 아래에 해당되는 내용들을 다루어 보겠습니다. (계속 추가 예정)

  • 점과 점 사이의 거리 구하기, 점과 점사이에 있는 특정 위치에 해당 되는 좌표 구하기
  • 특정 개체가 있는 위치로 카메라 move, zoom 시키기
  • 선택한 모든 개체들중 특정 클래스 (shape, mesh 등) 만 걸러내기, 또는 재 선택하기
  • 두 직선의 교점 구하기
  • sin, cos 을 이용하여 동그라미, 부드러운 곡선 그려보기
  • 폴리곤에 두께 주기
  • 여러개의 점을 직선화 하기
  • OBJ 파일 자동 익스포트 시 설정 변경하기
  • 좌표를 정수형으로 모두 이동 시키기
  • ASE 파일 익스포트 옵션 자동으로 설정하기
  • 대량의 파일 Import or merge 하기
  • 특정 max 파일 안의 특정 파일만 현재 scene 으로 merge 하기
  • 여러개의 맥스 스크립트 파일 불러들여서 사용하기
  • 다이얼로그 창 / UI 만들어 사용하기
  • UVW 맵 컨트롤 하기
  •  

필요하신 스크립트가 있으면 뎃글로 문의 남겨 주세요. 시간되면 한번 짜 보겠습니다. 
물론 외주 의뢰를 주셔도 됩니다. 저렴하게 개발해 드릴께요 ㅋ
 
mariine98@gmail.com
여기로 메일주시면 됩니다.

즐거운 코딩생활 되시길 바랍니다.
 
그럼 이만~
 
2020/04/29 - [분류 전체보기] - 3DS MAX 스크립트로 개체 선택하기

3DS MAX 스크립트로 개체 선택하기

Max Script 를 이용하여 무엇인가를 하려면 필수 요소라고 할 수 있는 것 중의 하나가 개체를 선택하거나 지정하는 방법입니다. 여기서 개체는 3D Scene 안의 오브젝트, 스플라인, 헬퍼 등과 같은 사��

diy-dev-design.tistory.com

 

반응형
반응형

3DS MAX 스트립트를 이용하여 스크립팅을 하기 시작하면 MAX 로 할 수 있는 일이 너무나 많고 빠르게 진행된다는 것을 알 수 있게 됩니다. 이 놀라운 기능들을 스크립트를 매번 실행시키는 것이 번거롭고 여러가지 기능을 한번에 수행하거나 관리할 수 있게끔 만들고 싶은 욕심이 생길 때가 있습니다. 그럴때 그런 기능들을 한곳에 모아 실행하기 위하여는 마치 어떤 툴이나 프로그램 처럼 UI 가 있는 것이 실행하기도 편하고 보기에도 좋을 것입니다.

그래서 오늘은 3DS MAX Script 를 이용하여 다이얼로드 창을 만드는 방법, 그리고 간단한 UI 를 적용하는 방법을 알아 보겠습니다.

  • 다이얼로그 창 만들기 / 버튼 만들어 기능 연결하기
  • 롤아웃 플로터 만들기

먼저 3DS MAX 에서 다이얼로그 창을 만들어 보겠습니다.

다이얼로그 는 윈도우에서 예/아니오 경고창과 같이 간단한 타이틀바와 닫기 버튼, 내부에 간단한 UI 들을 담을 수 있는데요. 기본적으로는 rollout 을 만들어 rollout 내부에 UI 를 담고 만들어진 rollout 을 다이얼로그창의 형식으로 보여주는 형태로 되어 있습니다.

 

다이얼로그 창 만들기 / 버튼 만들어 기능 연결하기

가장 기본형은 아래와 같습니다.

rollout myFirstRollout "my menu 01"
(
	button bt_myButton "press me!"
	
	on bt_myButton pressed do
	(
		messageBox "You got it!"
	)
	
)

createDialog myFirstRollout

먼저 롤아웃을 선언해 준 뒤 그안에 버튼을 하나 만들고 버튼을 눌렀을때 특정한 메시지를 팝업으로 보여주는 다이얼로그입니다.

바로 요렇게 만들어 지게 됩니다.

심플한 다이얼로그

가운데 있는 버튼을 눌러주면 아래와 같이 팝업으로 메시지가 출력이 됩니다.

messagebox 가 뜬 모습

 

자 이게 기본은 했고요. 다이얼로그의 크기, 위치, 버튼의 크기나 위치등을 지정하지 않았기 때문에 위와 같이 작게 표시가 되었는데요. 여기서 그 크기위 위치를 지정하는 방법을 알아보도록 하겠습니다.

제일 마지막 줄에 createDialog 라는 명령으로 만들어준 롤아웃을 다이얼로그라는 형태로 보여주었는데요. 이부분에서 다이얼로그릐 크기, 위치를 지정할 수 있습니다. 마지막 줄의 내용을 아래와 같이 수정해 보겠습니다.

createDialog myFirstRollout 300 200 100 100

요런 식으로 정의 할 수 있는데요. 4개의 숫자를 뒤에 연속해서 써주게 되는데

[가로길이] [세로길이] [윈도우상의 가로위치] [윈도우상의 세로위치]

의 순서로 적어주면 되며 뒤의 두가지 숫자를 생략하게 되면 화면의 중앙에 다이얼로그가 생성이 됩니다.

위의 코드로 수정한 뒤 실행하게 되면 아래와 같이 윈도우 좌측 상단에 가로 300 세로 200 픽셀의 다이얼로그 창이 만들어 지게 됩니다.

화면의 좌상단에서 열린 다이얼로그 창

버튼을 하나 추가해 볼까요?

rollout myFirstRollout "my menu 01"
(
	button bt_myButton1 "press me!"
	button bt_myButton2 "don't press me!"
	
	on bt_myButton1 pressed do
	(
		messageBox "You got it!"
	)
	
	on bt_myButton2 pressed do
	(
		destroyDialog myFirstRollout
	)
	
)

createDialog myFirstRollout 300 200 100 100

자 이제 버튼이 두개가 되었습니다. 두번째 버튼을 누르게 되면 다이얼 로그 창이 닫히는 그런 코드가 실행이 됩니다.

스크립트를 실행해 보면 아래와 같이 버튼이 두개가 표시됩니다.

다이얼로그에 버튼이 두개가 되었다.

그런데 저는 저 두개의 버튼을 가로로 배치하고 싶어서 코드를 약간 더 손을 보았습니다. 레이아웃을 조정하는 것이죠.

rollout myFirstRollout "my menu 01"
(
	button bt_myButton1 "press me!" pos:[10,10] width:130 height:30
	button bt_myButton2 "don't press me!" pos:[150,10] width:130 height:30
	
	on bt_myButton1 pressed do
	(
		messageBox "You got it!"
	)
	
	on bt_myButton2 pressed do
	(
		destroyDialog myFirstRollout
	)
	
)

createDialog myFirstRollout 300 200 100 100

맨위에 버튼을 만들어주는 부분에 pos 와 width, height 를 설정해 줌으로써 사용자가 원하는 위치와 크기로 버튼을 배치할 수 있습니다.

실행해보면 아래와 같이 변경이 됩니다.

두개의 버튼이 가로로 배치되었다

 

네.. 그럴싸 해 졌습니다.

롤아웃 플로터 (rollout floater) 만들기

이번에는 좀더 고급 UI 를 이용해 보겠습니다. 3DS MAX 의 우측에 보면 여러가지 옵션이나 설정을 입력하고 기능을 선택하는 메뉴바가 나오는데요. command pannel 이라고 합니다. 해당 패널에 보면 기능이 많은 경우 기능을 접었다 폈다 할 수 있는 형태로 메뉴가 만들어져 있습니다. 

유사한 기능끼리 그룹을 만들어 묶어주고 사용하지 않는 기능 그룹은 묶어 둘 수 있어 상당히 편리한 UI 라고 할 수 있겠습니다. 스크립트  UI 로도 거의 동일한 기능을 아주 쉽게 구현할 수 있습니다.

그런 기능들의 묶음이 위에서 보여주었던 하나의 롤아웃이 되며 롤아웃들을 하나의 창에 보여줄 수 있는 개체가 롤아웃 플로터 입니다.

간단한 예를 보여드리겠습니다.

rollout myRollout_ani "my Animation"
(
	button bt_myButton1 "run" pos:[10,10] width:130 height:30
	button bt_myButton2 "stop" pos:[150,10] width:130 height:30
	
	on bt_myButton1 pressed do
	(
		messageBox "No function now"
	)
	
	on bt_myButton2 pressed do
	(
		messageBox "No function now"
	)	
)

rollout myRollout_geom "my Geometry"
(
	button bt_myButton1 "convertTo mesh" pos:[10,10] width:130 height:30
	button bt_myButton2 "remove Iso Vertex" pos:[150,10] width:130 height:30
	
	on bt_myButton1 pressed do
	(
		messageBox "No function now"
	)
	
	on bt_myButton2 pressed do
	(
		messageBox "No function now"
	)	
)

myTool = newrolloutFloater "my custon tool" 300 300 100 100

addRollout myRollout_ani myTool 
addRollout myRollout_geom myTool 

myTool.open

두개의 롤아웃을 먼저 만들고 myTool 이라는 변수를 새로운 롤아웃 플로터로 설정한뒤 myTool 에 두개의 롤아웃을 추가합니다. 끝으로 만들어진 롤아웃 플로터를 보여주는 것이죠.

간단하지 않습니까?

실행하면 아래와 같이 됩니다.

두개의 롤아웃이 있는 메뉴가 만들어 졌다.

 

이렇게 만들어진 롤아웃 플로터내의 롤아웃 들은 아래와 같이 접는것도 가능합니다.

롤아웃은 말그대로 접어 올릴수 있는 메뉴다.

이제 제법 툴같이 만들어 졌습니다.

 

자 3DS MAX 에서 롤아웃을 만드는 것을 알아보았습니다.

이제 다음 강좌에서는 롤아웃 내의 버튼에 기능을 할당해 보도록 하겠습니다. 인터넷에서 긁어 모은 각종 스크립트 들을 저렇게 만든 롤아웃 플로터 하나에 모아두면 필요할때 빠르게 기능 동작이 가능할 것 입니다.

 

그럼 이만~

 

2020/04/29 - [분류 전체보기] - 3DS MAX 스크립트로 개체 선택하기

 

3DS MAX 스크립트로 개체 선택하기

Max Script 를 이용하여 무엇인가를 하려면 필수 요소라고 할 수 있는 것 중의 하나가 개체를 선택하거나 지정하는 방법입니다. 여기서 개체는 3D Scene 안의 오브젝트, 스플라인, 헬퍼 등과 같은 사��

diy-dev-design.tistory.com

 

2019/12/16 - [DEV/MAX SCRIPT] - 3DS MAX SCRIPT 강좌?? 무작정 시작하기 - 디자이너 추천

 

3DS MAX SCRIPT 강좌?? 무작정 시작하기 - 디자이너 추천

개발이라 하면 두드러기가 나는 디자이너 들이 있습니다. 아니 대부분 그렇죠. 이글을 읽고 계신 본인도 그러하다면, 그런데 스크립트로 무언가를 하고 싶다면 어쩌겠습니까.. 배워야지요. 그래

diy-dev-design.tistory.com

 

반응형
반응형

3DS MAX 에는 3DS MAX Script 라는 고유의 스크립트가 있다.

 
보통 고가의 프로그램들에는 자신들만의 스크립트 언어를 가지고 있는 경우가 흔히있으며 대부분 이 스크립트를 통해 일반적으로 구현하기 어려운 여러가지 것을을 손쉽게 구현할 수 있게 되는 경우가 많다. 고가의 프로그램이 고가인 이유가 스크립트가 이유인 경우도 많다.

90%이상의 포토샵 유저가 포토샵 스크립트라는 것이 있다는 것을 알지 못할 것이다. 하지만 adobe 는 나름의 스크립트 언어를 지원하고 있고 이를 위해 extend script tool kit 이라는 스크립트 언어 저작 프로그램을 별도로 제품 패키지에 끼워넣어 팔고 있으니 개발사 입장에서는 분명 중요하게 생각하고 있는 듯 하다. 3D 프로그램의 양대산맥이었던 Maya 에도 mel 이라는 스크립트를 지원하고 있고 매우 강력한 것으로 알고 있다. 

오늘 내가 이야기 할 것은 바로 3DS MAX 가 지원하는  max Script 이다. 
  

3D max가 그렇게 엄청난 가격에 팔림에도 불구하고 많은 사람들이 울며 겨자먹기로 구입을 해서 사용하는 것으로 알고 있다. 과연 이들 중 이 프로그램의 가치를 충분히 얻어내고 있는 사람들이 얼마나 있을까. 말하자면 맥스에 들어있는 무수히 많은 엄청난 기능들과 효과들을 얼마나 사용하고 있을까 궁금하기도 하다. 그중에 max script 가 단연 1순위라고 생각되지만 말이다.
  

우선 나는 맥스 스크립트를 찬양하는 사람 중 한명일 것이다.실제로 나의 업무량을 1/10 도 안돼게 줄여준 고마운 녀석이기도 하고 이를 통해 얻은 시간에 보다 가치있는 많은 것을 할 수 있게 되었기 때문이다.

내가 회사에서 하는 업무 중 맥스 스크립트가 사용되지 않는 업무는 거의 없다고 생각도 든다. 맥스 스크립트는 참으로 다재다능 하므로 3D 모델링 작업을 하는데만 사용되는 것이 아니기 때문이기도 하다.

내가 맥스 스크립트로 하는 업무를 분야별로 간단하게 나열해보면,

*3D 모델링 자동화
*3D 맵핑 자동화

*웹지도 연동
*대량의 3D max파일(또는 object) import / export
*대량의 파일을 원하는 조건에 맞도록 copy / rename / delete ... (내 컴퓨터 파일관리)
*이미지 분석 및 수정 (rename, resize, crop, save as, ...)
*이미지 합성 (diffuse + occlusion + lightmap ...)
*지원되지 않는 포멧 (ex>arcGIS '*.shp') 불러오기.
*작업내역 및 필요한 내역 텍스트파일로 저장(txt, csv, ....)

뭐 더 있겠지만 그냥 생각나는 데로 적어보면 위와 같은데, 대충 봐도 참 다양한 일을 하고 있다. 깨알같이 나처럼 사용하는 사람도 많지는 않겠지만 어찌되었든 참 고마운 녀석임에는 틀림이 없다. 위의 내용중 어느 하나도 적당히 손으로 대신 하기가 쉽지 않은 것들이다. 왜냐하면 단순업무면 손이 엄청나게 많이 가거나 일일이 신경을 써서 해야 하는 작업들이기 때문이다.

간단히 export 만 하더라도 회사에서 특정시기에 많게는 한번에 3만개 이상의 obj 파일을 고유의 이름으로 export 를 해야하는데 이것을 일일이 손으로 한다는 것은 사실상 어려운 일이다.  script 가 이런것을 지원해주지 않았다면 export select 를 단축키 지정해서 하더라도 아마 1달 정도는 출근해서 야근까지 해가며 퇴근한느 순간까지 화장실도 가지 않고 일일이 저장을 했어야 했을 것이다. 그리고 손가락 관절염에 걸려 1,2 년만에 이바닥을 떠나게 될지도 모른다.

최근 max script 에 관심을 보이는 국내 유저들이 많이 보이고 있는데 쉽게 포기하지말고 다양한 방면으로 접근해서 업무를 손쉽게 할 수 있는 좋은 결과를 얻었으면 좋겠다. 사실 맥스 스크립트 만큼 프로그래밍 하기 쉬운 언어도 없다. java script 를 이용하는 photoshop script 는 정말 까다롭기 짝이 없다. 레퍼런스도 그다지 훌륭하지 않거니와 open 되어 있는 기능도 상다히 제한적이어서 초보 스크립터가 작성하기에는 정말 불편한 녀석이니까. 반면 맥스 스크립트는 대소문자도 관계가 없고 줄바꿈이나 탭, 띄어쓰기, 다이얼로그 생성, 각종 UI 생성, function 생성, 변수 및 데이터 형 관리 뭐하나 까다롭지 않고 손쉽게 접근할 수 있게끔 되어있다. 그리고 무엇보다 레퍼런스가 참으로 훌륭하다.
  

블로그에 max script 와 관련한 내용을 좀 담아 보려고 준비를 했었는데 이런저런 핑계로 미루고 있던 참이었다.

맥스에 이미 좋은 레퍼런스가 포함되어 있으므로 강좌 씩이나 할 필요도 능력도 없겠지만 알아두면 맥스 스크립트 코딩에 도움이 될만한 정보들을 기재해 보려고 한다.
  
여러사람에게 도움이 되면 좋겠다.

반응형

+ Recent posts