전문분야 (3D, 그래픽, 프로그래밍, AI)/3DS MAX 스크립트

[3ds Max] Scene Explorer 이름 변경 단축키. 맥스 스크립트 만들기

아진디자인랩 2025. 10. 30. 00:45
반응형

3ds Max에서 오브젝트의 이름을 바꾸는 작업은 생각보다 자주 반복됩니다.
특히 Scene Explorer에서 더블클릭이나 Modify 창을 통해 이름을 수정하는 경우, 작업 리듬이 끊기거나 타이밍 문제로 제대로 수정되지 않는 경우가 많죠.

단축키 하나로 Scene Explorer에서 바로 이름 변경 상태로 진입하는 방법을 MAXScript로 구현하는 과정을 공유합니다.

 

문제 상황 — 기본 Scene Explorer의 한계

기본적으로 F2 키나 Rename 기능은 뷰포트 또는 Scene Explorer 내에서 제한적으로 작동합니다.
Scene Explorer 창에서는

  • 빠르게 선택 후 이름 변경이 불가하거나
  • 두 번 클릭해야 활성화되거나
  • 키보드 포커스가 적용되지 않는 버그가 존재합니다.

이 문제는 Autodesk 커뮤니티에서도 꾸준히 제기되지만, F2 단축키로 Scene Explorer에서 바로 오브젝트의 이름을 수정할 수 없습니다.

해결 방향

이 문제를 해결하기 위해 다음 조건을 만족하는 스크립트를 구성했습니다.

  1. Scene Explorer에서 선택된 오브젝트의 이름을 자동으로 인식
  2. 팝업창을 띄워 새 이름 입력
  3. Enter 키 또는 OK 버튼 클릭 시 이름 변경 + 팝업 자동 종료
  4. 단축키(F2 등)에 연결 가능

구현 스크립트 (MAXScript)

macroScript JG_QuickRename
category:"JG_Custom"
tooltip:"Quick Rename (Scene Explorer / Viewport)"
buttontext:"Quick Rename"
(
    try(destroyDialog JG_RenameRollout)catch()

    /* --- helpers --- */
    fn isThreeDigits s =
    (
        if s != undefined and s.count == 3 then
        (
            (s[1] >= "0" and s[1] <= "9") and
            (s[2] >= "0" and s[2] <= "9") and
            (s[3] >= "0" and s[3] <= "9")
        )
        else false
    )

    fn stripTrailing_ddd nameStr =
    (
        if nameStr != undefined and nameStr.count >= 4 then
        (
            local under = substring nameStr (nameStr.count - 3) 1
            local last3 = substring nameStr (nameStr.count - 2) 3
            if (under == "_" and isThreeDigits last3) then
                (substring nameStr 1 (nameStr.count - 4))  -- remove "_###"
            else nameStr
        )
        else nameStr
    )

    fn pad3 i =
    (
        local s = i as string
        case of
        (
            (i < 10):  ("00" + s)
            (i < 100): ("0" + s)
            default:   s
        )
    )

    /* --- UI --- */
    rollout JG_RenameRollout "Quick Rename" width:360 height:120
    (
        groupBox g1 "" pos:[10,10] width:340 height:64
        label lbl1 "New name (다중 선택 시 _001부터 자동 번호)" pos:[20,20] width:320 height:16
        editText edt_name "" pos:[20,40] width:320 height:20

        button btn_ok "OK" pos:[110,86] width:60 height:24
        button btn_cancel "Cancel" pos:[190,86] width:60 height:24

        fn doRename baseName =
        (
            if selection.count == 0 then
            (
                messageBox "선택된 오브젝트가 없습니다.\nScene Explorer 또는 뷰포트에서 먼저 선택하세요." title:"Quick Rename"
                false
            )
            else
            (
                local sel = selection as array
                if sel.count == 1 then
                (
                    sel[1].name = baseName
                )
                else
                (
                    for i = 1 to sel.count do
                    (
                        sel[i].name = (baseName + "_" + pad3 i)
                    )
                )
                true
            )
        )

        on JG_RenameRollout open do
        (
            if selection.count > 0 then
            (
                -- 기본값: 첫 번째 선택 이름에서 _### 가 있으면 제거
                edt_name.text = stripTrailing_ddd selection[1].name
            )
        )

        on btn_ok pressed do
        (
            if doRename edt_name.text do (destroyDialog JG_RenameRollout)
        )
        on btn_cancel pressed do (destroyDialog JG_RenameRollout)
    )

    fn JG_ShowQuickRenameDialog =
    (
        try(destroyDialog JG_RenameRollout)catch()
        createDialog JG_RenameRollout style:#(#style_titlebar, #style_sysmenu, #style_toolwindow)
    )

    on execute do JG_ShowQuickRenameDialog()
)

단축키 적용 방법

  1. 위 코드를 .ms 파일로 저장 (Encoding : UFT-8 with BOM 으로 저장)
  2. 3ds Max 뷰포트에 드래그앤드롭
  3. Customize → Customize User Interface → Category: JG_Custom 선택 (스크립트가 잘 설치 됐는지 확인)
  4. Quick Rename (Scene Explorer / Viewport) < 을 찾아서 단축키 지정

이제 단축키 하나로 선택한 오브젝트 이름을 즉시 변경할 수 있습니다.

결과

 

뷰포트의 오브젝트 또는 Scene Explorer에서 선택 후 지정한 단축키를 입력하면 저렇게 팝업창이 뜹니다. 원하는 이름으로 변경하고 OK 버튼을 눌러주면 이름이 변경됩니다.

다수 오브젝트를 선택도 가능합니다. 여러개를 선택한 경우에는 변경한 오브젝트 이름 뒤에 자동으로 _001, _002... 가 붙도록 했습니다.

작성된 스크립트의 카테고리는 제 이니셜로 했습니다.

팁: 팝업 폭 조정 & 텍스트 수정

팝업창의 폭을 변경하고 싶을 경우는 rollout의 width 값을 260에서 200 정도로 변경하면 될 것 같습니다.
타이틀이나 중간에 들어간 설명 문구도 조금씩 수정해보면 조금이나마 맥스스크립트를 이해하는데 도움이 될거예요.


작은 자동화가 효율을 바꾼다

이 스크립트는 단순한 이름 변경용 도구지만 반복적인 클릭 2~3번을 줄이는 자동화가 쌓이면 모델링 작업의 효율이 크게 달라집니다.

한번 작업할 때 1초를 줄여준다고 생각하면 짧은 시간이지만 이 작업을 100번 한다고 가정하면 우리는 1분 40초라는 시간을 줄일 수 있습니다.

반응형