Monday, June 26, 2006
3ds Max] 랜덤하게 박스 그리기: 맥스 스크립트 (MAXScript) 기초 예제
(3ds Max 8을 기준으로 설명)
클릭하면확대
랜덤한 크기의 박스들이 랜덤한 색깔로 만들어지는 스크립트: 클릭하면 확대
(1) 위의 코드를 rBox.ms 등의 이름으로 저장
(2) 맥스 우측 상단에서, 장도리 아이콘의 탭, 즉 Utilities 탭을 클릭
(3) MAXScript 라는 버튼을 누름. 현재 노랗게 되어 있음
(4) Open Script 버튼을 눌러, 방금 하드에 저장한 rBox.ms 파일을 부름
(5) 위의 그림에서 화면 좌측 하단처럼 편집창이 나옴. 편집창을 마우스로 클릭하여 활성화시킨 후, Ctrl+E 키를 누름. 뷰포트에 박스들이 20개씩 무작위로 그려짐. 여러 번 누르면 박스들이 계속 더 그려짐.
Run Script 버튼으로 스크립트 파일을 고르면, 1번밖에 실행시킬 수 없습니다. 스크립트를 여러 번 실행시키려면, Open Script 로 열어서, Ctrl+E 키를 여러 번 누릅니다.
단, Ctrl+E 키는 스크립트 편집창의 핫키입니다. 맥스 본체의 핫키가 아닙니다. 따라서 반드시 편집창을 활성화시킨 후 눌러야 합니다.
맥스는 하나의 프로그램이 아니라, 여러 개의 프로그램이 합쳐져 있는 복잡한 프로그램입니다. 각각의 프로그램마다 핫키가 있어서, 이 핫키들이 프로그램들 사이에서 충돌할 수도 있습니다.
--
이것이 주석 기호입니다. 마이너스 기호 2개가 주석인데, 그 뒤의 글자들은 실행에서 무시됩니다.
maxItems = 20
변수 선언. maxItems 에서 max는 3ds맥스라는 의미가 아니고, 최대값(maximum)이라는 의미로 사용한 것입니다. 이 스크립트를 한 번 실행할 때마다 박스 20개씩을 그리라는 것입니다.
makeBox()
함수 실행
fn makeBox =
함수 정의: 이런 간단한 스크립트는 굳이 함수로 만들지 않아도 되지만, 함수 만드는 예를 들기 위해 만들었습니다. 반드시 이퀄(=) 기호가 있어야 합니다.
Box ...
여기서부터는 박스를 그리는 명령입니다. 맥스 코드는 1줄로 이어져 있어야 하고 행갈이를 하면 안됩니다. 행이 너무 길어서 강제로 행갈이를 하려면, 위의 예제처럼, 행갈이할 행 끝에 백슬래쉬(\)을 추가하고 다음줄로 행갈이를 하면 됩니다.
isSelected:on
방금 만든 박스를 선택하라는 옵션
$.wirecolor
현재 선택된 오브젝트의 색을 정의
맥스 함수 본체는 소괄호"()"로 둘러싸야 합니다. C언어와 달리, 구부러진 괄호"{}"가 아닙니다.
Box 그리기 함수 등에는 복잡한 옵션이 있습니다. 직접 옵션들을 적어주는 것보다는, 마우스로 박스를 실제로 그리는 과정을 매크로로 기록한 후 그 매크로 코드를 복사해 와서 편집하면 쉽습니다.
한글로 주석을 달면 스크립트 에디터 폰트가, 한글의 가변폭 폰트로 저절로 바뀌는 문제가 있더군요. 그리고 한글 입력이 아주 힘들었습니다. 제가 지금까지 살아오면서 써 본 에디터 중에서, 한글이 가장 이상하고 불안하게 입력되는 에디터였습니다.
업데이트:
3dsmax 2009 SP1에서 실행해 보니
---------------------------
MAXScript FileIn Exception
---------------------------
-- Type error: Call needs function or class, got: undefined
---------------------------
확인
---------------------------
이런 에러가 나는군요.
makeBox() 행을, 소스의 맨 아래로 이동시키면 에러가 없어지긴 합니다.
-- Make Random Boxes
maxItems = 20
makeBox()
fn makeBox =
(
for i = 1 to maxItems while i <= maxItems do (
Box lengthsegs:1 widthsegs:1 heightsegs:1 length:(random 0 100) width:(random 0 100) height:(random 0 100) pos:[(random -100 100),(random -100 100),(random -100 100)] mapcoords:on isSelected:on
$.wirecolor = color (random 0 255) (random 0 255) (random 0 255)
)
)
maxItems = 20
makeBox()
fn makeBox =
(
for i = 1 to maxItems while i <= maxItems do (
Box lengthsegs:1 widthsegs:1 heightsegs:1 length:(random 0 100) width:(random 0 100) height:(random 0 100) pos:[(random -100 100),(random -100 100),(random -100 100)] mapcoords:on isSelected:on
$.wirecolor = color (random 0 255) (random 0 255) (random 0 255)
)
)
클릭하면확대
랜덤한 크기의 박스들이 랜덤한 색깔로 만들어지는 스크립트: 클릭하면 확대
실행하는 법
(1) 위의 코드를 rBox.ms 등의 이름으로 저장
(2) 맥스 우측 상단에서, 장도리 아이콘의 탭, 즉 Utilities 탭을 클릭
(3) MAXScript 라는 버튼을 누름. 현재 노랗게 되어 있음
(4) Open Script 버튼을 눌러, 방금 하드에 저장한 rBox.ms 파일을 부름
(5) 위의 그림에서 화면 좌측 하단처럼 편집창이 나옴. 편집창을 마우스로 클릭하여 활성화시킨 후, Ctrl+E 키를 누름. 뷰포트에 박스들이 20개씩 무작위로 그려짐. 여러 번 누르면 박스들이 계속 더 그려짐.
Run Script 버튼으로 스크립트 파일을 고르면, 1번밖에 실행시킬 수 없습니다. 스크립트를 여러 번 실행시키려면, Open Script 로 열어서, Ctrl+E 키를 여러 번 누릅니다.
단, Ctrl+E 키는 스크립트 편집창의 핫키입니다. 맥스 본체의 핫키가 아닙니다. 따라서 반드시 편집창을 활성화시킨 후 눌러야 합니다.
맥스는 하나의 프로그램이 아니라, 여러 개의 프로그램이 합쳐져 있는 복잡한 프로그램입니다. 각각의 프로그램마다 핫키가 있어서, 이 핫키들이 프로그램들 사이에서 충돌할 수도 있습니다.
코드에 대한 간단한 설명
--
이것이 주석 기호입니다. 마이너스 기호 2개가 주석인데, 그 뒤의 글자들은 실행에서 무시됩니다.
maxItems = 20
변수 선언. maxItems 에서 max는 3ds맥스라는 의미가 아니고, 최대값(maximum)이라는 의미로 사용한 것입니다. 이 스크립트를 한 번 실행할 때마다 박스 20개씩을 그리라는 것입니다.
makeBox()
함수 실행
fn makeBox =
함수 정의: 이런 간단한 스크립트는 굳이 함수로 만들지 않아도 되지만, 함수 만드는 예를 들기 위해 만들었습니다. 반드시 이퀄(=) 기호가 있어야 합니다.
Box ...
여기서부터는 박스를 그리는 명령입니다. 맥스 코드는 1줄로 이어져 있어야 하고 행갈이를 하면 안됩니다. 행이 너무 길어서 강제로 행갈이를 하려면, 위의 예제처럼, 행갈이할 행 끝에 백슬래쉬(\)을 추가하고 다음줄로 행갈이를 하면 됩니다.
isSelected:on
방금 만든 박스를 선택하라는 옵션
$.wirecolor
현재 선택된 오브젝트의 색을 정의
기타
맥스 함수 본체는 소괄호"()"로 둘러싸야 합니다. C언어와 달리, 구부러진 괄호"{}"가 아닙니다.
Box 그리기 함수 등에는 복잡한 옵션이 있습니다. 직접 옵션들을 적어주는 것보다는, 마우스로 박스를 실제로 그리는 과정을 매크로로 기록한 후 그 매크로 코드를 복사해 와서 편집하면 쉽습니다.
한글로 주석을 달면 스크립트 에디터 폰트가, 한글의 가변폭 폰트로 저절로 바뀌는 문제가 있더군요. 그리고 한글 입력이 아주 힘들었습니다. 제가 지금까지 살아오면서 써 본 에디터 중에서, 한글이 가장 이상하고 불안하게 입력되는 에디터였습니다.
업데이트:
3dsmax 2009 SP1에서 실행해 보니
---------------------------
MAXScript FileIn Exception
---------------------------
-- Type error: Call needs function or class, got: undefined
---------------------------
확인
---------------------------
이런 에러가 나는군요.
makeBox() 행을, 소스의 맨 아래로 이동시키면 에러가 없어지긴 합니다.
tag: 3dsmax
3ds Max | 맥스 | 멘탈레이 | mental ray | 3D 그래픽
<< Home