v1 → v2 마이그레이션 가이드
마크다운 다운로드v1에서 v2로 전환하는 방법을 설명합니다. 기존 코드 대부분은 그대로 동작합니다. 변경이 필요한 부분은 아래와 같습니다: (1) Import 방식, (2) slot 타입 규칙, (3) 삭제된 select_* → get_*(select=1) 치환.
1. Import 방식 변경 (필수)
v1 (5줄)
import sys, os, pymxs
_p = os.path.join(pymxs.runtime.getDir(pymxs.runtime.Name("userScripts")), "os_fast_ref_package")
if _p not in sys.path:
sys.path.append(_p)
from os_fast_ref.api import FastRefAPI
v2 (1줄)
from os_fast_ref.api import FastRefAPI
v2 .mzp 설치 시 startup 스크립트(fast_ref_register_path.ms)가 자동으로 등록되어 Max 실행 직후부터 경로 설정 없이 import됩니다.
주의: v2
.mzp로 재설치하지 않으면 한 줄 import가 동작하지 않습니다. 반드시 최신 MZP로 재설치하세요.
2. slot 타입 규칙 강화 (확인 필요)
v2에서는 slot 인자에 int만 허용합니다. bool, str, float 등은 TypeError를 즉시 발생시킵니다.
영향받는 메서드
remove_reference, replace_reference, reload_reference, merge_reference, set_space_activate, set_unpack, export_fbx
확인 사항
# This v1 pattern raises TypeError in v2
slot = "0" # string slot
api.remove_reference(slot=slot) # TypeError!
# Correct approach
slot = int(slot)
api.remove_reference(slot=slot) # OK
3. 신규 메서드 (선택적 활용)
| 메서드 | 설명 |
|---|---|
get_outdated_references() |
OUTDATED 레퍼런스 목록만 반환 |
reload_outdated_references() |
OUTDATED 레퍼런스만 리로드 |
refresh() |
InfoNode 강제 재스캔 |
get_all_objects / get_skin_meshes / get_skin_bones / get_all_skin_objects / get_duplicate_nodes / get_biped_com / get_biped_nodes |
Get Nodes 조회 API (select=0|1) |
기존 코드에서 사용하지 않아도 무관합니다. 단, 옛 select_*를 쓰던 코드는 섹션 6을 필수로 확인하세요.
4. FBX preset 키워드 (선택적 활용)
export_fbx / export_fbx_all에 preset= 키워드가 추가되었습니다. 기존 fbx_options=dict 방식은 그대로 동작합니다.
# v1 style (still works in v2)
api.export_fbx(slot=0, output_path=r"J:\output\char.fbx",
fbx_options={"Animation": False})
# v2 new — specify by preset name
api.export_fbx(slot=0, output_path=r"J:\output\char.fbx", preset="Unreal_Ani")
5. 쓰기 작업의 silent 보장
v1에서는 Space OFF 레퍼런스가 있는 씬에서 add/remove/replace 등을 호출하면 Smart Switch 확인창이 표시될 수 있었습니다.
v2 공개 API는 항상 silent 모드로 동작합니다. 확인창이 표시되지 않습니다.
빠른 변환 예시
Before (v1)
import sys, os, pymxs
_p = os.path.join(pymxs.runtime.getDir(pymxs.runtime.Name("userScripts")), "os_fast_ref_package")
if _p not in sys.path:
sys.path.append(_p)
from os_fast_ref.api import FastRefAPI
api = FastRefAPI()
api.reload_all_references()
api.export_fbx_all(output_folder=r"J:\output")
api.update_ui()
After (v2)
from os_fast_ref.api import FastRefAPI
api = FastRefAPI()
api.reload_outdated_references() # reload only OUTDATED
api.export_fbx_all(
output_folder=r"J:\output",
preset="Unreal_Ani" # specify preset by name
)
api.update_ui()
6. 삭제된 select_ → get_(select=1) (필수, 해당 시)
옛 select_reference_nodes / select_duplicate_nodes / select_skin_mesh / select_skin_bones는 완전 삭제되었습니다 (shim 없음). 호출 시 AttributeError가 납니다.
| 삭제됨 | 대체 |
|---|---|
select_reference_nodes(...) |
get_all_objects(slot=..., select=1) |
select_duplicate_nodes(...) |
get_duplicate_nodes(slot=..., select=1) |
select_skin_mesh(...) |
get_skin_meshes(slot=..., select=1) |
select_skin_bones(...) |
get_skin_bones(slot=..., select=1) |
조회만 필요하면 select=0(기본값)을 사용하세요. 공통 계약·예외는 Get Nodes 개요 페이지를 참고하세요.
# Before (removed — AttributeError)
# api.select_skin_mesh(slot=0)
# After
api.get_skin_meshes(slot=0, select=1)