본문 바로가기

Coding/3dsMax python

[3dsMax python] Log Logging 모듈 print 문으로 어느 정도 로그를 남겼었지만, 스크립트를 만들어 디자이너에게 줄 경우, 로그파일이 필요해서 합니다. 참고로 맥스에 print 문이 많이 찍히게 되면 맥스가 멈춰서 한참 기다려야합니다. (무거운 파일이면 맥스가 꺼집니다) 그래서 저는 되도록이면 주요 로그는 콘솔에, 주요 로그와 세부로그는 파일로 남겨보겠습니다. 그냥 import 해서 사용하면 됩니다. 빨간 글씨로 출력이 됩니다. 하지만 default 레벨설정이 warning이여서 info 랑 debug는 출력안됩니다. import logging logging.debug("test") logging.info("test") logging.warning("test") logging.error("test") # WARNING.. 더보기
[3dsMax python] GUI with pymxs 파일탐색기 Pyside2를 사용하지 않고 파일을 불러와봤습니다. from pymxs import runtime as rt path = os.path.dirname(os.path.abspath(__file__)) path_to_file = rt.getOpenFileName(caption="Open A Test Excel:", filename=path+'\\') 관련자료 맥스스크립트 File Dialogs: help.autodesk.com/view/3DSMAX/2017/ENU/?guid=__files_GUID_D4B43A33_8342_4BC9_80AB_91460861D37C_htm 더보기
[3dsMax python] V-ray material with pymxs V-ray Renderer 이름이 V-ray 입니다. 카오스 그룹에서 만들었습니다. 한국지사도 있습니다. 저는 개발자여서 왜 Default 렌더러인 Arnold와 V-ray가 비슷해보이지만, 그래픽쪽 최전선에 있는 사람들 눈에는 "빛의 표현" 분야에서는 최고라고 합니다. V-ray 재질 생성 Vray가 깔려있다는 전제하에, 인터넷에 돌아다니는 맥스스크립트를 보고 파이썬으로 흉내를 내봤습니다. 놀랍게도 정상작동합니다 😎 from pymxs import runtime as rt if __name__ == '__main__': print 'Hi, velbie!' obj = rt.sphere() material = rt.VRayMtl() material.diffuse = rt.Color(255, 0, 0) # .. 더보기
[3dsMax python] Material with pymxs 모든 재질 가져오기 아래코드를 사용하면 Slate Material Editor에서 Scene Materials 에 모든정보를 가져옵니다. 😎 특정재질을 찾으려면 for문에서 이름만 비교하면 됩니다. 특정재질을 복사하려면 주석부분을 풀면됩니다. import pymxs for m in pymxs.runtime.scenematerials: print m # m2 = pymxs.runtime.copy(m) 재질의 맵에 접근하기 재질은 map을 가지고 있습니다. 그중 Diffuse map에 접근하는 방법입니다. 그렇다면 다른 map에는 어떻게 접근할까요? (이 문서를 참고해주세요) import pymxs for material in pymxs.runtime.scenematerials: print material... 더보기
[3dsMax python] Layer with pymxs 레이어 생성하기 안녕하세요, 레이어 생성하기 코드입니다. 레이어 계층을 관리할 수 있습니다. from pymxs import runtime as rt if __name__ == '__main__': parent = rt.LayerManager.NewLayerFromName("C") child = rt.LayerManager.NewLayerFromName("D") child.setParent(parent) 레이어에 객체 넣기 레이어에 객체를 넣어볼려고 하니깐, 어떤 함수가 있는지를 몰라서 맥스스크립트 문서를 참고했습니다. obj =rt.getNodeByName(target_name) layer = rt.LayerManager.NewLayerFromName(new_name) layer.addnode(obj).. 더보기
[3dsMax python] Scene object with pymxs 전체 씬그래프 탐색 맥스 왼쪽에 보면 레이어와 씬그래프를 볼 수 있는곳이 있습니다. 전체를 가져올때도 좋지만, 특정계층을 오브젝트를 가져올때 유용합니다. from pymxs import runtime as rt def output_node(node, indent=''): """Print the scene graph as text to stdout.""" print(indent, node.Name) for child in node.Children: output_node(child, indent + '--') output_node(rt.rootnode) 계층없이 모든 오브젝트 가져오기 objs = pymxs.runtime.objects for o in objs: print(o.name) 특정 오브젝트 가져오.. 더보기
[3dsMax python] pymxs 사용해보기 MAXScript 런타임 사용하기 자바스크립트의 런타임은 브라우저가 될수도 있고, node.js 가 될 수 있는것 처럼 맥스스크립트를 인식할 수 있는 런타임이 있고, 파이썬을 인식할 수 있는 런타임이 따로 있습니다. 근데 pymxs 는 맥스스크립트를 랩핑한거니깐 맥스스크립트의 런타임도 사용하는 것 같습니다. 근데 뭐.. 맥스스크립트를 잘 몰라서 큰 의미는 없을것 같습니다. 일단 '그냥 rt. 뒤에 나오는게 맥스스크립트에서 사용하는것과 비슷하게 사용하고, 맥스스크립트 런타임을 사용한다'고 이해하고 넘어야야 겠습니다. import pymxs rt = pymxs.runtime t = rt.Teapot() rt.classOf(t) MAXScript Undo System 이거 돌려봤는데 호출해서 사용했을때 버그가.. 더보기
[3dsMax python] 시작과 환경구축 3ds Max 3ds Max 는 많은 디자이너들이 사용하지만, 그 안에서 작동하는 Script에 대한 정보는 많지는 않습니다. 저도 잘 모르지만 파이썬 스크립트를 사용할 기회가 생겨 여기에 기록하며 공부해 보겠습니다. Python3 vs. Python2 3dsMax2021 부터 Python3 를 지원합니다. 새로 유입되신 분들은 '그럼 아직도 Python2 를 사용해왔다는건가?ㄷㄷ' 라고 의문이 들 수 있습니다. 근데 놀랍게도 3dsMax2020 까지 Python2 를 사용했습니다. 저도 맘같아선 Python3 를 사용하고 싶지만, 업체에서는 기존에 레거시가 있기때문에 2021를 사용하는 곳은 거의 없습니다. 저의 타겟은 3dsMax2018 이기때문에 Python2 를 사용해야합니다. MaxPlus vs.. 더보기