Auto-Complete in Maxscript - 3ds Max의 맥스스크립트 에디터에서 자동완성 사용하기 (버전업)

3ds Max 2017.2 부터 공식적으로 지원하던 (숨겨진) 기능이고 지난 2020.1 업데이트부터는 기본적으로 자동완성이 켜져 있습니다만, 우연한 기회에 2019에 다시 설정을 해보게 되어 포스팅 합니다.


이 기능을 활성화 시켜주면, 맥스 환경에서 스크립트를 작성할 때 타이핑은 줄이고 명령어의 정확도는 올릴 수 있는 장점이 있습니다.

(개인적으로 조금 더 편안하게 생각되는 환경은 Sublime Text + Send To 3ds Max가 있습니다만, 회사 시스템에 추가 프로그램을 설치할 수 없는 경우 등 제약이 있을 때 유용합니다)

자동완성 기능 자체는 Autodesk 공식적으로는 3ds Max 2017 Update 2에서 추가된 내용이지만, 2020.1 이전의 맥스 버전에서 사용하기 위해서는 아래와 같은 추가 작업이 필요합니다.

1. API 명령어 추출 (또는 다운로드)

Autodesk에서 제공하는 다음의 경로에서 미리 추출된 API 파일을 다운로드 하세요.

직접 추출하시려면 링크된 GenerateMaxscriptAPI.ms 파일을 받아 맥스에서 실행합니다. 스크립트의 기본 뼈대는 Autodesk 홈페이지에서 링크된 ScriptSpot에 공개된 내용을 참조했습니다만 몇 군데 개선할 곳이 있어 다음과 같이 수정했습니다.
  • 속도가 느린 FileStream을 사용하고 있었기에 더 빠른 .Net Class로 변경해 실행시간을 대폭 향상시켰습니다.
    (제 시스템에서 원본은 파일 쓰기에 4000ms 정도 걸리는데, 개량된 스크립트는 40ms 정도면 파일쓰기가 완성됩니다. 200k도 안되는 크기라 4초가 비정상인게 맞습니다)
  • 원본은 맥스가 설치된 경로에 파일쓰기를 시도하고, 권한 등 문제로 실패할 경우 %Temp% 폴더를 사용하고 있습니다만, 수정된 스크립트는 권한문제에서 자유로운 #userscripts 폴더를 사용하고 있습니다.  
  • 완성된 API 파일에 Sort를 적용해 오름차순으로 정렬해 두었습니다.

2. 작성한 API 파일의 설치

다운로드 받은 파일은 압축을 푼 다음 적당한 위치(맥스가 설치된 폴더나, 경로에 공백이나 특수문자가 포함되지 않은 폴더)로 옮겨주세요.

직접 추출한 maxscript.api 파일은 #userscripts 폴더에 저장되어 있습니다. #userscripts 폴더는 2019 영문판이라면 "%LOCALAPPDATA%\Autodesk\3dsMax\2019 - 64bit\ENU\scripts\"가 기본값입니다만, 맥스의 버전과 인터페이스 설정에 따라 변경되므로, 기본값으로 찾으실 수 없는 분은 Maxscript Listener (단축키 F11)에서 다음의 명령어를 실행해 확인해 보세요.

GetDir #userscripts


3. 자동완성 기능의 활성화

3ds Max의 메인 메뉴 중 Scripting > New Script... 를 실행해 Maxscript Editor 창을 엽니다.
Maxscript Editor의 메뉴 중 Tools > Open User Option File 메뉴를 실행해 설정 파일을 엽니다.
다음의 내용을 추가해 줍니다.

# Autocomplete
autocompleteword.automatic=1
autocomplete.choose.single=0
autocomplete.MAXScript.ignorecase=1
autocomplete.MAXScript.start.characters=$(chars.alpha)$(chars.numeric)_#.
#autocomplete.MAXScript.start.characters=$(chars.alpha)$(chars.numeric)$_@#.
api.$(file.patterns.MAXScript)=E:\maxscript\maxscript.api


이때  표시한 API 파일의 경로는 2번 항목에서 maxscript.api 파일을 저장한 장소를 적용해 줍니다.

(원래는 #userscripts 폴더를 그대로 사용하려고 해봤지만 따옴표로 둘러싼 공백있는 경로는 APIPath가 에러 없이 실패합니다. 아시는 분은 알려주세요.)

4. 확인

3ds Max를 재시작하고, 자동완성 기능이 동작하는지 확인합니다.



마치며

제대로된 IDE의 자동완성과는 거리가 멀지만 없는 것보다는 낫네요.
Python에 익숙해지면 성능 비교를 해보고 싶습니다.
추출 코드와 설정 파일에 개선점이 하나씩 남았지만, 목적은 달성했으니 수정은 하지 않을 듯 합니다.

좋은 하루 되세요~~

댓글

  1. 익명17:27

    감사합니다. 맥스 스크립트 막 배우는 중인데 덕분에 시간을 엄청 절약했습니다!

    답글삭제
    답글
    1. 조금이나마 도움이 되었다니 기쁠 뿐입니다~

      삭제

댓글 쓰기

이 블로그의 인기 게시물

[QuickTip] 언리얼 엔진 설치 장소 옮기고 런처에 연결해주기

[QuickTip] Substance Painter에서 Mask 추출하기

[소식] Marmoset Toolbag 3.07